微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 一款简洁的单片机交通灯程序

一款简洁的单片机交通灯程序

时间:11-25 来源:互联网 点击:
这是一款简洁的单片机交通灯程序,用了两只数码管进行倒计时显示,实现的:首先东西方向红灯50秒,此时南北绿灯50秒,并且数码管显示倒计时从49到00;然后所有方向的黄灯闪烁5秒,并且数码管显示5秒倒计时;接着东西绿灯35秒,此时南北红灯35秒,数码管显示35秒倒计时;再接着所有黄灯在闪烁5秒,数码管5秒倒计时;循环第1到第4步。程序源码:

#include
#define uint unsigned int
#define uchar unsigned char
sbit shiw=P3^0;//显示十位引脚声明
sbit gew=P3^1; //显示个位引脚声明
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};//数码管显示编码
uint t0,shu,shi,ge,aa;
void display(uint shi,uint ge);//显示程序声明
void delay(uint z)//延时子程序http://www.5imcu.net/
{
uint x,y;
for(x=110;x>0;x--)
for(y=z;y>0;y--);
}
void flicker()//黄灯闪烁子程序
{
P0=0x1b;
delay(10);
P0=0xff;
delay(10);
}
void init()//定时器初始化程序
{

TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)MOD256;
EA=1;
ET0=1;
EX0=1;
TR0=1;
}
void main()
{
init();
while(1)
{
P0=0x2e;
shu=50;
do display(shi,ge);
while(aa<20*50);//东西红灯50S
aa=0;TR0=1;

shu=5;
do {flicker();
display(shi,ge);}
while(aa<100);//黄灯闪烁5S
aa=0;TR0=1;

P0=0x35;
shu=35;
do display(shi,ge);
while(aa<20*35);//南北红灯35S
aa=0;TR0=1;
shu=5;
do {flicker();
display(shi,ge);}
while(aa<100);
aa=0;TR0=1;//黄灯闪烁5S
}
}
void timer0()interrupt 1 //定时器0中断子程序http://www.5imcu.net/
{
TH0=(65536-50000)/256;
TL0=(65536-50000)R56;
t0++;
aa++;
if(t0==20)
{
t0=0;
shu--;
shi=shu/10;
ge=shu;
if(shu==0)
{
TR0=0;
}
}
}
void display(uint shi,uint ge)//显示子程序http://www.duankudp.com/
{
P2=0x00;
shiw=0;
P2=table[shi];
delay(1);
shiw=1;

P2=0x00;
gew=0;
P2=table[ge];
delay(1);
gew=1;

}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top