想找人做网站和app,wordpress用图床好还是,西安至成网站建设公司,网页建设方案51单片机交通灯 1 讲解视频#xff1a;2 功能要求3 仿真图#xff1a;4 原理图PCB5 实物图6 程序设计#xff1a;7 设计报告8 资料清单#xff08;提供资料清单所有文件#xff09;#xff1a;设计资料下载链接#xff1a; 51单片机简易交通灯_可调时间_夜间紧急 仿真代… 51单片机交通灯 1 讲解视频2 功能要求3 仿真图4 原理图PCB5 实物图6 程序设计7 设计报告8 资料清单提供资料清单所有文件设计资料下载链接 51单片机简易交通灯_可调时间_夜间紧急 仿真代码原理图PCB报告讲解
仿真图proteus 7.8以上
程序编译器keil 4/keil 5
编程语言C语言
设计编号J030
1 讲解视频
包含仿真讲解和实物演示 基于51单片机的交通灯proteus实物设计 2 功能要求
基于51单片机的交通灯设计
本设计基于AT89C51/52与AT89S51/52、STC89C51/52通用可替换其他51内核单片机
1.正常模式工作状态
状态1东西方向绿灯通行20秒南北方向禁止通行25秒
状态2东西方向黄灯闪烁提醒5秒南北继续红灯倒计时
状态3南北方向绿灯通行30秒东西红灯禁止通行35秒分别通过数码管倒计时
状态4南北方向黄灯闪烁提醒5秒东西继续红灯倒计时
状态5执行状态1反复循环。
\2. 紧急模式
南北方向和东西方向红灯常亮禁止通行。数码管显示00。
\3. 夜间模式
南北方向和东西方向黄灯闪烁。
\4. 可以通过按键调东西/南北方向绿灯时间。切换键切换方向加减键调整时间。
3 仿真图
正常倒计时 4 原理图PCB 5 实物图 6 程序设计 代码
#include reg51.h //头文件
#define uchar unsigned char
#define uint unsigned int //宏定义uchar data buf[4]; //秒显示的变量
uchar data sec_dx20; //东西数默认
uchar data sec_nb30; //南北默认值
uchar data set_timedx20; //设置东西方向的时间
uchar data set_timenb30; //设置南北方向的时间
int n;
uchar data countt0,countt1;//定时器0中断次数
//定义6组开关
sbit k4P3^7; //切换方向
sbit k1P3^5; //时间加
sbit k2P3^6; //时间减
sbit k3P3^4; //确认
sbit k5P3^1; //禁止
sbit k6P1^5; //夜间模式
部分代码不完整完全代码在压缩包main函数
//https://docs.qq.com/doc/DS3Zab1lNU0d2QVZtsbit Red_nbP2^6; //南北红灯标志
sbit Yellow_nbP2^5; //南北黄灯标志
sbit Green_nbP2^4; //南北绿灯标志sbit Red_dxP2^3; //东西红灯标志
sbit Yellow_dxP2^2; //东西黄灯标志
sbit Green_dxP2^1; //东西绿灯标志bit set0; //调时方向切换键标志 1时南北0时东西
bit dx_nb0; //东西南北控制位
bit shansuo0; //闪烁标志位
bit yejian0; //夜间黄灯闪烁标志位uchar code table[11]{ //共阴极字型码0x3f, //--00x06, //--10x5b, //--20x4f, //--30x66, //--40x6d, //--50x7d, //--60x07, //--70x7f, //--80x6f, //--90x00 //--NULL
};//函数的声明部分
void delay(int ms); //延时子程序
void key(); //按键扫描子程序
void display(); //显示子程序
void logo(); //开机LOGO
//主程序
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; //关定时器 shansuo0; //闪烁标志位关P20x00; //灭显示TR10; //启动定时1if(set0){//设置键按下set_timedx; //南北加1S}else{set_timenb; //东西加1S}if(set){Red_nb1; //南北红灯标志Yellow_nb1; //南北黄灯标志Green_nb1; //南北绿灯标志}else{Red_dx1; //东西红灯标志Yellow_dx1; //东西黄灯标志Green_dx1; //东西绿灯标志}if(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 shansuo0; //闪烁标志位关P20x00; //灭显示TR10; //关定时器1 if(set0){//设置键按下set_timedx--; //南北减1S}else{set_timenb--; //东西减1S}if(set){Red_nb1; //南北红灯标志Yellow_nb1; //南北黄灯标志Green_nb1; //南北绿灯标志}else{Red_dx1; //东西红灯标志Yellow_dx1; //东西黄灯标志Green_dx1; //东西绿灯标志}if(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) //如果确定按下{ P20X00; //灭显示TR00; //关定时器0 set!set; //取反set标志位以切换调节方向TR10; //关定时器1dx_nbset;if(set){Red_nb1; //南北红灯标志Yellow_nb1; //南北黄灯标志Green_nb1; //南北绿灯标志}else{Red_dx1; //东西红灯标志Yellow_dx1; //东西黄灯标志Green_dx1; //东西绿灯标志}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); //等待按键释放 }}
}
void display(void) //显示子程序
{ buf[1]sec_nb/10; //第1位 东西秒十位buf[2]sec_nb%10; //第2位 东西秒个位buf[3]sec_dx/10; //第3位 南北秒十位buf[0]sec_dx%10; //第4位 南北秒个位 P10xff; // 初始灯为灭的P00x00; 灭显示P10xfe; //片选LED1P0table[buf[1]]; //送东西时间十位的数码管编码 delay(1); //延时P10xff; //关显示P00x00; //灭显示P10xfd; //片选LED2P0table[buf[2]]; //送东西时间个位的数码管编码delay(1); //延时P10xff; //关显示P00x00; //关显示P10Xfb; //片选LED3P0table[buf[3]]; //送南北时间十位的数码管编码delay(1); //延时P10xff; //关显示P00x00; //关显示P10Xf7; //片选LED4 P0table[buf[0]]; //送南北时间个位的数码管编码delay(1); //延时
}void time0(void) interrupt 1 using 1 //定时中断子程序
{TH00X3C; //重赋初值TL00XB0; //12m晶振50ms//重赋初值TR01; //重新启动定时器countt0; //软件计数加1if(countt010) //加到10也就是半秒{if((sec_nb5)(dx_nb0)(shansuo1)) //东西黄灯闪 {Green_dx0;Yellow_dx0;} if((sec_dx5)(dx_nb1)(shansuo1)) //南北黄灯闪 { Green_nb0;Yellow_nb0;} }if(countt020) // 定时器中断次数20时即1秒时{ countt00; //清零计数器sec_dx--; //东西时间减1sec_nb--; //南北时间减1if((sec_nb5)(dx_nb0)(shansuo1)) //东西黄灯闪 {Green_dx0;Yellow_dx1;} if((sec_dx5)(dx_nb1)(shansuo1)) //南北黄灯闪 { Green_nb0;Yellow_nb1;} if(sec_dx0sec_nb5) //当东西倒计时到0时重置5秒用于黄灯闪烁时间 {sec_dx5;shansuo1;}if(sec_nb0sec_dx5) //当南北倒计时到0时重置5秒用于黄灯闪烁时间 {sec_nb5;shansuo1;}if(dx_nb0sec_nb0) //当黄灯闪烁时间倒计时到0时{P20x00; //重置东西南背方向的红绿灯Green_nb1;Red_dx1;dx_nb!dx_nb;shansuo0;sec_nbset_timenb; //重赋南北方向的起始值sec_dxset_timenb5; //重赋东西方向的起始值} if(dx_nb1sec_dx0) //当黄灯闪烁时间到{P20X00; //重置东西南北的红绿灯状态Green_dx1; //东西绿灯亮Red_nb1; //南北红灯亮dx_nb!dx_nb; //取反shansuo0; //闪烁sec_dxset_timedx; //重赋东西方向的起始值sec_nbset_timedx5; //重赋南北方向的起始值}}
}系统硬件框图 7 设计报告
13017字设计报告内容包括硬件设计、软件设计、软硬件框图、调试、结论等 8 资料清单提供资料清单所有文件
0、常见使用问题及解决方法–必读 10、讲解视频 1、仿真图 2、程序源码 3、功能要求 4、原理图和PCB 5、开题报告 6、元器件清单 7、设计报告 8、软硬件流程框图 9、实物图片和说明 Altium Designer 安装破解 KEILproteus 单片机仿真设计教程 KEIL安装破解 Proteus元器件查找 Proteus安装 Proteus简易使用教程 单片机学习资料 相关数据手册 答辩技巧 设计报告常用描述 鼠标双击打开查找嘉盛单片机51 STM32单片机课程毕业设计.url 设计资料下载链接