//LED由三極管及73HC138控制
//用定時(shí)器0實(shí)現(xiàn)亮與滅之間的1秒時(shí)
# include <reg52.h>
sbit led2 = P0^0;
sbit addr0 = P1^0;
sbit addr1 = P1^1;
sbit addr2 = P1^2;
sbit addr3 = P1^3;
sbit enled1 = P1^4;
int main()
{
unsigned char time0 = 0;
addr0 = 0, addr1= 1, addr2 = 1,addr3 = 1, enled1 = 0; //38譯碼器控制led2時(shí)的I/O狀態(tài)(根據(jù)譯碼器真值表)
led2 = 0;//先點(diǎn)亮LED2
TR0 = 1;//啟動(dòng)定時(shí)器0
TMOD = 0x01;//定時(shí)器0、工作方式1
TH0 = 0xB8;TL0 = 0x00;//已20ms定時(shí)時(shí),裝入的初值
TF0 = 0;//單片機(jī)上電后,TF0/1默認(rèn)為0,因此此步可省略。
while(1)//主程序大循環(huán)
{
if(TF0 == 1)//判斷TF0是否為1(溢出),若溢出則執(zhí)行if內(nèi)語(yǔ)句
{
TF0 = 0;//TF0軟件重置
TH0 = 0xB8;TL0 = 0x00;//給定時(shí)器0存儲(chǔ)寄存器裝入計(jì)數(shù)值為20ms時(shí)的初值(初值=65536-計(jì)數(shù)值)
time0++;//TF0每溢出一次(20ms),變量time0加1,
if(time0 >= 50) //當(dāng)time0從0變50時(shí),則1秒時(shí)間已到
{
time0 = 0;//time0清零,重新計(jì)數(shù)
led2 = ~led2;//led2取反,實(shí)現(xiàn)亮滅之間1秒變化
}
}
}
return 0;
}