找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 16283|回復(fù): 37
收起左側(cè)

51單片機交通燈全套設(shè)計仿真代碼 數(shù)碼管顯示有亂碼 求幫助

  [復(fù)制鏈接]
ID:279740 發(fā)表于 2018-1-26 19:13 | 顯示全部樓層 |閱讀模式
交通燈的全套資料包內(nèi)容:

1、用單片機stc89C52 設(shè)計一個交通燈系統(tǒng),并用數(shù)碼管顯示時間,LED指示通行。
2、用protel 99se設(shè)計電路圖,pcb圖等
3、數(shù)碼管用三極管驅(qū)動。
4、按鍵功能:黃燈常亮(深夜模式)、禁行、東西通行、南北通行、時間加、時間減、切換、確定。
0.jpg 0.jpg 0.jpg 0.jpg 0.jpg

仿真圖:
0.jpg
1、單片機是通用的無論51還是52、無論stc還是at都一樣,引腳功能都一樣,原理圖和程序也是一樣的。
2、原理圖中的. sch等格式是要用protel99se打開的,沒有軟件的不要緊,我已幫您轉(zhuǎn)換成word格式和pdf格式的了。
3、程序中的.c文件可以用記事本打開,就是程序了。其他的是寫程序是自動生成的,沒什么用的。
4、可以按照正面布局,盡量不要按照實物的背面焊接,很容易看錯,要按照原理圖焊接,不要按照仿真圖焊接,因為仿真只是模擬一個現(xiàn)象。

原理圖 打開方式:
DXP格式用            Altium designer Summer 軟件打開
protel99格式用       protel99SE 軟件打開
PDF格式用            PDF 軟件打開
Word格式用           Word 或用WPS 軟件打開

4種格式的原理圖都內(nèi)容是一樣的  只是打開方式不同

  請注意,原理圖上有些接線的地方是用網(wǎng)絡(luò)標(biāo)號連接的,意思就是名字相同的兩個點就是連接在一起的相當(dāng)導(dǎo)線的作用,圖上所有的VCC要接在一起,所有的GND要接在一起。

請看原理圖焊接,不要看仿真圖焊接。

wrod格式里面的原理圖是復(fù)制出來的,有一點點變行變形,麻煩大家注意一下,盡量看其他三種格式的圖焊接,

如果文檔里面的原理圖和原理圖文件夾內(nèi)的圖不一樣的話,請大家以原理圖文件夾內(nèi)的為準(zhǔn),原理圖文件夾的圖是和實物配套的,可以自己截圖或復(fù)制,然后粘貼到文檔里面去。
單片機源程序如下:
  1. #include <reg52.h>                 //調(diào)用單片機頭文件
  2. #define uchar unsigned char   //宏定義"uchar"代替"unsigned char"。
  3. #define uint  unsigned int          //宏定義"uint"用來定義無符號整型數(shù)。


  4. //數(shù)碼管段選定義 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;    //顯示數(shù)碼管的個位數(shù)

  10. //數(shù)碼管位選定義
  11. sbit smg_we1 = P2^0;            //數(shù)碼管位選定義
  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;  //交通燈的模式 根據(jù)時間
  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. /***********************數(shù)碼位選函數(shù)*****************************/
  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函數(shù)
  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. * 功能 : 數(shù)碼管顯示
  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. /*********************交通燈處理函數(shù)*********************************/
  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)                 //當(dāng)小于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)                 //當(dāng)小于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.                 {                                                //確認(rèn)是按鍵按下
  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. /********************設(shè)置函數(shù)*****************/
  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)          //設(shè)置鍵
  241.         {
  242.                 menu_1 ++;
  243.                 if(menu_1 >= 3)
  244.                 {
  245.                         menu_1  = 0;
  246.                 }
  247.         }

  248.         if(menu_1 == 1)           //設(shè)置東西的時間
  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] ;                //顯示東西設(shè)置的時候
  265.                 dis_smg[3] = smg_du[dx_time / 10] ;        
  266.         }        
  267.         if(menu_1 == 2)           //設(shè)置南北的時間
  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] ;                //顯示東西設(shè)置的時候
  284.                 dis_smg[3] = smg_du[nb_time / 10] ;        
  285.         }
  286. }
  287. ……………………

  288. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
