单片机之LED闪烁
程序代碼編寫:
在單片機中有幾條很特殊的程序語法以及keil軟件的基本操作步驟:
sfr P0= 0X80;其中,sfr是關鍵字,是51單片機獨有的,他的作用是定義一個單片機特殊功能寄存器。51單片機內部中有許多寄存器,如果想使用的話,必須先進行sfr聲明。
不過在keil軟件中,已經把所有這些聲明都預先寫好了并保存在一個專門的文件中,要使用時只需在文件開頭添加一條
#include <reg52.h>;與#include <reg51.h>大體相同,只是在使用時對位的定義不一樣,reg51.h文件中對P1.1的操作是寫成P1_1;reg52.h文件中的操作則寫成P1^1。表示方法不一樣而已。
另外前者是特指ATMEL公司的52系列單片機,后者指所有52系列的單片機。
第二條語句是:
sbit LED =P0^0;?sbit就是對sfr中的8個開關其中一個進行定義。經過上邊的語句后,以后只要在程序中,寫LED,就代表了P0^0口。也就是說給了P0^0一個更形象的名字叫做LED;
下面我們來了解一下單片機的特殊功能寄存器:
在使用單片機中某一個寄存器之前,必須對這個寄存器的地址進行說明。每個型號的單片機都會配有生產廠家所編寫的數據手冊。下面我們以一個截取的手冊表格為例:
?
?看P0,P1,P2,P3,這四個,每個P口本身又有8個控制端口,其中P0口所在地址,是0X80,一共有從7到0這8個IO口控制位,后面有個Reset Value(復位值)。其8個復位值都是1,這也就是說,每次單片機上電復位的時候,所有的引腳是值都默認是1。即高電平。在設計電路時也需考慮到。
?LED閃爍程序:
預想對LED燈進行開關開關;實現代碼:
#include <REG52.H> #include <INTRINS.H>void main() {unsigned int i =0;while (1){P0=0xFE;P0=0XFF;}}下載程序后發現,LED并沒有呈現閃爍效果,這是因為單片機運行頻率很快,所以這樣高頻率的變化,我們肉眼并不能發現。
于是我們對程序進行一個延時處理。
#include <REG52.H> #include <INTRINS.H>void main() {unsigned int i =0;while (1){P0=0xFE;for(i=0;i<30000;i++);P0=0XFF;for(i=0;i<30000;i++);}}利用for語句實現一個延時的效果,以此到達我們預期效果;
總結