找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 13612|回复: 22
打印 上一主题 下一主题
收起左侧

求AT89C51单片机交通灯仿真+程序

  [复制链接]
跳转到指定楼层
楼主
ID:152517 发表于 2016-12-7 15:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
150黑币
本帖最后由 paomocha 于 2016-12-7 16:21 编辑

求两份交通灯设计 全套内容,重金奖励,急!!!在线等!(两份可以相似,但不能完全一样)
设计基本要求:
1)车辆通行繁忙的十字交叉路口,设计一交通灯控制器,设东西方向通行时间为30秒,当剩余3秒时黄灯亮,南北方向通行时间为20秒,当剩余3秒时黄灯亮。
2)东西、南北方向各用三个(绿、黄、红)LED表示,并用数码管显示东西、南北方向的剩余时间。
3)需要南北方向设置一个人行道专用交通灯和按钮,当该按钮被按下的时候,3秒内东西方向变黄灯,再过3秒后东西方向变红灯,此时南北方向行人路灯变绿。

只能用以下元器件:
AT89C51型号单片机
其他随意
要用到数码管
程序可以简单一点,不要太难。注释的详细一点(完全不会的学渣。。。)


用proteus仿真好,连同单片机的程序在一个文件夹里
打包压缩发我邮箱543844668@qq.com
满意的再加100-300!!黑币!
发的时候附上ID
急求,谢谢了!

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:111634 发表于 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, 下载次数: 585)


以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil CProteus》清华大学出版社ISBN 978-7-302-41682-1,内有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行。书中电路和程序设计有详细说明,程序语句条条有注解。














回复

使用道具 举报

板凳
ID:111634 发表于 2016-12-7 20:20 | 只看该作者
本帖最后由 zl2168 于 2016-12-7 20:22 编辑

带限行时间显示的模拟交通灯
在上例基础上,绿灯加上限行时间显示,原换灯时间分别改为:绿灯9秒(最后2秒快闪),黄灯3秒,红灯12秒,反复循环。缩短亮灯时间,是为了仿真演示,便于观看,否则,你等得不耐烦了,实际应用时,可可修改延长。
电路设计   
程序设计   
Keil调试   
Proteus仿真   
Proteus仿真一下,确认有效。
实例30 带限行时间显示模拟交通灯.rar (40.64 KB, 下载次数: 376)
以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil CProteus》清华大学出版社ISBN 978-7-302-41682-1内有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行书中电路和程序设计有详细说明,程序语句条条有注解。


回复

使用道具 举报

地板
ID:153303 发表于 2016-12-8 22:33 | 只看该作者
淘宝卖家提供的程序实例

8、交通灯.rar

261.27 KB, 下载次数: 451

回复

使用道具 举报

5#
ID:153199 发表于 2016-12-16 17:30 | 只看该作者
本网站就有
回复

使用道具 举报

6#
ID:154557 发表于 2016-12-16 17:44 | 只看该作者
交通灯模拟控制要求:相反方向相同颜色的灯显示相同,垂直方向相同颜色的红绿灯显示相反。横向绿灯先亮4秒(为便于观察运行效果而缩短时间),再快闪1秒(亮暗各0.1秒,闪烁5次);然后黄灯亮2秒;横向绿灯黄灯亮闪期间,纵向红灯保持亮状态(共7秒);再然后纵向绿灯黄灯重复上述横向绿灯黄灯亮闪过程,纵向与横向交替不断。
回复

使用道具 举报