全部資料51hei下載地址:
單片機交通燈 4個數(shù)碼管 大.7z (8.26 MB, 下載次數(shù): 619)

評分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:279740 發(fā)表于 2018-1-26 19:19 來自手機 | 顯示全部樓層
這資料不錯哦
回復(fù)

使用道具 舉報

ID:279740 發(fā)表于 2018-1-26 19:53 來自手機 | 顯示全部樓層
我自己下載怎么還扣幣啊~
回復(fù)

使用道具 舉報

ID:279740 發(fā)表于 2018-2-8 17:48 來自手機 | 顯示全部樓層
lemon0210 發(fā)表于 2018-1-30 14:40
下載了根本沒用,騙子,騙黑幣

你遇到的是哪種情況,有需要我?guī)兔Σ唬?/td>
回復(fù)

使用道具 舉報

ID:279740 發(fā)表于 2018-2-8 17:49 來自手機 | 顯示全部樓層
lemon0210 發(fā)表于 2018-1-30 14:40
下載了根本沒用,騙子,騙黑幣

你下載后要用電腦解壓文件包啊
回復(fù)

使用道具 舉報

ID:279740 發(fā)表于 2018-2-8 17:50 來自手機 | 顯示全部樓層
宋老師的魔咒 發(fā)表于 2018-1-27 17:33
6通天塔

什么?    。。。。
回復(fù)

使用道具 舉報

ID:308289 發(fā)表于 2018-4-16 10:01 | 顯示全部樓層
感謝up主,我下載了,很好用,有一點缺陷就是程序似乎和仿真不是很配套啊,數(shù)碼管顯示不完全,用單片機自帶的程序沒問題,但是用文件里的程序就不可以,可以加我好友指導(dǎo)我一下嗎,謝謝569005305
回復(fù)

使用道具 舉報

ID:314188 發(fā)表于 2018-4-25 07:38 | 顯示全部樓層
為什么我下載后打不開顯示亂碼啊   求幫助
回復(fù)

使用道具 舉報

ID:314188 發(fā)表于 2018-4-25 08:47 | 顯示全部樓層
我打開了圖運行了程序但是倒計時那里數(shù)字顯示不對,能不能指導(dǎo)我一下啊
回復(fù)

使用道具 舉報

ID:343840 發(fā)表于 2018-6-4 18:32 | 顯示全部樓層
感謝大佬的分享
回復(fù)

使用道具 舉報

ID:346054 發(fā)表于 2018-6-7 20:11 | 顯示全部樓層
為什么下載的格式不大對,不是壓縮包啊
回復(fù)

使用道具 舉報

ID:249033 發(fā)表于 2018-9-14 23:52 | 顯示全部樓層
東西真的很好!
回復(fù)

使用道具 舉報

ID:73182 發(fā)表于 2018-9-15 08:36 | 顯示全部樓層
除開下載需要自己改后綴外,,資料還居然很全
回復(fù)

使用道具 舉報

ID:400057 發(fā)表于 2018-10-9 11:45 | 顯示全部樓層
jiasen2018 發(fā)表于 2018-4-16 10:01
感謝up主,我下載了,很好用,有一點缺陷就是程序似乎和仿真不是很配套啊,數(shù)碼管顯示不完全,用單片機自帶 ...

同求,打開圖運行了程序但是數(shù)碼管顯示不全
回復(fù)

使用道具 舉報

ID:313328 發(fā)表于 2018-10-9 20:07 | 顯示全部樓層
非常好用
回復(fù)

使用道具 舉報

ID:414974 發(fā)表于 2018-10-30 13:33 | 顯示全部樓層
有電路圖嗎
回復(fù)

使用道具 舉報

ID:414426 發(fā)表于 2018-10-30 19:23 | 顯示全部樓層
怎么下載不行?
回復(fù)

使用道具 舉報

ID:417302 發(fā)表于 2018-10-31 10:08 來自手機 | 顯示全部樓層
請問樓主您的資料我能用嗎?基于單片機的交通燈設(shè)計 基本要求:利用單片機AT89C51設(shè)計交通燈,交通燈東西方向、南北方向均有紅黃綠三種信號燈。 創(chuàng)新:能顯示燈亮的時間;增加拐彎方向控制;各方向延時時間可通過鍵盤重新設(shè)定;增加緊急制動功能等。 任務(wù)區(qū)分:A——增加擁堵方向綠燈延時功能
回復(fù)

