欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3544|回復: 3
打印 上一主題 下一主題
收起左側

自己做的交通燈,內含單片機程序源碼,仿真圖,PCB源文件

[復制鏈接]
跳轉到指定樓層
樓主
Altium Designer畫的交通燈原理圖和PCB圖如下:(51hei附件中可下載工程文件)


仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)


單片機源程序如下:
  1. /*  以單片機位核心設計一個交通燈,要求單片機頻率設為11.0592MHz。
  2.   分為主干道和次干道。主干道直行方向綠燈亮通行50s(后三秒直行方向綠燈閃爍),接下來三秒直行方向黃燈閃爍,然后主干道直行方向燈變紅燈,
  3.   左拐方向燈變綠燈,左拐持續時間為20s(后三秒左拐綠燈閃爍),接下來三秒左拐黃燈閃爍,然后主干道直行燈和左拐燈變紅燈,同時次干道由紅燈
  4.   變成綠燈,直行時間持續20s,左拐持續時間15s,重復與主干道的類似的過程,然后再重復上述過程并持續下去,直行和左拐用LED點陣顯示,剩余
  5.   時間用LED數碼管顯示。還有突發事件應急處理的按鍵,當按下時,某一路通車,其余路變成紅燈(主干道和支干道共用紅黃綠燈)。
  6.   P1.0~P1.5 LED燈接口
  7.   P0.0~P0.7和P2.0,P2.1 兩位一體共陽數碼管接口
  8.   P3.0~P3.3        兩片74HC595接口
  9.   P1.6,P1.7,P3.6,P3.7  按鍵接口*/
  10. #include<reg52.h>
  11. #include"config.h"
  12. #include"uart.h"
  13. #include<intrins.h>
  14. #define NOP() _nop_()
  15. /*燈代碼定義*/
  16. sbit RE_ST=P1^0;
  17. sbit YE_ST=P1^1;
  18. sbit GR_ST=P1^2;
  19. sbit RE_LE=P1^3;
  20. sbit YE_LE=P1^4;
  21. sbit GR_LE=P1^5;
  22. //突發事件應急處理按鍵
  23. sbit sw1     = P1^6;
  24. sbit sw2     = P1^7;
  25. sbit sw3     = P3^6;
  26. sbit sw4     = P3^7;
  27. bit flag=1;
  28. bit flag_l=1;                                 //直行狀態標志位
  29. bit flag_s=1;                                 //左拐狀態標志位
  30. //74HC595管腳定義
  31. sbit MOSIO1=P3^1;
  32. sbit R_CLK1=P3^0;
  33. sbit S_CLK1=P3^2;
  34. unsigned int i;
  35. unsigned int a,b,d;
  36. unsigned char DSY_BUFF[] = {0,0};
  37. unsigned char code DSY_CODE[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//數碼管段碼定義
  38. unsigned char code tab[]={0xE7,0xC3,0x81,0x81,0xE7,0xE7,0xE7,0xE7};                         //直行箭頭段碼定義
  39. unsigned char code tab3[]={0xFF,0xEF,0xCF,0x00,0x00,0xCF,0xEF,0xFF};                 //        左拐箭頭段碼定義
  40. unsigned char code tab1[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
  41. unsigned char  tab2[]={0,0,0,0,0,0,0,0};
  42. void delay(unsigned int x);
  43. void HC595SendData(unsigned int SendVal);
  44. void HC595SendData1(unsigned int SendVal1);
  45. void SCan();                                //按鍵調用
  46. void main()
  47. {
  48.                 TMOD = 0X11;
  49.                 ET0 = 1;
  50.                 TH0 = (65536-50000)/256;                //50ms
  51.                 TL0 = (65536-50000)%256;
  52.                 TH1=(65536-2000)/256;        
  53.                   TL1=(65536-2000)%256;                     //1.0ms
  54.                  ET1=1;                    //定時器/計數器1中斷允許
  55.                   EA=1;                        //總中斷允許
  56.                   TR1=1;
  57.                 TR0 = 1;
  58.             while(1)
  59.                 {       
  60.                         if(flag)
  61.                         {
  62.                                 if(b<=50)
  63.                                         flag_l=0;                                                                          //主干道直行綠燈亮50s
  64.                                      GR_ST =0;
  65.                                 if((b>=48)&(b<=50)&((a==10)|(a==0)))         //主干道直行綠燈3秒閃
  66.                             {
  67.                                         GR_ST=!GR_ST;
  68.                                         delay(400);       
  69.                                         flag_l=0;                           
  70.                             }

  71.                                 if((b>=51)&(b<=53)&((a==10)|(a==0)))                         //主干道直行黃燈3秒閃
  72.                             {
  73.                                         GR_ST=1;
  74.                                         YE_ST=!YE_ST;
  75.                                         delay(300);       
  76.                                         flag_l=0;
  77.                             }
  78.                                 if((b>=54)&(b<=73))                                                                 //主干道左拐綠燈亮20s
  79.                             {
  80.                                         GR_ST=1;
  81.                                         flag_l=1;
  82.                                         flag_s=0;
  83.                                      YE_ST = 1;
  84.                                         delay(500);
  85.                                        RE_ST = 0;
  86.                                        GR_LE= 0;
  87.                         }
  88.                                 if((b>=71)&(b<=73)&((a==10)|(a==0)))                          //主干道左拐綠燈3秒閃
  89.                             {
  90.                                     GR_LE=!GR_LE;
  91.                                         delay(300);       
  92.                                         flag_s=0;         
  93.                                 }        
  94.                             if((b>=74)&(b<=76)&((a==10)|(a==0)))                           //主干道左拐黃燈3秒閃
  95.                             {
  96.                                         GR_LE=1;
  97.                                     YE_LE= !YE_LE;
  98.                                         delay(300);       
  99.                                         flag_s=0;
  100.                             }
  101.                             if((b>=77)&(b<=93))                                                                         //主干道左拐紅燈和直行紅燈變亮,次干道直行綠燈變亮持續20s
  102.                             {       
  103.                                         RE_ST=1;       
  104.                                         flag_s=1;
  105.                                         RE_LE=0;
  106.                                      YE_LE = 1;
  107.                                         flag_l=0;
  108.                                        GR_ST=0;
  109.                               }                                                                                                        //次干道直行綠燈3秒閃爍
  110.                                 if((b >=94)&(b<=96)&((a==10)|(a==0)))
  111.                             {
  112.                                         GR_ST=!GR_ST;
  113.                                         delay(400);       
  114.                                         flag_l=0;                                                     
  115.                             }
  116.                             if((b>=97)&(b<=99)&((a==10)|(a==0)))                                 //次干道直行黃燈3秒閃爍
  117.                             {
  118.                                         GR_ST=1;
  119.                                         YE_ST=!YE_ST;
  120.                                         delay(300);       
  121.                                         flag_l=0;
  122.                             }
  123.                             if((b>=100)&(b<=111))                                                                        //次干道直行紅燈亮,左拐綠燈亮15s
  124.                             {
  125.                                         flag_l=1;
  126.                                         GR_ST=1;
  127.                                         flag_s=0;
  128.                                      YE_ST = 1;
  129.                                         delay(500);
  130.                                        RE_ST = 0;
  131.                                        GR_LE= 0;
  132.                                
  133.                         }
  134.                             if((b>=112)&(b<=114)&((a==10)|(a==0)))                                 //次干道左拐綠燈3秒閃
  135.                             {       
  136.                                     GR_LE=!GR_LE;
  137.                                         delay(300);
  138.                                         flag_s=0;                                                     
  139.                             }        
  140.                             if((b>=115)&(b<=117)&((a==10)|(a==0)))                                 //次干道左拐黃燈3秒閃
  141.                             {
  142.                                         GR_LE=1;
  143.                                     YE_LE= !YE_LE;
  144.                                         delay(200);       
  145.                                         flag_s=0;         
  146.                             }
  147.                             if(b>=118)                                                                                         //次干道左拐紅燈和直行紅燈變亮,主干道直行綠燈變亮持續50s
  148.                             {
  149.                                         flag_s=1;
  150.                                         flag_l=0;
  151.                                     b=0;
  152.                                         RE_ST=1;
  153.                                     YE_LE= 1;
  154.                                         RE_LE=0;
  155.                                         GR_ST=0;
  156.                             }
  157.                         }
  158.                         SCan();
  159.                 }
  160. }
  161. void SCan()
  162. {
  163.         if(sw1==0)                                                                        //按下主干道直行方向通車,其余方向變紅燈
  164.                     {                                                                                                                                                       
  165.                              delay(20);       
  166.                              if(sw1==0)
  167.                              {
  168.                                      while(!sw1);
  169.                                      delay(20);
  170.                                         GR_ST=0;
  171.                                         RE_LE=0;
  172.                                         GR_LE=1;
  173.                                         RE_LE=1;

  174.                                 }
  175.                         }
  176.         if(sw2==0)                                                                         //按下主干道左拐方向通車,其余方向變紅燈
  177.                     {
  178.                              delay(20);       
  179.                              if(sw2==0)
  180.                              {
  181.                                      while(!sw2);
  182.                                      delay(20);
  183.                                         GR_LE=0;
  184.                                         RE_ST=0;
  185.                                         GR_ST=1;
  186.                                         RE_LE=1;
  187.                                 }
  188.                         }
  189.         if(sw3==0)                                                                          //按下次干道直行方向通車,其余方向變紅燈
  190.     {
  191.             delay(20);       
  192.             if(sw3==0)
  193.             {
  194.                     while(!sw3);
  195.                     delay(20);       
  196.                         GR_ST=0;
  197.                         RE_LE=0;
  198.                         GR_LE=1;
  199.                         RE_ST=1;
  200.                 }
  201.                 }
  202.                         if(sw4==0)                                                                           //按下次干道左拐方向通車,其余方向變紅燈
  203.                     {
  204.                              delay(20);       
  205.                              if(sw4==0)
  206.                              {
  207.                                      while(!sw4);
  208.                                      delay(20);
  209.                                         flag=0;
  210.                                         GR_LE=0;
  211.                                         RE_ST=0;
  212.                                         GR_ST=1;
  213.                                         RE_LE=1;
  214.                                 }
  215.                         }
  216. }
  217. void OST() interrupt 1
  218. {
  219.         TH0 = (65536-50000)/256;
  220.         TL0 = (65536-50000)%256;
  221.         a++;
  222.         if(a==20)                                                                                                                 //1s
  223.         {       
  224.                 a = 0;
  225.                 b++;
  226.                 if(b<=50)                                                                          
  227.                 {
  228.                         d = 50-b;
  229.                 }
  230.                                                                                                           
  231.                 if((b>=54)&(b<=73))
  232.                 {
  233.                         d=73-b;
  234.                                
  235.                 }
  236.                 if((b>=77)&(b<=96))
  237.                 {
  238.                         d=96-b;
  239.                                
  240.                 }
  241.                  if((b>=100)&(b<=114))
  242.                 {
  243.                         d=114-b;                               
  244.                 }
  245.         }
  246.         if(b==0)
  247.                 d=50;
  248.         if(b==53)
  249.                 d=20;
  250.         if(b==76)
  251.                 d=20;
  252.         if(b==99)
  253.                 d = 15;
  254.         DSY_BUFF[0] = d/10;
  255.         DSY_BUFF[1] = d%10;       
  256. }
  257. void Display_Scan() interrupt 3                //顯示程序
  258. {   
  259.         unsigned char z;                              
  260.           TH1=(65536-2000)/256;                       
  261.           TL1=(65536-2000)%256;
  262.         P2=0x01<<z;
  263.         P0 = DSY_CODE[DSY_BUFF[z]];
  264.         z=(++z)%2;
  265.         if(!flag_l)                                                                          //LED點陣直行箭頭顯示
  266.         {
  267.                 flag_s=1;
  268.                 tab2[i] =~tab[i];
  269.                 SW_74HC5951 = 0;
  270.                 UARTNO(tab1+i,1);
  271. ……………………

  272. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼

所有資料51hei提供下載:
交通燈.rar (1.02 MB, 下載次數: 47)




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:362971 發表于 2018-7-2 11:07 | 只看該作者
樓主超級的棒
回復

使用道具 舉報

板凳
ID:363002 發表于 2018-7-2 11:56 來自觸屏版 | 只看該作者
mimonarch 發表于 2018-7-2 11:07
樓主超級的棒

樓主能提供軟件的下載方式嗎
回復

使用道具 舉報

地板
ID:449590 發表于 2019-4-9 09:50 | 只看該作者
這個PCB有錯誤吧
回復

使用道具 舉報

5#
無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表