找回密码
 立即注册

QQ登录

只需一步,快速开始

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

51单片机交通灯全套设计仿真代码 数码管显示有乱码 求帮助

  [复制链接]
跳转到指定楼层
楼主
交通灯的全套资料包内容:

1、用单片机stc89C52 设计一个交通灯系统,并用数码管显示时间,LED指示通行。
2、用protel 99se设计电路图,pcb图等
3、数码管用三极管驱动。
4、按键功能:黄灯常亮(深夜模式)、禁行、东西通行、南北通行、时间加、时间减、切换、确定。


仿真图:

1、单片机是通用的无论51还是52、无论stc还是at都一样,引脚功能都一样,原理图和程序也是一样的。
2、原理图中的. sch等格式是要用protel99se打开的,没有软件的不要紧,我已帮您转换成word格式和pdf格式的了。
3、程序中的.c文件可以用记事本打开,就是程序了。其他的是写程序是自动生成的,没什么用的。
4、可以按照正面布局,尽量不要按照实物的背面焊接,很容易看错,要按照原理图焊接,不要按照仿真图焊接,因为仿真只是模拟一个现象。

原理图 打开方式:
DXP格式用            Altium designer Summer 软件打开
protel99格式用       protel99SE 软件打开
PDF格式用            PDF 软件打开
Word格式用           Word 或用WPS 软件打开

4种格式的原理图都内容是一样的  只是打开方式不同

  请注意,原理图上有些接线的地方是用网络标号连接的,意思就是名字相同的两个点就是连接在一起的相当导线的作用,图上所有的VCC要接在一起,所有的GND要接在一起。

请看原理图焊接,不要看仿真图焊接。

wrod格式里面的原理图是复制出来的,有一点点变行变形,麻烦大家注意一下,尽量看其他三种格式的图焊接,

如果文档里面的原理图和原理图文件夹内的图不一样的话,请大家以原理图文件夹内的为准,原理图文件夹的图是和实物配套的,可以自己截图或复制,然后粘贴到文档里面去。
单片机源程序如下:
  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. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
全部资料51hei下载地址:
单片机交通灯 4个数码管 大.7z (8.26 MB, 下载次数: 619)

评分

参与人数 1黑币 +100 收起 理由
admin + 100 共享资料的黑币奖励!

查看全部评分

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

使用道具 举报

沙发
ID:279740 发表于 2018-1-26 19:19 来自手机 | 只看该作者
这资料不错哦
回复

使用道具 举报

板凳
ID:279740 发表于 2018-1-26 19:53 来自手机 | 只看该作者
我自己下载怎么还扣币啊~
回复

使用道具 举报

地板
ID:279740 发表于 2018-2-8 17:48 来自手机 | 只看该作者
lemon0210 发表于 2018-1-30 14:40
下载了根本没用,骗子,骗黑币

你遇到的是哪种情况,有需要我帮忙不?
回复

使用道具 举报

5#
ID:279740 发表于 2018-2-8 17:49 来自手机 | 只看该作者
lemon0210 发表于 2018-1-30 14:40
下载了根本没用,骗子,骗黑币

你下载后要用电脑解压文件包啊
回复

使用道具 举报

6#
ID:279740 发表于 2018-2-8 17:50 来自手机 | 只看该作者
宋老师的魔咒 发表于 2018-1-27 17:33
6通天塔

什么?    。。。。
回复

使用道具 举报

7#
ID:308289 发表于 2018-4-16 10:01 | 只看该作者
感谢up主,我下载了,很好用,有一点缺陷就是程序似乎和仿真不是很配套啊,数码管显示不完全,用单片机自带的程序没问题,但是用文件里的程序就不可以,可以加我好友指导我一下吗,谢谢569005305
回复

使用道具 举报

8#
ID:314188 发表于 2018-4-25 07:38 | 只看该作者
为什么我下载后打不开显示乱码啊   求帮助
回复

使用道具 举报

9#
ID:314188 发表于 2018-4-25 08:47 | 只看该作者
我打开了图运行了程序但是倒计时那里数字显示不对,能不能指导我一下啊
回复

使用道具 举报

10#
ID:343840 发表于 2018-6-4 18:32 | 只看该作者
感谢大佬的分享
回复

使用道具 举报

11#
ID:346054 发表于 2018-6-7 20:11 | 只看该作者
为什么下载的格式不大对,不是压缩包啊
回复

使用道具 举报

12#
ID:249033 发表于 2018-9-14 23:52 | 只看该作者
东西真的很好!
回复

使用道具 举报

13#
ID:73182 发表于 2018-9-15 08:36 | 只看该作者
除开下载需要自己改后缀外,,资料还居然很全
回复

使用道具 举报

14#
ID:400057 发表于 2018-10-9 11:45 | 只看该作者
jiasen2018 发表于 2018-4-16 10:01
感谢up主,我下载了,很好用,有一点缺陷就是程序似乎和仿真不是很配套啊,数码管显示不完全,用单片机自带 ...

