做众筹网站怎么赚钱,网站系统制作,百度网页入口,vs做网站登录界面一.硬件方案
本设计能模拟基本的交通控制系统#xff0c;用红绿黄灯表示禁行#xff0c;通行和等待的信号发生#xff0c;还能进行倒计时显示。按键可以控制禁行、深夜模式、复位、东西通行、南北通行、时间加、时间减、切换等功能。共四个二位阴极数码管#xff0c;东南西…一.硬件方案
本设计能模拟基本的交通控制系统用红绿黄灯表示禁行通行和等待的信号发生还能进行倒计时显示。按键可以控制禁行、深夜模式、复位、东西通行、南北通行、时间加、时间减、切换等功能。共四个二位阴极数码管东南西北各一个显示时间四个数码管的阴极都接到STC89C51的P1口阳极接到74HC245芯片上通过P0口控制74HC245芯片起到驱动放大作用。 主要电路51单片机最小系统数码管显示模块LED指示灯模块按键模块
二.设计功能
1本设计采用四方向数码管显示时间的设计更加符合真实的交通信号灯设计 27个按键复位、夜间模式、紧急模式、设定时间、时间加、时间减、调试确定键 3夜间模式按下“夜间模式”按键后四个方向的黄灯闪烁 4紧急模式当救护车、救火车等通过时按下“紧急模式”按键四个方向的红灯全部亮起 5东西方向和南北方向的通行时间可以分开设置。就是模拟实际交通中的主干道和支干道。
三.设计原理图
1原理图主要采用AD软件进行设计,如图 2Protues仿真图如下
四.软件设计
主程序源码:
//主程序
void main()
{TMOD0X11; //定时器设置TH10X3C; TL10XB0;TH00X3C; //定时器0置初值 0.05STL00XB0;EA1; //开总中断ET01; //定时器0中断开启ET11; //定时器1中断开启TR01; //启动定时0TR10; //关闭定时1logo(); //开机初始化P20Xc3; // 开始默认状态东西绿灯南北黄灯 sec_nbsec_dx5; //默认南北通行时间比东西多5秒while(1) //主循环{ key(); //调用按键扫描程序display(); //调用显示程序}
}
//函数的定义部分
void key(void) //按键扫描子程序
{ if(k1!1) //当K1(时间加)按下时{display(); //调用显示用于延时消抖if(k1!1) //如果确定按下{TR00; //关定时器 shanruo0; //闪烁标志位关P20x00; //灭显示TR10; //启动定时1if(set0) //设置键按下set_timedx; //南北加1Selseset_timenb; //东西加1Sif(set_timenb100)set_timenb1;if( set_timedx100)set_timedx1; //加到100置1sec_nbset_timenb ; //设置的数值赋给东西南北sec_dxset_timedx; do{ display(); //调用显示用于延时}while(k1!1); //等待按键释放}}if(k2!1) //当K2(时间减)按键按下时{ display(); //调用显示用于延时消抖 if(k2!1) //如果确定按下{ TR00; //关定时器0 shanruo0; //闪烁标志位关P20x00; //灭显示TR10; //关定时器1 if(set0)set_timedx--; //南北减1Selseset_timenb--; //东西减1Sif(set_timenb0)set_timenb99; if( set_timedx0 )set_timedx99; //减到1重置99sec_nbset_timenb ; //设置的数值赋给东西南北sec_dxset_timedx;do { display(); //调用显示用于延时}while(k2!1); //等待按键释放}}if(k3!1) //当K3确认键按下时{ display(); //调用显示用于延时消抖if(k3!1) //如果确定按下{TR01; //启动定时器0sec_nbset_timenb; //从中断回复仍显示设置过的数值sec_dxset_timedx; //显示设置过的时间TR10; //关定时器1 if(set0) //时间倒时到0时{ P20X00; //灭显示Green_dx1; //东西绿灯亮Red_nb1; //南北红灯亮sec_nbsec_dx5; //回到初值}else { P20x00; //南北绿灯东西红灯Green_nb1;Red_dx1;sec_dxsec_nb5; }}}if(k4!1) //当K4切换键按下{display(); //调用显示用于延时消抖if(k4!1) //如果确定按下{ TR00; //关定时器0 set!set; //取反set标志位以切换调节方向TR10; //关定时器1dx_nbset;do{display(); //调用显示用于延时} while(k4!1); //等待按键释放}} if(k5!1) //当K5禁止键按下时{display(); //调用显示用于延时消抖if(k5!1) //如果确定按下{ TR00; //关定时器P20x00; //灭显示Red_dx1;Red_nb1; //全部置红灯TR10;sec_dx00; //四个方向的时间都为00sec_nb00;do{display(); //调用显示用于延时} while(k5!1); //等待按键释放 }}if(k6!1) //当K6夜间模式按下 {display(); //调用显示用于延时消抖 if(k6!1) //如果确定按下{ TR00; //关定时器P20x00;TR11;sec_dx00; //四个方向的时间都为00sec_nb00;do{display(); //调用显示用于延时} while(k6!1); //等待按键释放 }}
}资料链接https://pan.baidu.com/s/1RTF58-hWut5EEv6ZgvnFiw?pwdgkv0