基于51单片机数码管显示十字路口红绿灯
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于51单片机数码管显示十字路口红绿灯
#include
unsigned char count,d1,d2,c1,c2;
unsigned char s[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; signed int time=10,time1=13,g=3,y=13;
void delay(unsigned char i);
/***********子函数声明***************/
void sm();
/***********I/O端口声明*****************/
sbit P2_0=P2^0; //东西绿
sbit P2_1=P2^1; //东西红
sbit P2_2=P2^2; //东西黄
sbit P2_3=P2^3; //南北绿
sbit P2_4=P2^4; //南北红
sbit P2_5=P2^5; //南北黄
sbit button=P2^6;
sbit button1=P2^7;
sbit button2=P3^0;
sbit button3=P3^1;
sbit button4=P3^2;
sbit button5=P3^3;
sbit button6=P3^4;
sbit button7=P3^5;
sbit button8=P3^6;
/*************************************数码显示******************************************/
void sm()
{
d1=time/10;
d2=time%10; //东西数码管
P1=0x00;
P0=s[d1];
delay(20);
P1=0x01;
P0=s[d2];
delay(20);
c1=time1/10; //南北数码管
c2=time1%10;
P1=0x02;
P0=s[c1];
delay(20);
P1=0x03;
P0=s[c2];
delay(20);
}
void main() //主函数{
TMOD=0x01;
TH0=0x3c;
TL0=0xb0;
EA=1;
ET0=1;
TR0=1;
while(1)
{
sm();
}
}
void int1()interrupt 1 {
count++;
if(count==20)
{
count=0;
ts++;
th++;
time--;
time1--;
}
/*****************************判断程序******************************/
if(ts==0&&th==0) //初始状态时间与亮灯颜色
{
time1=13;
time=10;
P2=0xee;
}
if(ts==11) //东西10秒转3秒
{
P2=0Xeb;
time=3;
}
if(ts==15) //东西3秒转13秒{
P2=0xf5;
time=13;
}
if(ts==29) //东西13秒转10秒{
ts=0;
}
if(th==14) //南北13秒转10秒{
P2=0xf3;
time1=10;
}
if(th==25) //南北10秒转3秒{
P2=0xdd;
time1=3;
}
if(th==29) //南北3秒转10秒{
th=0;
}
}
void delay(unsigned char i ) //延时函数{
unsigned char j,k;
for (k=0;k
for (j=0;j<10;j++);
}