|
通过单片机模拟交通灯,东西方向黄绿红,南北方向黄绿红的工作方式。
时间:
东西方向绿灯26秒,
黄灯时间2秒。
南北方向绿灯时间3秒,
黄灯时间3秒
扩展功能:
1、显示时间倒计时。数码管显示倒计时
2、通过按键控制东西方向强制绿灯,或南北方向强制绿灯(应对紧急情况)按键东西绿同时南北红?
3、夜晚能够进行所有黄灯闪烁。闪烁按键
4、能够统计车辆通过数量,并将数据进行汇总并发送至上位机。中断开关加一
楼主目前只实现了基本功能,通过控制P1口电平状态来切换红绿灯,在实现扩展功能3时写了一个按键但无效,求老哥们指点,当然也不止局限于扩展3,其他几个有好的想法也请不吝赐教
工程代码附件以上传
某度链接(永久):https://pan.baidu.com/s/1gksnEy1bnYcpb2vm4uaO0Q
提取码:8ged
仿真图:
- //乞丐版
- /*交通灯*/
- #include<reg51.h>
- //延时n毫秒
- void delay_ms(unsigned int n)
- {
- unsigned int i=0,j=0;
- for(i=0;i<n;i++)
- for(j=0;j<123;j++);
- }
- void main()//主函数
- {
- while(1)//死循环
- { //轮流送值给P1口
- P1=0xc9;//
- delay_ms(26000);//绿26s
- P1=0xa9;//
- delay_ms(2000);//黄2s
- P1=0x9c;//
- delay_ms(3000);//绿3s
- P1=0x9a;//
- delay_ms(3000);//黄3s
-
- }
- }
复制代码 加扩展功能黄灯闪烁(无效)
- /*交通灯*/
- #include <reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit key1 = P2^2;
- uchar code table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳极数目管0~9段选码
- uchar code S[4]={0xc9,0xa9,0x9c,0x9a};//交通信号灯控制代码(一个控制码一种状态)
- //延时n毫秒
- void delay_ms(unsigned int n)
- {
- unsigned int i=0,j=0;
- for(i=0;i<n;i++)
- for(j=0;j<123;j++);
- }
- void main()//主函数
- {
- while(1)//死循环
- {
-
- //轮流送值给P1口
- P1=S[0];//
- delay_ms(6000);//绿26s
- P1=S[1];//
- delay_ms(2000);//黄2s
- P1=S[2];//
- delay_ms(3000);//绿3s
- P1=S[3];//
- delay_ms(3000);//黄3s
- if(key1==0)//夜间模式黄灯闪烁
- {delay_ms(10);
- if(key1==0)
- { P1=0xAA;//只有黄灯亮
- delay_ms(500);
- P1=0x88;//黄灯灭
- delay_ms(500);
- }
- }
- }
- }
复制代码
|
-
仿真图
-
-
交通灯.zip
68.33 KB, 下载次数: 25
代码+仿真
评分
-
查看全部评分
|