同求,打开图运行了程序但是数码管显示不全
回复

使用道具 举报

15#
ID:313328 发表于 2018-10-9 20:07 | 只看该作者
非常好用
回复

使用道具 举报

16#
ID:414974 发表于 2018-10-30 13:33 | 只看该作者
有电路图吗
回复

使用道具 举报

17#
ID:414426 发表于 2018-10-30 19:23 | 只看该作者
怎么下载不行?
回复

使用道具 举报

18#
ID:417302 发表于 2018-10-31 10:08 来自手机 | 只看该作者
请问楼主您的资料我能用吗?基于单片机的交通灯设计 基本要求:利用单片机AT89C51设计交通灯,交通灯东西方向、南北方向均有红黄绿三种信号灯。 创新:能显示灯亮的时间;增加拐弯方向控制;各方向延时时间可通过键盘重新设定;增加紧急制动功能等。 任务区分:A——增加拥堵方向绿灯延时功能
回复

使用道具 举报

19#
ID:417302 发表于 2018-10-31 10:09 来自手机 | 只看该作者
还有和问题求教下:怎么添加拥堵方向绿灯的延时功能?本人新手小白。还请不吝赐教!多谢
回复

使用道具 举报

20#
ID:404202 发表于 2018-10-31 17:48 | 只看该作者
我想学习学习
回复

使用道具 举报

21#
ID:409686 发表于 2018-10-31 21:15 | 只看该作者
ry123 发表于 2018-6-7 20:11
为什么下载的格式不大对,不是压缩包啊

.rar    对文件进行重命名    加上.rar就可以了
回复

使用道具 举报

22#
ID:419064 发表于 2018-11-30 13:11 | 只看该作者
强大的模拟交通灯程序单片机教程!程序不错! 下载文件时加上.rar就可以了。
回复

使用道具 举报

23#
ID:433212 发表于 2018-12-1 14:44 | 只看该作者
这个下载的怎么打不开啊?
回复

使用道具 举报

24#
ID:455157 发表于 2018-12-26 10:18 | 只看该作者

你也是做的红绿灯?
这个好做吗    就比如说仿真  程序之类的  能不能教教我  咱私聊也可以的
回复

使用道具 举报

25#
ID:454320 发表于 2018-12-27 13:55 | 只看该作者
这几个三极管管什么用的?
回复

使用道具 举报

26#
ID:460867 发表于 2019-1-7 09:19 | 只看该作者
大佬工
回复

使用道具 举报

27#
ID:577907 发表于 2019-7-4 15:45 | 只看该作者
雪中送炭啊 感谢楼主 正需要这个
回复

使用道具 举报

28#
ID:628474 发表于 2019-10-22 20:56 | 只看该作者
怎么下载啊
回复

使用道具 举报

29#
ID:635034 发表于 2019-11-3 22:49 | 只看该作者

你好,要怎么把原理图放进AD然后生成pcb呢
回复

使用道具 举报

30#
ID:260986 发表于 2019-12-2 22:26 | 只看该作者
感谢,楼主
回复

使用道具 举报

31#
ID:582903 发表于 2019-12-4 16:37 | 只看该作者
感谢大佬的分享
回复

使用道具 举报

32#
ID:541360 发表于 2019-12-18 13:16 | 只看该作者
雪中送炭啊,感谢老铁,很有用
回复

使用道具 举报

33#
ID:757179 发表于 2020-5-21 12:08 来自手机 | 只看该作者
这种情况,求解

2020-05-21_12.08.11.jpg (763.59 KB, 下载次数: 80)

2020-05-21_12.08.11.jpg
回复

使用道具 举报

34#
ID:757179 发表于 2020-5-21 12:12 来自手机 | 只看该作者
785457820 发表于 2020-5-21 12:07
这种情况,求解

怎么搞的

IMG_20200521_121013.jpg (776.74 KB, 下载次数: 76)

IMG_20200521_121013.jpg
回复

使用道具 举报

35#
ID:247623 发表于 2020-5-23 15:32 | 只看该作者
程序编译是成功的,但生成的hex文件是没用的。有用的只是仿真文件里面的hex文件

评分

参与人数 1黑币 +15 收起 理由
51hei团团 + 15 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

36#
ID:772895 发表于 2020-6-9 21:31 | 只看该作者
你那个程序文件夹里的代码有问题,跟仿真图里的hex文件不同运行有问题
回复

使用道具 举报

37#
ID:487206 发表于 2020-6-10 23:12 | 只看该作者
有仿真文件不?可不可以用proteus打开呀
回复

使用道具 举报

38#
ID:487206 发表于 2020-6-12 01:15 | 只看该作者
yilinghai 发表于 2020-5-23 15:32
程序编译是成功的,但生成的hex文件是没用的。有用的只是仿真文件里面的hex文件

确实,大家都是这个问题
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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