51单片机设计,哪位大神帮帮忙设计一下,谢谢了!!!
51单片机设计,哪位大神帮帮忙设计一下,谢谢了!!!交通灯控制器设计设计要求利用单片机设计一个十字路口交通灯控制器。用单片机控制LED灯(红、绿、黄灯)模拟指示。模拟东西...
51单片机设计,哪位大神帮帮忙设计一下,谢谢了!!!交通灯控制器设计
设计要求
利用单片机设计一个十字路口交通灯控制器。用单片机控制LED灯(红、绿、黄灯)模拟指示。模拟东西方向的十字路口交通信号控制情况。东西向通行时间为30s,南北向通行时间为20s,缓冲时间为5s。
展开
2个回答
展开全部
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
#define red (~0x01)
#define yellow (~0x02)
#define green (~0x04)
#define left (~0x08)
#define nbred (~0x10)
#define nbyellow (~0x20)
#define nbgreen (~0x40)
#define nbleft (~0x80)
uint num2;
uchar dx_js,nb_js;
uchar zt;
uchar code dxcz[]={0,30,5 ,25,5,};
uchar code nbcz[]={0,35,5 ,20,5,};
uchar code tab2[]={0,
0xFF&green&nbred,
0xFF&yellow&nbred,
0xFF&red&nbgreen,
0xFF&red&nbyellow,
};
sbit D0=P2^0;
sbit D1=P2^1;
sbit D2=P2^2;
sbit D3=P2^3;
uchar ds[4];
uchar code tab[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,};
//数码管显示
void smxs(){
static uchar a;
if(a>3)a=0;
P2&=0xf0;
P0=tab[ds[a]];
switch(a){
case 0:D0=1;break;
case 1:D1=1;break;
case 2:D2=1;break;
case 3:D3=1;break;
}
a++;
}
void init() //初始化函数
{ TMOD=0x01;
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
EA=1;
ET0=1;
}
void main()//主函数
{
init();
zt=1;
num2=0;
dx_js=dxcz[zt];
nb_js=nbcz[zt];
TR0=1;
while(1){
P1=tab2[zt];
ds[0]=dx_js/10;
ds[1]=dx_js%10;
ds[2]=nb_js/10;
ds[3]=nb_js%10;
}
}
void timer0() interrupt 1//定时器,实现倒计时
{
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
if(++num2==1000){//1s
num2=0;
dx_js--;//倒计时
nb_js--;
if(dx_js==0||nb_js==0){//到0
zt++;//状态加1
if(zt==5){
zt=1;
}
dx_js=dxcz[zt];//重新开始计时
nb_js=nbcz[zt];
}
}
smxs();
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询