|
交通燈設(shè)計(jì)
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uint num=0,sec=0,t0=0,t1=0,tt,shi,ge;
bit fg;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共陰極數(shù)碼管真值表
/*延時(shí)函數(shù)*/
void delay(int z)
{
int i,j;
for(i=z;i>0;i--)
for(j=100;j>0;j--);
}
/*初始化函數(shù)*/
void init()
{
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
P1=0x00;
}
/*倒計(jì)時(shí)顯示子程序*/
void display()
{
shi=tt/10;
ge=tt%10;
P2=0xfd;
P0=table[ge];
delay(1);
P2=0xfe;
P0=table[shi];
delay(1);
}
void timer0() interrupt 1 //T0中斷
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256; //重裝初值
t0++; //中斷記次
if(t0==20) //定時(shí)1s到
{
t0=0;
sec++;
if(sec==8) //8秒后進(jìn)入第二狀態(tài)
{
num=1;
}
if(sec==10) //10s后進(jìn)入第三狀態(tài)
{
num=2;
}
if(sec==15) //15s后進(jìn)入第四狀態(tài)
{
num=3;
}
if(sec==17) //17s后又進(jìn)入第一狀態(tài)
{
sec=0;
num=0;
}
}
}
void main()
{
init();
while(1)
{
if(num==0) //第一狀態(tài)
{
tt=8-sec; //東西綠燈倒計(jì)時(shí)
display();
P1=0x0c; //南北綠燈倒計(jì)時(shí)
}
if(num==1) //第二和第四狀態(tài)同是黃燈閃爍
{
tt=10-sec;
display(); //黃燈倒計(jì)時(shí)
P1=0x0a; //黃燈亮
delay(7);
P1=0x08; //黃燈滅
}
if(num==2) //第三狀態(tài)
{
tt=15-sec;
display(); //南北綠燈倒計(jì)時(shí)
P1=0x21; //南北綠燈 東西紅燈
}
if(num==3) //第二和第四狀態(tài)同是黃燈閃爍
{
tt=17-sec;
display(); //黃燈倒計(jì)時(shí)
P1=0x11; //黃燈亮
delay(7);
P1=0x01; //黃燈滅
}
}
}
|
-
-
333.zip
2016-12-22 22:58 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
19.11 KB, 下載次數(shù): 5, 下載積分: 黑幣 -5
-
-
led.zip
2016-12-22 22:58 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
878 Bytes, 下載次數(shù): 3, 下載積分: 黑幣 -5
|