历史上的今天
今天是:2024年09月29日(星期日)
2019年09月29日 | 课程设计题七:交通灯控制器
2019-09-29 来源:eefocus
要求:
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); } } }
上一篇:课程设计题八:篮球比赛计分器
下一篇:课程设计题五:汽车尾灯控制器设计
史海拾趣
|
工程师赚钱之路!!经常是老板赚大钱自己却只拿工资,有没有其他的方法欢迎讨论~ 作为硬件工程师,最郁闷的事情不外于此,辛辛苦苦设计成的硬件电路板,却没有版权,活活看着自己给公司剥削也无可奈何,即使设计的产品销量再好,跟你也是毫无关系,最后还可能被公司一脚踢开。为了解决这个问题,我们经过多年的研究与实践,终于想 ...… 查看全部问答> |
|
要暂时中断winCE的学习,转去看windows下USB驱动的开发,郁闷中…… 公司一个项目要做windows下USB驱动的开发,老大叫我跟着一起看看相关的知识,并跟我说了一大通做USB设备驱动的前景。USB驱动比较复杂,要花时间去学习的,那我就要暂时中断winCE的学习了。但心里还是想朝winCE这个方向发展,况且也学了一些日子了, ...… 查看全部问答> |
|
程序崩溃后,CEDB没有Unmount,导致下次mount失败 程序崩溃后CeUnmountDBVol没有调用,下次执行程序时CeMountDBVol(OPEN_ALLWAYS)失败,请问怎么解决… 查看全部问答> |
|
用vc生成一个dll文件(Phone.dll),并把它拷贝到pda的根目录下(该目录下有一个用EVC生成的导入dll的EXE文件),希望在pda中导入dll,相关代码如下: HINSTANCE ghPhoneDLL=NULL; ...… 查看全部问答> |
|
用modelsim进行仿真,为了便于观察,我希望仿真结果按一定的顺序显示。可是每次手动调整完信号顺序后,再重新仿真,顺序又乱了,有没有办法将这些信号的顺序固定下来,每仿真一次都按这个顺序显示结果?… 查看全部问答> |
|
在STM32F10X参考手册上的第21(实际36)页,有一个时钟树。上面"APB1 Prescaler /1,2,4,8,16"下面"TIM2,3,4 *1,2 Multiplier"是不是可倍频的意思呀?我没有找到这一项的设置呢?哪一个寄存器位是设置这一项?菜鸟 ...… 查看全部问答> |
|
LED 亮度控制要求有一个能够提供恒定、稳压电流的驱动器。要想达到这一目标,驱动器拓扑必须能够产生足够大的输出电压来正向偏置 LED。因此,如果输入和输出电压范围重叠时,我们又该做何选择呢? 德州仪器 (TI) 应用工程师John Betten, ...… 查看全部问答> |