使用道具 舉報

ID:417302 發(fā)表于 2018-10-31 10:09 來自手機 | 顯示全部樓層
還有和問題求教下:怎么添加擁堵方向綠燈的延時功能?本人新手小白。還請不吝賜教!多謝
回復(fù)

使用道具 舉報

ID:404202 發(fā)表于 2018-10-31 17:48 | 顯示全部樓層
我想學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報

ID:409686 發(fā)表于 2018-10-31 21:15 | 顯示全部樓層
ry123 發(fā)表于 2018-6-7 20:11
為什么下載的格式不大對,不是壓縮包啊

.rar    對文件進(jìn)行重命名    加上.rar就可以了
回復(fù)

使用道具 舉報

ID:419064 發(fā)表于 2018-11-30 13:11 | 顯示全部樓層
強大的模擬交通燈程序單片機教程!程序不錯! 下載文件時加上.rar就可以了。
回復(fù)

使用道具 舉報

ID:433212 發(fā)表于 2018-12-1 14:44 | 顯示全部樓層
這個下載的怎么打不開?
回復(fù)

使用道具 舉報

ID:455157 發(fā)表于 2018-12-26 10:18 | 顯示全部樓層

你也是做的紅綠燈?
這個好做嗎    就比如說仿真  程序之類的  能不能教教我  咱私聊也可以的
回復(fù)

使用道具 舉報

ID:454320 發(fā)表于 2018-12-27 13:55 | 顯示全部樓層
這幾個三極管管什么用的?
回復(fù)

使用道具 舉報

ID:460867 發(fā)表于 2019-1-7 09:19 | 顯示全部樓層
大佬工
回復(fù)

使用道具 舉報

ID:577907 發(fā)表于 2019-7-4 15:45 | 顯示全部樓層
雪中送炭啊 感謝樓主 正需要這個
回復(fù)

使用道具 舉報

ID:628474 發(fā)表于 2019-10-22 20:56 | 顯示全部樓層
怎么下載啊
回復(fù)

使用道具 舉報

ID:635034 發(fā)表于 2019-11-3 22:49 | 顯示全部樓層

你好,要怎么把原理圖放進(jìn)AD然后生成pcb呢
回復(fù)

使用道具 舉報

ID:260986 發(fā)表于 2019-12-2 22:26 | 顯示全部樓層
感謝,樓主
回復(fù)

使用道具 舉報

ID:582903 發(fā)表于 2019-12-4 16:37 | 顯示全部樓層
感謝大佬的分享
回復(fù)

使用道具 舉報

ID:541360 發(fā)表于 2019-12-18 13:16 | 顯示全部樓層
雪中送炭啊,感謝老鐵,很有用
回復(fù)

使用道具 舉報

ID:757179 發(fā)表于 2020-5-21 12:08 來自手機 | 顯示全部樓層
這種情況,求解
2020-05-21_12.08.11.jpg
回復(fù)

使用道具 舉報

ID:757179 發(fā)表于 2020-5-21 12:12 來自手機 | 顯示全部樓層
785457820 發(fā)表于 2020-5-21 12:07
這種情況,求解

怎么搞的
IMG_20200521_121013.jpg
回復(fù)

使用道具 舉報

ID:247623 發(fā)表于 2020-5-23 15:32 | 顯示全部樓層
程序編譯是成功的,但生成的hex文件是沒用的。有用的只是仿真文件里面的hex文件

評分

參與人數(shù) 1黑幣 +15 收起 理由
51hei團(tuán)團(tuán) + 15 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:772895 發(fā)表于 2020-6-9 21:31 | 顯示全部樓層
你那個程序文件夾里的代碼有問題,跟仿真圖里的hex文件不同運行有問題
回復(fù)

使用道具 舉報

ID:487206 發(fā)表于 2020-6-10 23:12 | 顯示全部樓層
有仿真文件不?可不可以用proteus打開呀
回復(fù)

使用道具 舉報

ID:487206 發(fā)表于 2020-6-12 01:15 | 顯示全部樓層
yilinghai 發(fā)表于 2020-5-23 15:32
程序編譯是成功的,但生成的hex文件是沒用的。有用的只是仿真文件里面的hex文件

確實,大家都是這個問題
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表