标题: 求AT89C51单片机交通灯仿真+程序 [打印本页]
作者: paomocha 时间: 2016-12-7 15:49
标题: 求AT89C51单片机交通灯仿真+程序
本帖最后由 paomocha 于 2016-12-7 16:21 编辑
求两份交通灯设计 全套内容,重金奖励,急!!!在线等!(两份可以相似,但不能完全一样)
设计基本要求:
(1)车辆通行繁忙的十字交叉路口,设计一交通灯控制器,设东西方向通行时间为30秒,当剩余3秒时黄灯亮,南北方向通行时间为20秒,当剩余3秒时黄灯亮。
(2)东西、南北方向各用三个(绿、黄、红)LED表示,并用数码管显示东西、南北方向的剩余时间。
(3)需要南北方向设置一个人行道专用交通灯和按钮,当该按钮被按下的时候,3秒内东西方向变黄灯,再过3秒后东西方向变红灯,此时南北方向行人路灯变绿。
只能用以下元器件:
AT89C51型号单片机
其他随意
要用到数码管
程序可以简单一点,不要太难。注释的详细一点(完全不会的学渣。。。)
用proteus仿真好,连同单片机的程序在一个文件夹里
打包压缩发我邮箱543844668
@qq.com
满意的再加100-300!!黑币!
发的时候附上ID
急求,谢谢了!
作者: zl2168 时间: 2016-12-7 20:01
本帖最后由 zl2168 于 2016-12-7 20:19 编辑
给你相似参考案例,不要你黑币!
模拟交通灯
交通灯模拟控制要求:相反方向相同颜色的灯显示相同,垂直方向相同颜色的红绿灯显示相反。横向绿灯先亮4秒(为便于观察运行效果而缩短时间),再快闪1秒(亮暗各0.1秒,闪烁5次);然后黄灯亮2秒;横向绿灯黄灯亮闪期间,纵向红灯保持亮状态(共7秒);再然后纵向绿灯黄灯重复上述横向绿灯黄灯亮闪过程,纵向与横向交替不断。
缩短亮灯时间,是为了仿真演示,便于观看,否则,你等得不耐烦了,实际应用时,可可修改延长。
⒈ 电路设计 …
⒉ 程序设计 …
⒊ Keil调试 …
⒋Proteus仿真 …
先Proteus仿真一下,确认有效。
实例29 模拟交通灯.rar
(35.12 KB, 下载次数: 590)
以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil C和Proteus》清华大学出版社ISBN 978-7-302-41682-1,内有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行。书中电路和程序设计有详细说明,程序语句条条有注解。
作者: zl2168 时间: 2016-12-7 20:20
本帖最后由 zl2168 于 2016-12-7 20:22 编辑
带限行时间显示的模拟交通灯
在上例基础上,绿灯加上限行时间显示,原换灯时间分别改为:绿灯9秒(最后2秒快闪),黄灯3秒,红灯12秒,反复循环。缩短亮灯时间,是为了仿真演示,便于观看,否则,你等得不耐烦了,实际应用时,可可修改延长。
⒈ 电路设计 …
⒉ 程序设计 …
⒊ Keil调试 …
⒋Proteus仿真 …
先Proteus仿真一下,确认有效。
以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil C和Proteus》清华大学出版社ISBN 978-7-302-41682-1,内有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行。书中电路和程序设计有详细说明,程序语句条条有注解。
作者: smail 时间: 2016-12-8 22:33
淘宝卖家提供的程序实例
-
-
8、交通灯.rar
261.27 KB, 下载次数: 451
作者: liuzhaoxin1020 时间: 2016-12-16 17:30
本网站就有
作者: 叶知秋gff 时间: 2016-12-16 17:44
交通灯模拟控制要求:相反方向相同颜色的灯显示相同,垂直方向相同颜色的红绿灯显示相反。横向绿灯先亮4秒(为便于观察运行效果而缩短时间),再快闪1秒(亮暗各0.1秒,闪烁5次);然后黄灯亮2秒;横向绿灯黄灯亮闪期间,纵向红灯保持亮状态(共7秒);再然后纵向绿灯黄灯重复上述横向绿灯黄灯亮闪过程,纵向与横向交替不断。
作者: lehigh 时间: 2017-6-24 18:52
你这,没有C语言源代码啊
作者: 694073644 时间: 2018-6-20 14:53
AT89C51型号单片机
作者: 694073644 时间: 2018-6-20 15:37
有C语音程序吗
作者: wjn0103 时间: 2018-6-20 15:44
这个简单,不过我没有现成的程序。
作者: zl2168 时间: 2018-6-21 07:24
仿真电路和Hex文件能在清华出版社网站免费下载,程序源代码只能到书上看了。到图书馆借,或到新华书店翻阅,或到网上书店打折购买。
作者: zl2168 时间: 2018-6-21 07:24
仿真电路和Hex文件能在清华出版社网站免费下载,程序源代码只能到书上看了。到图书馆借,或到新华书店翻阅,或到网上书店打折购买。
作者: delaynomore 时间: 2018-11-18 19:31
有C语言吗,跪求,不做商业用途
作者: yeyuan 时间: 2018-11-19 13:22
交通灯倒计时30秒程序 使用汇编编写
-
-
交通灯.docx
12.63 KB, 下载次数: 96
作者: 萌新小鱼 时间: 2018-11-19 16:59
还没解决吗,萌新瑟瑟发抖,希望上面的大佬能帮到你
作者: EFDGHHJ 时间: 2018-12-19 09:31
那个压缩包的能不能把程序提取出来
作者: 宋孑怿 时间: 2019-6-24 13:26
有源代码吗?
作者: xianfajushi 时间: 2019-6-24 19:22
https://blog.csdn.net/xianfajushi/article/details/80553964
作者: junya 时间: 2020-4-2 13:12
代码是什么
作者: gqzjl 时间: 2020-6-20 20:31
- #include <reg52.h> //调用单片机头文件
- #define uchar unsigned char //宏定义"uchar"代替"unsigned char"。
- #define uint unsigned int //宏定义"uint"用来定义无符号整型数。
- //数码管段选定义 0 1 2 3 4 5 6 7 8 9
- uchar code smg_du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
- // A B C D E F 不显示
- 0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff}; //断码
- uchar dis_smg[8] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};
- uchar smg_i = 4; //显示数码管的个位数
- //数码管位选定义
- sbit smg_we1 = P2^0; //数码管位选定义
- sbit smg_we2 = P2^1;
- sbit smg_we3 = P3^6;
- sbit smg_we4 = P3^7;
- char dx_s = 0; //东西 南北 倒计时变量
- sbit dx_red = P2^4; //东西红灯
- sbit dx_green = P2^3; //东西绿灯
- sbit dx_yellow = P2^2; //东西黄灯
- sbit nb_red = P2^7; //南北红灯
- sbit nb_green = P2^6; //南北绿灯
- sbit nb_yellow = P2^5; //南北黄灯
- uchar flag_jtd_mode; //交通灯的模式 根据时间
- bit flag_1s = 0;
- bit flag_500ms;
- bit flag_dx_nb; //东西南北模式
- uchar flag_5m_value;
- uchar i;
- uchar flag_alarm; //模式
- uchar dx_time = 30,nb_time = 20; //东西、南北的时间
- uchar flag_jdgz ; //交通管制
- /***********************数码位选函数*****************************/
- void smg_we_switch(uchar i)
- {
- switch(i)
- {
- case 0: smg_we1 = 0; smg_we2 = 1; smg_we3 = 1; smg_we4 = 1; break;
- case 1: smg_we1 = 1; smg_we2 = 0; smg_we3 = 1; smg_we4 = 1; break;
- case 2: smg_we1 = 1; smg_we2 = 1; smg_we3 = 0; smg_we4 = 1; break;
- case 3: smg_we1 = 1; smg_we2 = 1; smg_we3 = 1; smg_we4 = 0; break;
- }
- }
- /********************************************************************
- * 名称 : delay_1ms()
- * 功能 : 延时1ms函数
- * 输入 : q
- * 输出 : 无
- ***********************************************************************/
- void delay_1ms(uint q)
- {
- uint i,j;
- for(i=0;i<q;i++)
- for(j=0;j<110;j++);
- }
- /********************************************************************
- * 名称 : display()
- * 功能 : 数码管显示
- * 输入 : 无
- * 输出 : 无
- ***********************************************************************/
- void display()
- {
- uchar i;
- for(i=0;i<smg_i;i++)
- {
- P0 = 0xff; //消隐
- smg_we_switch(i); //位选
- P0 = dis_smg[i]; //段选
- delay_1ms(3);
- }
- }
- /*********************定时器0、定时器1初始化******************/
- void time0_init()
- {
- EA = 1; //开总中断
- TMOD = 0X11; //定时器0、定时器1工作方式1
- ET0 = 1; //开定时器0中断
- TR0 = 1; //允许定时器0定时
- // ET1 = 1; //开定时器1中断
- // TR1 = 1; //允许定时器1定时
- }
- /*********************交通灯处理函数*********************************/
- void jiaotongdeng_dis()
- {
- if(flag_1s == 1)
- {
- flag_1s = 0;
- if(dx_s == 0)
- {
- if(flag_dx_nb == 1)
- dx_s = nb_time; //南北时间
- else
- dx_s = dx_time; //东西时间
- flag_dx_nb = ~flag_dx_nb;
- }
- dx_s --;
- }
- dis_smg[0] = smg_du[dx_s % 10] ;
- dis_smg[1] = smg_du[dx_s / 10] ;
- dis_smg[2] = smg_du[dx_s % 10] ;
- dis_smg[3] = smg_du[dx_s / 10] ;
- /***********************南北时间*********************************/
- if(flag_dx_nb == 0)
- {
- if(dx_s > 5)
- {
- dx_red = 1; //灭
- dx_green = 0; //亮
- dx_yellow = 1; //灭
- nb_red = 0; //亮
- nb_green = 1; //灭
- nb_yellow = 1; //灭
- flag_5m_value = 0;
- }else if(dx_s <= 5) //当小于5秒时 黄灯要闪了
- {
- dx_red = 1; //灭
- dx_green = 1; //灭
- nb_red = 0; //亮
- nb_green = 1; //灭
- nb_yellow = 1; //灭
- if(flag_500ms == 0)
- {
- dx_yellow = 0;//亮
- }
- else
- {
- dx_yellow = 1;//灭
- }
- }
- }
- /***********************东西时间*********************************/
- if(flag_dx_nb == 1)
- {
- if(dx_s > 5)
- {
- dx_red = 0; //亮
- dx_green = 1; //灭
- dx_yellow = 1; //灭
- nb_red = 1; //灭
- nb_green = 0; //亮
- nb_yellow = 1; //灭
- flag_5m_value = 0;
- }else if(dx_s <= 5) //当小于5秒时 黄灯要闪了
- {
- dx_red = 0; //灭
- dx_green = 1; //灭
- dx_yellow = 1; //灭
- nb_red = 1; //灭
- nb_green = 1; //灭
- if(flag_500ms == 0) //黄灯闪烁
- {
- nb_yellow = 0; //亮
- }
- else
- {
- nb_yellow = 1; //灭
- }
- }
- }
- }
- /********************独立按键程序*****************/
- uchar key_can; //按键值
- void key() //独立按键程序
- {
- static uchar key_new;
- key_can = 20; //按键值还原
- P1 |= 0x1f;
- if((P1 & 0x1f) != 0x1f) //按键按下
- {
- delay_1ms(1); //按键消抖动
- if(((P1 & 0x1f) != 0x1f) && (key_new == 1))
- { //确认是按键按下
- key_new = 0;
- switch(P1 & 0x1f)
- {
- case 0x1e: key_can = 1; break; //得到按键值
- case 0x1d: key_can = 2; break; //得到按键值
- case 0x1b: key_can = 3; break; //得到按键值
- case 0x17: key_can = 4; break; //得到按键值
- }
- }
- }
- else
- key_new = 1;
- }
- uchar menu_1,flag_s;
- /********************设置函数*****************/
- void key_with()
- {
- if(key_can == 4) //交通管制按键
- {
- flag_jdgz ++;
- if(flag_jdgz > 5)
- flag_jdgz = 0;
- if(flag_jdgz == 1) // 全部亮红灯
- {
- dx_red = 0; //亮
- dx_green = 1; //灭
- dx_yellow = 1; //灭
- nb_red = 0; //亮
- nb_green = 1; //灭
- nb_yellow = 1; //灭
- }
- if(flag_jdgz == 2) // 东西红灯 南北绿灯
- {
- dx_red = 0; //亮
- dx_green = 1; //灭
- dx_yellow = 1; //灭
- nb_red = 1; //灭
- nb_green = 0; //亮
- nb_yellow = 1; //灭
- }
- if(flag_jdgz == 3) // 南北红灯 东西绿灯
- {
- dx_red = 1; //灭
- dx_green = 0; //亮
- dx_yellow = 1; //灭
- nb_red = 0; //亮
- nb_green = 1; //灭
- nb_yellow = 1; //灭
- }
- if(flag_jdgz == 4) // 南北绿灯 东西绿灯
- {
- dx_red = 1; //灭
- dx_green = 0; //亮
- dx_yellow = 1; //灭
- nb_red = 1; //灭
- nb_green = 0; //亮
- nb_yellow = 1; //灭
- }
- if(flag_jdgz == 5) // 南北黄灯 东西黄灯
- {
- dx_red = 1; //灭
- dx_green = 1; //灭
- dx_yellow = 0; //亮
- nb_red = 1; //灭
- nb_green = 1; //灭
- nb_yellow = 0; //亮
- }
- }
- if(key_can == 1) //设置键
- {
- menu_1 ++;
- if(menu_1 >= 3)
- {
- menu_1 = 0;
- }
- }
- if(menu_1 == 1) //设置东西的时间
- {
- if(key_can == 2)
- {
- dx_time ++ ; //加1
- if(dx_time > 99)
- dx_time = 99;
- }
- if(key_can == 3)
- {
- dx_time -- ; //减1
- if(dx_time <= 10)
- dx_time = 10;
- }
- dis_smg[0] = smg_du[10] ; //显示为A
- dis_smg[1] = smg_du[10] ; //显示为A
- dis_smg[2] = smg_du[dx_time % 10] ; //显示东西设置的时候
- dis_smg[3] = smg_du[dx_time / 10] ;
- }
- if(menu_1 == 2) //设置南北的时间
- {
- if(key_can == 2)
- {
- nb_time ++ ; //加1
- if(nb_time > 99)
- nb_time = 99;
- }
- if(key_can == 3)
- {
- nb_time -- ; //减1
- if(nb_time <= 10)
- nb_time = 10;
- }
- dis_smg[0] = smg_du[11] ; //显示为B
- dis_smg[1] = smg_du[11] ; //显示为B
- dis_smg[2] = smg_du[nb_time % 10] ; //显示东西设置的时候
- dis_smg[3] = smg_du[nb_time / 10] ;
- }
- }
- /********************************************************************
- * 名称 : main()
- * 功能 : 实现灯的闪烁
- * 输入 : 无
- * 输出 : 无
- ***********************************************************************/
- void main()
- {
- time0_init();
- dx_s = nb_time; //东西时间
- while(1)
- {
- key();
- if(key_can < 20)
- key_with();
- // menu_dis();
- if((menu_1 == 0) && (flag_jdgz == 0))
- jiaotongdeng_dis();
- display();
- }
- }
- /*********************定时器0中断服务程序************************/
- void time0_int() interrupt 1
- {
- static uchar value; //定时10ms中断一次
- TH0 = 0x3c;
- TL0 = 0xb0; //50ms
- value ++;
- flag_5m_value++;
- if(flag_5m_value % 10 == 0)
- flag_500ms = ~flag_500ms;
- if(value >= 20)
- {
- value = 0;
- flag_1s = 1;
- }
- }
复制代码
作者: 跟爱的感觉走 时间: 2020-9-7 08:30
网上不是很多这种资料吗
作者: 图锐工程 时间: 2020-9-7 08:39
我们这个论坛就有很多
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |