要求:
1、红灯和绿灯相互转换时经过黄灯,黄灯闪烁三次(6秒);
2、主干道方向通行30秒,辅干道方向通行20秒,单独左转信号15秒;先直行信号,后左转信号。
3、设手动、自动、特殊情况三种方式。
4、特殊情况时所有路口红灯都亮,给120、110等通行。
5、自动时显示各种状态倒计时。
一、Protues仿真图:
二、程序源码:
因为注释非常的全,这里就不再进行讲解了。
/*******************************************************************************
================================================================================
【平 台】STC89C51_sumjess平台
【编 写】sumjess
【E-mail 】1371129880@qq.com
【软件版本】V2.0
【最后更新】2019年06月10日
【相关信息参考下列地址】
【网 站】
https://blog.csdn.net/qq_38351824
http://www.51hei.com/bbs/mcu-2-1.html
---------------------------------------------------------------------------------
【dev.env.】MDK4.02及以上版本
【Target 】STC89C51
第一次修订:2019/05/09
第二次修订:2019/05/21
第三次修订:2019/06/10
【problem 】
(1)库内补充的不全面;
(2)库内解释部分不全面;
(3)库内还存在一定的bug;
【direction】
下一步的目标就是把库继续集成!
【explain 】
为了方便使用,我也自己写了很多的库,和优化了算法和表示方式!
【warning】
目前程序中暂无错误 !
---------------------------------------------------------------------------------
没有完美的代码,只有不断的奉献,大家一起努力;
赠人玫瑰手留余香,欢迎大家反馈bug!
================================================================================
********************************************************************************/
#include #include #define uchar unsigned char #define uint unsigned int uchar h; uint r=0; uint s; uchar flag=1; uchar code dis[]={0Xc0,0Xf9,0Xa4,0Xb0,0X99,0X92,0X82,0Xf8,0X80,0X90,0Xff,}; // 0 1 2 3 4 5 6 7 8 9 - sbit key = P3^5; void delay(uint c) //延时程序 { uint i,j; for(i=0;i } void t0(void) interrupt 0 using 1 { delay(2); if(INT0==0) { r++; if(r==2) { r=0; } r%=2; if(r==0) { P0=0xeb; P1=0x00; P2=0xff; }while(1) { if(INT0==0|INT1==0|T0==0) { delay(2); if(INT0==0|INT1==0|T0==0) break; } if(key==0) {flag=0;break;} } } } void t1(void) interrupt 2 using 1 { delay(2); if(INT1==0) { r++; if(r==2) { r=0; } r%=2; if(r==0) { P0=0xdd; P1=0x00; P2=0xff; }while(1) { if(INT1==0|INT0==0|T0==0) { delay(2); if(INT1==0|INT0==0|T0==0) break; } if(key==0) {flag=0;break;} } } } void t2(void) interrupt 1 using 1 { TH0=0xff; TL0=0xff; delay(2); if(T0==0) { P0=0xdb; P1=0x00; P2=0xff; } while(1) { if(INT0==0|INT1==0) { delay(2); if(INT0==0|INT1==0) break; } if(key==0) {flag=0;break;} } } void main(void) { TMOD=0x06; TH0=0xff; TL0=0xff; TR0=1; EA=1; EX0=1; EX1=1; ET0=1; while(1) { flag=1; if(flag==1){ P0=0xeb; for(h=28;h>0;h--) { for(s=248;s>0;s--) { if(flag==0) break; P1=0x00; P2=0xff; P1=0x01; P2=dis[h/10]; delay(1); P1=0x00; P2=0xff; P1=0x02; P2=dis[h%10]; delay(1); P1=0x00; P2=0xff; P1=0x04; P2=dis[(h+2)/10]; delay(1); P1=0x00; P2=0xff; P1=0x08; P2=dis[(h+2)%10]; delay(1); } } if(flag==0) break; delay(248); P0=0xf3; for(h=3;h>0;h--) { if(flag==0) break; delay(392); P0=0xf3; delay(1); P1=0x00; P2=0xff; P1=0xaa; P2=dis[(h-1)%10]; delay(600); P0=0xfb; } if(flag==0) break; delay(248); P0=0xdd; for(h=38;h>0;h--) { if(flag==0) break; for(s=248;s>0;s--) { if(flag==0) break; P1=0x00; P2=0xff; P1=0x01; P2=dis[(h+2)/10]; delay(1); P1=0x00; P2=0xff; P1=0x02; P2=dis[(h+2)%10]; delay(1); P1=0x00; P2=0xff; P1=0x04; P2=dis[h/10]; delay(1); P1=0x00; P2=0xff; P1=0x08; P2=dis[h%10]; delay(1); } } if(flag==0) break; delay(248); P0=0xde; for(h=3;h>0;h--) { if(flag==0) break; delay(392); P0=0xde; delay(1); P1=0x00; P2=0xff; P1=0xaa; P2=dis[(h-1)%10]; delay(600); P0=0xdf; } if(flag==0) break; delay(248); } } }
上一篇:课程设计题八:篮球比赛计分器
下一篇:课程设计题五:汽车尾灯控制器设计
推荐阅读最新更新时间:2024-11-01 14:52
设计资源 培训 开发板 精华推荐
- AD9706-DPG2-EBZ,使用 AD9706 单通道、12 位、175 MSPS 数模转换器的评估板
- ZR431 可调精密齐纳并联稳压器的典型应用
- 具有板载 ADC 和 I2C 的 LTC2945HUD 功率监视器的典型应用
- 基于Hi3861和PCA9685的小狗
- 使用 Microchip Technology 的 MIC2774N-XXBM5 的参考设计
- LTC2946CDE 电源、电荷和能量监视器在 -48V 恶劣环境中的典型应用,使用 INTVCC 并联稳压器来耐受 200V 瞬态
- NanoClon 0.01:用于组装 mClon 型机器人
- LT8330IDDB 3V 至 6V 输入、48V 升压转换器的典型应用电路
- 用于 MCU 系统负载感应的 NCP300HSN30T1 3V 电压检测器的典型应用
- 【训练营】基于ESP32的物联网时钟