/*
注:該程序主要是如何運用定時器進行計數
體現模塊化的子函數,是一個比較淺顯的程序
*/
#include<reg52.h> //頭文件
#define uchar unsigned char //宏定義
#define uint unsigned int
uchar count; //定義全局變量
void display_led() //led顯示子函數
{
if(count==20) //每隔1S發生變化(晶振為:12MHZ)
{
count=0; //計數清零,以便下次計數
P2=~P2; //P2的值取反
P2=P2<<1; //P2的值左移
P2=~P2;
if(P2==0xff) //如果最后一個LED亮后,
P2=0xfe; //則第一個LED亮
}
}
void init() //初始化子函數
{
EA=1; //打開總中斷
ET0=1; //打開定時器中斷
TR0=1; //啟動定時器
TMOD=0x01; //T0工作方式1,16位計數
TH0=(65536-50000)/256;//設置定時器的初始值
TL0=(65536-50000)%256;
P2=0xfe; //給P2口賦初始值
while(1)
{
display_led(); //調用LED顯示子函數
}
}
void main() //主函數
{
init(); //調用初始化子函數
}
void delay() interrupt 1 //定時中斷子函數
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
count++; //計數變量自加1
}