|
交通灯设计
#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};//共阴极数码管真值表
/*延时函数*/
void delay(int z)
{
int i,j;
for(i=z;i>0;i--)
for(j=100;j>0;j--);
}
/*初始化函数*/
void init()
{
TMOD=0X01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
EA=1;
ET0=1;
TR0=1;
P1=0x00;
}
/*倒计时显示子程序*/
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) //定时1s到
{
t0=0;
sec++;
if(sec==8) //8秒后进入第二状态
{
num=1;
}
if(sec==10) //10s后进入第三状态
{
num=2;
}
if(sec==15) //15s后进入第四状态
{
num=3;
}
if(sec==17) //17s后又进入第一状态
{
sec=0;
num=0;
}
}
}
void main()
{
init();
while(1)
{
if(num==0) //第一状态
{
tt=8-sec; //东西绿灯倒计时
display();
P1=0x0c; //南北绿灯倒计时
}
if(num==1) //第二和第四状态同是黄灯闪烁
{
tt=10-sec;
display(); //黄灯倒计时
P1=0x0a; //黄灯亮
delay(7);
P1=0x08; //黄灯灭
}
if(num==2) //第三状态
{
tt=15-sec;
display(); //南北绿灯倒计时
P1=0x21; //南北绿灯 东西红灯
}
if(num==3) //第二和第四状态同是黄灯闪烁
{
tt=17-sec;
display(); //黄灯倒计时
P1=0x11; //黄灯亮
delay(7);
P1=0x01; //黄灯灭
}
}
}
|
-
-
333.zip
19.11 KB, 下载次数: 5, 下载积分: 黑币 -5
-
-
led.zip
878 Bytes, 下载次数: 3, 下载积分: 黑币 -5
|