预览加载中,请您耐心等待几秒...
1/5
2/5
3/5
4/5
5/5

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

基于51单片机的交通灯系统(proteus仿真实现) 一、程序代码 /****************************************************************************** 用51单片机模拟交通灯系统 交通灯共有4个状态,应循环执行。初始状态为东西通行:东西绿灯、南北红灯保持 25秒; 后转为过渡状态:东西黄灯、南北红灯保持5秒;再转为南北通行:南北绿灯、东西红 灯 保持25秒;最后转为过渡状态:南北黄灯、东西红灯保持5秒。 ******************************************************************************/ #include<reg52.h> #defineucharunsignedchar ucharn=0;//计数变量 uchars=0;//秒 sbitshi=P3^0;//数码管显示十位 sbitge=P3^1;//数码管显示个位 ucharcodetab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管段码表 voiddelay(uchark)//1ms延时函数 { uchari; while(k--) { for(i=0;i<115;i++); } } voiddisplay(ucharnum)//数码管显示函数 { //显示倒数计时的十位 shi=0; P2=tab[num/10]; delay(3); shi=1; //显示倒数计时个位 ge=0; P2=tab[num%10]; delay(3); ge=1; } voidmain() { EA=1;//开总中断 ET0=1;//开T0中断 TMOD=0x01;//设置T0工作在方式一 TH0=(65536-10000)/256;//给定时器T0高8位赋初值 TL0=(65536-10000)%256;//给定时器T0低8位赋初值 TR0=1;//启动T0 while(1) { if(s<30) { if(s<25)//东西绿灯,南北红灯,保持25秒 { display(25-s);//25秒倒数计时 P1=0xee; P0=0xbb; } else//过渡状态:东西黄灯,南北红灯,保持5秒 { display(30-s);//5秒倒数计时 P1=0xee; P0=0xdd; } } elseif(s<55)//南北绿灯,东西红灯,保持25秒 { display(55-s);//25秒倒数计时 P1=0xbb; P0=0xee; } else//过渡状态:南北黄灯,东西红灯,保持5秒 { display(60-s);//5秒倒数计时 P1=0xdd; P0=0xee; } } } voidtime()interrupt1//T0中断,用于1s定时 { TH0=(65536-10000)/256;//给定时器T0高8位赋初值 TL0=(65536-10000)%256;//给定时器T0低8位赋初值 ++n;//每次中断计数变量加一 if(n==100)//1s定时时间到 { n=0;//计数变量清零,准备下次重新计数 ++s;//秒+1 if(s==60)//60秒到,一个交通灯状态循环完毕 s=0;//秒清零,准备下次计数 } } 二、Proteus仿真结果 1.东西绿灯,南北红灯 2.东西黄灯,南北红灯 3.南北绿灯,东西红灯 4.南北黄灯,东西红灯