基于51单片机数码管显示十字路口红绿灯

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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++);

}

相关文档
最新文档