7#
ID:110866 发表于 2017-6-24 18:52 | 只看该作者
zl2168 发表于 2016-12-7 20:20
带限行时间显示的模拟交通灯
在上例基础上,绿灯加上限行时间显示,原换灯时间分别改为:绿灯9秒(最后2秒 ...

你这,没有C语言源代码啊
回复

使用道具 举报

8#
ID:351978 发表于 2018-6-20 14:53 | 只看该作者
AT89C51型号单片机
回复

使用道具 举报

9#
ID:351978 发表于 2018-6-20 15:37 | 只看该作者
zl2168 发表于 2016-12-7 20:01
给你相似参考案例,不要你黑币!
模拟交通灯
交通灯模拟控制要求:相反方向相同颜色的灯显示相同,垂直方 ...

有C语音程序吗
回复

使用道具 举报

10#
ID:355221 发表于 2018-6-20 15:44 | 只看该作者
这个简单,不过我没有现成的程序。
回复

使用道具 举报

11#
ID:111634 发表于 2018-6-21 07:24 | 只看该作者
lehigh 发表于 2017-6-24 18:52
你这,没有C语言源代码啊

仿真电路和Hex文件能在清华出版社网站免费下载,程序源代码只能到书上看了。到图书馆借,或到新华书店翻阅,或到网上书店打折购买。
回复

使用道具 举报

12#
ID:111634 发表于 2018-6-21 07:24 | 只看该作者

仿真电路和Hex文件能在清华出版社网站免费下载,程序源代码只能到书上看了。到图书馆借,或到新华书店翻阅,或到网上书店打折购买。
回复

使用道具 举报

13#
ID:425788 发表于 2018-11-18 19:31 | 只看该作者
zl2168 发表于 2016-12-7 20:01
给你相似参考案例,不要你黑币!
模拟交通灯
交通灯模拟控制要求:相反方向相同颜色的灯显示相同,垂直方 ...

有C语言吗,跪求,不做商业用途
回复

使用道具 举报

14#
ID:429138 发表于 2018-11-19 13:22 | 只看该作者
交通灯倒计时30秒程序 使用汇编编写

交通灯.docx

12.63 KB, 下载次数: 96

回复

使用道具 举报

15#
ID:429292 发表于 2018-11-19 16:59 | 只看该作者
还没解决吗,萌新瑟瑟发抖,希望上面的大佬能帮到你
回复

使用道具 举报

16#
ID:426184 发表于 2018-12-19 09:31 | 只看该作者
zl2168 发表于 2016-12-7 20:20
带限行时间显示的模拟交通灯
在上例基础上,绿灯加上限行时间显示,原换灯时间分别改为:绿灯9秒(最后2秒 ...

那个压缩包的能不能把程序提取出来
回复

使用道具 举报

17#
ID:570722 发表于 2019-6-24 13:26 | 只看该作者
zl2168 发表于 2016-12-7 20:01
给你相似参考案例,不要你黑币!
模拟交通灯
交通灯模拟控制要求:相反方向相同颜色的灯显示相同,垂直方 ...

有源代码吗?
回复

使用道具 举报

18#
ID:332444 发表于 2019-6-24 19:22 | 只看该作者
回复

使用道具 举报

19#
ID:720887 发表于 2020-4-2 13:12 | 只看该作者
zl2168 发表于 2016-12-7 20:01
给你相似参考案例,不要你黑币!
模拟交通灯
交通灯模拟控制要求:相反方向相同颜色的灯显示相同,垂直方 ...

代码是什么
回复

使用道具 举报

20#
ID:639106 发表于 2020-6-20 20:31 | 只看该作者
  1. #include <reg52.h>                 //调用单片机头文件
  2. #define uchar unsigned char   //宏定义"uchar"代替"unsigned char"。
  3. #define uint  unsigned int          //宏定义"uint"用来定义无符号整型数。


  4. //数码管段选定义 0     1    2    3           4           5        6         7          8           9       
  5. uchar code smg_du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
  6. //                                           A        B         C          D           E   F        不显示
  7.                                          0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};         //断码       

  8. uchar dis_smg[8] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8};       
  9. uchar smg_i = 4;    //显示数码管的个位数

  10. //数码管位选定义
  11. sbit smg_we1 = P2^0;            //数码管位选定义
  12. sbit smg_we2 = P2^1;
  13. sbit smg_we3 = P3^6;
  14. sbit smg_we4 = P3^7;


  15. char dx_s = 0;        //东西  南北 倒计时变量
  16. sbit dx_red    = P2^4;            //东西红灯
  17. sbit dx_green  = P2^3;                //东西绿灯
  18. sbit dx_yellow = P2^2;                //东西黄灯

  19. sbit nb_red    = P2^7;                //南北红灯
  20. sbit nb_green  = P2^6;                //南北绿灯
  21. sbit nb_yellow = P2^5;                //南北黄灯       

  22. uchar flag_jtd_mode;  //交通灯的模式 根据时间
  23. bit flag_1s = 0;
  24. bit flag_500ms;
  25. bit flag_dx_nb;                 //东西南北模式
  26. uchar flag_5m_value;
  27. uchar i;
  28. uchar flag_alarm;        //模式
  29. uchar dx_time = 30,nb_time = 20;   //东西、南北的时间
  30. uchar flag_jdgz ;     //交通管制


  31. /***********************数码位选函数*****************************/
  32. void smg_we_switch(uchar i)
  33. {
  34.         switch(i)
  35.         {
  36.                 case 0: smg_we1 = 0;  smg_we2 = 1; smg_we3 = 1;  smg_we4 = 1; break;
  37.                 case 1: smg_we1 = 1;  smg_we2 = 0; smg_we3 = 1;  smg_we4 = 1; break;
  38.                 case 2: smg_we1 = 1;  smg_we2 = 1; smg_we3 = 0;  smg_we4 = 1; break;
  39.                 case 3: smg_we1 = 1;  smg_we2 = 1; smg_we3 = 1;  smg_we4 = 0; break;
  40.         }       
  41. }


  42. /********************************************************************
  43. * 名称 : delay_1ms()
  44. * 功能 : 延时1ms函数
  45. * 输入 : q
  46. * 输出 : 无
  47. ***********************************************************************/
  48. void delay_1ms(uint q)
  49. {
  50.         uint i,j;
  51.         for(i=0;i<q;i++)
  52.                 for(j=0;j<110;j++);
  53. }


  54. /********************************************************************
  55. * 名称 : display()
  56. * 功能 : 数码管显示
  57. * 输入 : 无
  58. * 输出 : 无
  59. ***********************************************************************/
  60. void display()
  61. {
  62.         uchar i;
  63.         for(i=0;i<smg_i;i++)
  64.         {               
  65.                 P0 = 0xff;                  //消隐
  66.                 smg_we_switch(i);            //位选
  67.                 P0 = dis_smg[i];          //段选          
  68.                 delay_1ms(3);
  69.         }
  70. }

  71. /*********************定时器0、定时器1初始化******************/
  72. void time0_init()          
  73. {
  74.         EA  = 1;                   //开总中断
  75.         TMOD = 0X11;          //定时器0、定时器1工作方式1
  76.         ET0 = 1;                  //开定时器0中断
  77.         TR0 = 1;                  //允许定时器0定时
  78. //        ET1 = 1;                  //开定时器1中断
  79. //        TR1 = 1;                  //允许定时器1定时       
  80. }

  81. /*********************交通灯处理函数*********************************/
  82. void jiaotongdeng_dis()
  83. {
  84.         if(flag_1s == 1)
  85.         {
  86.                 flag_1s = 0;
  87.                 if(dx_s == 0)
  88.                 {
  89.                         if(flag_dx_nb == 1)
  90.                                 dx_s = nb_time;          //南北时间
  91.                         else
  92.                                 dx_s = dx_time;          //东西时间
  93.                         flag_dx_nb = ~flag_dx_nb;
  94.                 }
  95.                 dx_s --;
  96.         }
  97.         dis_smg[0] = smg_du[dx_s % 10] ;
  98.         dis_smg[1] = smg_du[dx_s / 10] ;
  99.         dis_smg[2] = smg_du[dx_s % 10] ;
  100.         dis_smg[3] = smg_du[dx_s / 10] ;

  101. /***********************南北时间*********************************/
  102.                 if(flag_dx_nb == 0)  
  103.                 {
  104.                         if(dx_s > 5)
  105.                         {
  106.                                 dx_red    = 1;  //灭
  107.                                 dx_green  =        0;        //亮
  108.                                 dx_yellow = 1;        //灭
  109.                                 nb_red    = 0;  //亮
  110.                                 nb_green  =        1;        //灭
  111.                                 nb_yellow = 1;        //灭
  112.                                 flag_5m_value = 0;       
  113.                         }else if(dx_s <= 5)                 //当小于5秒时  黄灯要闪了
  114.                         {
  115.                                 dx_red    = 1;    //灭
  116.                                 dx_green  =        1;          //灭
  117.                                 nb_red    = 0;    //亮
  118.                                 nb_green  =        1;          //灭
  119.                                 nb_yellow = 1;          //灭
  120.                                 if(flag_500ms == 0)
  121.                                 {
  122.                                         dx_yellow = 0;//亮       
  123.                                 }
  124.                                 else
  125.                                 {
  126.                                         dx_yellow = 1;//灭       
  127.                                 }
  128.                         }
  129.                 }
  130. /***********************东西时间*********************************/
  131.                 if(flag_dx_nb == 1)  
  132.                 {
  133.                         if(dx_s > 5)
  134.                         {
  135.                                 dx_red    = 0;     //亮
  136.                                 dx_green  =        1;           //灭
  137.                                 dx_yellow = 1;           //灭
  138.                                 nb_red    = 1;     //灭
  139.                                 nb_green  =        0;           //亮
  140.                                 nb_yellow = 1;           //灭
  141.                                 flag_5m_value = 0;       
  142.                         }else if(dx_s <= 5)                 //当小于5秒时  黄灯要闪了
  143.                         {
  144.                                 dx_red    = 0;     //灭
  145.                                 dx_green  =        1;           //灭
  146.                                 dx_yellow = 1;           //灭
  147.                                 nb_red    = 1;     //灭
  148.                                 nb_green  =        1;           //灭
  149.                                 if(flag_500ms == 0)           //黄灯闪烁
  150.                                 {
  151.                                         nb_yellow = 0;        //亮       
  152.                                 }
  153.                                 else
  154.                                 {
  155.                                         nb_yellow = 1;        //灭       
  156.                                 }
  157.                         }
  158.         }                       
  159. }

  160. /********************独立按键程序*****************/
  161. uchar key_can;         //按键值

  162. void key()         //独立按键程序
  163. {
  164.         static uchar key_new;
  165.         key_can = 20;                   //按键值还原
  166.         P1 |= 0x1f;
  167.         if((P1 & 0x1f) != 0x1f)                //按键按下
  168.         {
  169.                 delay_1ms(1);                     //按键消抖动
  170.                 if(((P1 & 0x1f) != 0x1f) && (key_new == 1))
  171.                 {                                                //确认是按键按下
  172.                         key_new = 0;
  173.                         switch(P1 & 0x1f)
  174.                         {
  175.                                 case 0x1e:  key_can = 1;  break;         //得到按键值
  176.                                 case 0x1d:  key_can = 2;  break;         //得到按键值
  177.                                 case 0x1b:  key_can = 3;  break;         //得到按键值
  178.                                 case 0x17:  key_can = 4;  break;         //得到按键值
  179.                         }
  180.                 }                       
  181.         }
  182.         else
  183.                 key_new = 1;       
  184. }

  185. uchar menu_1,flag_s;


  186. /********************设置函数*****************/
  187. void key_with()
  188. {
  189.         if(key_can == 4)   //交通管制按键
  190.         {
  191.                 flag_jdgz ++;
  192.                 if(flag_jdgz > 5)
  193.                         flag_jdgz = 0;       
  194.                 if(flag_jdgz == 1)         //  全部亮红灯
  195.                 {
  196.                         dx_red    = 0;  //亮
  197.                         dx_green  =        1;        //灭
  198.                         dx_yellow = 1;        //灭
  199.                         nb_red    = 0;  //亮
  200.                         nb_green  =        1;        //灭
  201.                         nb_yellow = 1;        //灭                       
  202.                 }
  203.                 if(flag_jdgz == 2)         //  东西红灯  南北绿灯
  204.                 {
  205.                         dx_red    = 0;  //亮
  206.                         dx_green  =        1;        //灭
  207.                         dx_yellow = 1;        //灭
  208.                         nb_red    = 1;  //灭
  209.                         nb_green  =        0;        //亮
  210.                         nb_yellow = 1;        //灭                       
  211.                 }
  212.                 if(flag_jdgz == 3)         //  南北红灯  东西绿灯
  213.                 {
  214.                         dx_red    = 1;  //灭
  215.                         dx_green  =        0;        //亮
  216.                         dx_yellow = 1;        //灭
  217.                         nb_red    = 0;  //亮
  218.                         nb_green  =        1;        //灭
  219.                         nb_yellow = 1;        //灭                       
  220.                 }
  221.                 if(flag_jdgz == 4)         //  南北绿灯  东西绿灯
  222.                 {
  223.                         dx_red    = 1;  //灭
  224.                         dx_green  =        0;        //亮
  225.                         dx_yellow = 1;        //灭
  226.                         nb_red    = 1;  //灭
  227.                         nb_green  =        0;        //亮
  228.                         nb_yellow = 1;        //灭                       
  229.                 }
  230.                 if(flag_jdgz == 5)         //  南北黄灯  东西黄灯
  231.                 {
  232.                         dx_red    = 1;  //灭
  233.                         dx_green  =        1;        //灭
  234.                         dx_yellow = 0;        //亮
  235.                         nb_red    = 1;  //灭
  236.                         nb_green  =        1;        //灭
  237.                         nb_yellow = 0;        //亮                       
  238.                 }
  239.         }
  240.         if(key_can == 1)          //设置键
  241.         {
  242.                 menu_1 ++;
  243.                 if(menu_1 >= 3)
  244.                 {
  245.                         menu_1  = 0;
  246.                 }
  247.         }

  248.         if(menu_1 == 1)           //设置东西的时间
  249.         {
  250.                 if(key_can == 2)
  251.                 {
  252.                         dx_time ++ ;                //加1
  253.                         if(dx_time > 99)
  254.                                 dx_time = 99;
  255.                 }
  256.                 if(key_can == 3)
  257.                 {
  258.                         dx_time -- ;                //减1
  259.                         if(dx_time <= 10)
  260.                                 dx_time = 10;
  261.                 }
  262.                 dis_smg[0] = smg_du[10] ;        //显示为A
  263.                 dis_smg[1] = smg_du[10] ;        //显示为A
  264.                 dis_smg[2] = smg_du[dx_time % 10] ;                //显示东西设置的时候
  265.                 dis_smg[3] = smg_du[dx_time / 10] ;       
  266.         }       
  267.         if(menu_1 == 2)           //设置南北的时间
  268.         {
  269.                 if(key_can == 2)
  270.                 {
  271.                         nb_time ++ ;                //加1
  272.                         if(nb_time > 99)
  273.                                 nb_time = 99;
  274.                 }
  275.                 if(key_can == 3)
  276.                 {
  277.                         nb_time -- ;                //减1
  278.                         if(nb_time <= 10)
  279.                                 nb_time = 10;
  280.                 }
  281.                 dis_smg[0] = smg_du[11] ;        //显示为B
  282.                 dis_smg[1] = smg_du[11] ;        //显示为B
  283.                 dis_smg[2] = smg_du[nb_time % 10] ;                //显示东西设置的时候
  284.                 dis_smg[3] = smg_du[nb_time / 10] ;       
  285.         }
  286. }


  287. /********************************************************************
  288. * 名称 : main()
  289. * 功能 : 实现灯的闪烁
  290. * 输入 : 无
  291. * 输出 : 无
  292. ***********************************************************************/
  293. void main()
  294. {
  295.         time0_init();
  296.         dx_s = nb_time;          //东西时间
  297.         while(1)
  298.         {
  299.                 key();
  300.                 if(key_can < 20)
  301.                         key_with();
  302. //                menu_dis();
  303.                 if((menu_1 == 0) && (flag_jdgz == 0))
  304.                         jiaotongdeng_dis();
  305.                 display();       
  306.         }
  307. }  

  308. /*********************定时器0中断服务程序************************/
  309. void time0_int() interrupt 1  
  310. {                                                  
  311.         static uchar value;                         //定时10ms中断一次
  312.         TH0 = 0x3c;
  313.         TL0 = 0xb0;     //50ms
  314.         value ++;
  315.         flag_5m_value++;
  316.         if(flag_5m_value % 10 == 0)
  317.                 flag_500ms = ~flag_500ms;
  318.         if(value >= 20)
  319.         {
  320.                 value = 0;
  321.                 flag_1s = 1;
  322.         }
  323. }
复制代码
回复

使用道具 举报

21#
ID:750684 发表于 2020-9-7 08:30 | 只看该作者
网上不是很多这种资料吗
回复

使用道具 举报

22#
ID:816586 发表于 2020-9-7 08:39 | 只看该作者
我们这个论坛就有很多
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表