久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

基于單片機的交通燈課程設計 帶PCB文件 仿真 程序 原理圖(Altium Designer)

  [復制鏈接]
跳轉到指定樓層
樓主
ID:108715 發表于 2016-5-12 07:51 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
資料僅供參考學習,任何商業用途概不負責。

基于51單片機制作的交通燈課程設計的3d效果圖(用Altium Designer制作):


/**********單片機交通燈元件清單***********/

1、9*15萬用板            一塊
2、單片機            一枚
3、兩位數碼管            4個
4、LED燈            9個
5、排阻            一個
6、晶振            1個
7、三極管8550        4個
8、電解電容10uf        1個
9、按鍵            6個
10、USB接口            1個
11、自鎖開關            1個
12、電阻470            9個
13、電阻.7K            4個
14、電阻10K            1個

單片機交通燈的pcb圖:


交通燈課程設計的仿真圖如下(附件中可下載proteus仿真工程文件):


單片機交通燈的原理圖:

交通燈制作教程:




壓縮包中單片機交通燈課程設計所有制作資料下載:
交通燈資料.rar (1.67 MB, 下載次數: 538)




交通燈程序源碼:
  1.         
  2. #include<reg51.H>                                         // 對單片機的口進行了定義
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. uchar code a[10]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//段碼組合,共陽極
  6. uchar code b[4]={0x01,0x02,0x04,0x08}; //位碼組合         
  7. uchar code c[4]={0xcc,0xd4,0x78,0xb8};/*P1 綠紅、黃紅、紅綠、紅黃*/
  8.                   
  9. //12MHz                          
  10. //*************************************************************************************
  11. uchar NB=25,DX=30,NBG=25,DXG=15,H=5;                         /*數碼管顯示值設置*/
  12. uchar  i,k=0,cnt=0,j=0;

  13. sbit K0=P3^4;                           /*支干道通行*/
  14. sbit K1=P3^5;                           /*主干道通行*/
  15. sbit K4=P3^6;                           /*返回*/
  16. sbit K3=P3^2;                        /*設置時間*/
  17. sbit K2=P3^3;                        /*緊急剎車*/

  18. void delay(uchar t);                /*定義延時程序*/
  19. void key();                                /*定義鍵盤程序*/
  20. void display();                        /*定義顯示程序*/
  21. void settime();                /*定義時間設置顯示程序*/
  22. //*************************程序初始*********************************************
  23. void init(void)
  24. {
  25.         TMOD=0x01;                          /*使用定時器0模式一*/
  26.         TH0=0x3c;                          /*(65536-5000)/256*/
  27.         TL0=0xb0;                          /*(65536-5000)%256*/
  28.         IT0=1;                                  //開中斷
  29.         ET0=1;
  30.         TR0=1;
  31.         EA=1;
  32.         EX0=1;
  33.         EX1=1;
  34.         P1=c[k];                                  //開啟交通燈
  35. }
  36. //*************************中斷0處理程序***************************************
  37. void int0(void) interrupt 0                 //        通行時間設置
  38. {         
  39.   EA=0;
  40.   P1=0xd8;                                /*紅燈全亮*/
  41.   
  42. for(;;)
  43.         {
  44.            settime();

  45.                    if(K1==0)                                          /*P3^6=0設置主干道通行時間*/
  46.            {  
  47.           delay(40);
  48.           if(K1==0)
  49.                   {
  50.              while(!K1)
  51.              {settime();}
  52.                                  DXG++;                                /*主干道通行時間加1*/
  53.              if(DXG==100)
  54.              DXG=0;                        
  55.           }
  56.            }
  57.          
  58.                    if(K0==0)                                                         /*P3^5=0設置支干道通行時間*/
  59.            {  
  60.              delay(40);
  61.              if(K0==0)
  62.                      {
  63.                while(!K0)
  64.                {settime();}
  65.                            NBG++;                                                /*支干道通行時間加1*/
  66.                if(NBG==100)
  67.                NBG=0;               
  68.              }
  69.            }
  70.          
  71.            if(K4==0)                                                           /*P3^7=0返回*/
  72.        {  
  73.                 delay(40);        
  74.                     if(K4==0)
  75.                     {
  76.                        while(!K4)
  77.                            {
  78.                            }
  79.                            k=0;P1=c[k];
  80.                            NB=NBG,DX=NBG+H;        
  81.                        display();
  82.                            EA=1;
  83.                         
  84.                    break;
  85.                     }                       
  86.        }
  87.     }
  88. }


  89. //***********************************中斷1處理程序********************
  90. void int1(void) interrupt 2                                         //緊急情況
  91. {                                                                                          
  92.                                                          /*東西南北紅燈亮*/
  93.         EA=0;                                                                        
  94.         TR0=!TR0;                                                            /*停止計數*/

  95.         for(;;)                                                                   /*主支干道顯示全為0*/
  96.         {         
  97.                 P1=0xd8,
  98.                 P0=a[0];
  99.            P2=b[0];
  100.            delay(20);
  101.            
  102.             P2=b[1];
  103.            delay(20);

  104.            P2=b[2];
  105.            delay(20);

  106.            P2=b[3];
  107.            delay(20);
  108.    

  109.            if(K4==0)                                                   /*返回*/
  110.         {
  111.                  delay(20);
  112.                 EA=1;
  113.                   
  114.                 P1=c[k];                                          /*返回緊急前狀態開始計數*/
  115.                 TR0=!TR0;                                                /*重啟計數*/
  116.                 break;                                                           
  117.                 }
  118.         }
  119. }
  120. void time1(void) interrupt 1                                                /*交通燈控制程序*/
  121. {
  122.         TH0=0x3c;                                                                                /*定時50ms*/
  123.         TL0=0xb0;                                                                                         
  124.         cnt++;
  125.         
  126.         if(cnt>=20)                                                                                  /*每20*50ms=1s自減一*/
  127.         {
  128.                 NB--;
  129.                 DX--;
  130.                 cnt=0;
  131.                 if(NB==0||DX==0)
  132.                 {
  133.                         k++;
  134.                         if(k>3)                                                                        /*k取0,1,2,3*/
  135.                         k=0;
  136.                         switch(k)
  137.                         {        
  138.                                 case 0:NB=NBG,DX=NBG+H;j=0;P1=c[k];break;          /*主干道通行顯示綠紅*/
  139.                             case 1:NB=H;j=1;P1=c[k];break;                                           /*主干道黃燈閃爍*/
  140.                                 case 2:NB=DXG+H,DX=DXG;j=0;P1=c[k];break;          /*支干道通行顯示紅綠*/
  141.                                 case 3:DX=H;j=2;P1=c[k];break;                                           /*支干道黃燈閃爍*/
  142.                         }
  143.                 }                 
  144.         }
  145. }
  146. void delay(uchar t)                         //延時程序延時0.1*nms   
  147. {
  148.   uchar i;
  149.   do
  150.    {
  151.      for(i=0;i<20;i++)
  152.      ;;;
  153.    } while(t--);
  154. }
  155. void settime()
  156. {
  157.            P2=b[0],P0=a[(NBG+H)%10];        /*顯示主干道通行時間         */
  158.        delay(20);
  159.                   
  160.            P2=b[1],P0=a[(NBG+H)/10];        
  161.            delay(20);
  162.                   
  163.            P2=b[2],P0=a[(DXG+H)%10];                /*顯示支干道通行時間*/
  164.            delay(20);
  165.                   
  166.        P2=b[3],P0=a[(DXG+H)/10];        
  167.            delay(20);
  168. }
  169. void  key()                                //鍵盤程序用KO K1模擬一道有車一道無車
  170. {
  171.             if(K1==0)                                           /*主干道有車支干道無車*/
  172.     {  
  173.        delay(40);
  174.        if(K1==0)                        
  175.        {
  176.           while(!K1)
  177.           {  
  178.                                  display();
  179.           }
  180.              k=0,P1=c[k];cnt=0;
  181.           NB=NBG, DX=NBG+H;
  182.          display();
  183.        }
  184.     }
  185.            if(K0==0)                                            /*支干道有車主干道無車*/
  186.     {  
  187.        delay(40);
  188.        if(K0==0)
  189.        {
  190.           while(!K0)
  191.           {
  192.            display();
  193.           }
  194.                 k=2,P1=c[k];cnt=0;
  195.           NB=DXG+H,DX=DXG;
  196.                    display();
  197.            }
  198.         }
  199. }
  200. void display()                                                        //顯示程序
  201.         {
  202.                 P2=b[0],P0=a[NB%10];                           /*由k的不同值進入確定顯示數值*/
  203.                 delay(20);
  204.         
  205.                 P2=b[1],P0=a[NB/10];
  206.                 delay(20);
  207.         
  208.                 P2=b[2],P0=a[DX%10];
  209.                 delay(20);
  210.                                                    
  211.                 P2=b[3],P0=a[DX/10];
  212.                 delay(20);
  213.         }
  214. void main(void)
  215. {                //主程序
  216.         init();
  217.         
  218.         for(;;)
  219.         {
  220.           display();
  221.           key();
  222.          
  223.           //黃燈閃爍程序
  224.           while(j==1)                                                                                        /*主干道黃燈閃爍*/
  225.        {                                                                                                               
  226.                      P1=0xdc;                                                                        /*給黃燈一高電平黃燈滅*/                  
  227.                          for(i=83;i>0;i--){display();}                                                /*執行for循環延時*/                        
  228.                          P1=c[k];                                                                        /*再給黃燈一低電平黃燈亮*/
  229.                          for(i=83;i>0;i--){display();}
  230.                 }
  231.         while(j==2)
  232.          {                                                                                    /*支干道黃燈閃爍*/
  233.                     
  234.                          P1=0xf8;
  235.                          for(i=83;i>0;i--){display();}
  236.                          P1=c[k];
  237.                          for(i=83;i>0;i--){display();}
  238.                  }                                                                          
  239.           }
  240.         }
復制代碼


評分

參與人數 3黑幣 +107 收起 理由
594就是我呀 + 5 很給力!
sundfor + 2 贊一個!
admin + 100 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發
ID:125413 發表于 2016-6-6 12:20 | 只看該作者
樓主我也是學vhdl的
回復

使用道具 舉報

板凳
ID:142169 發表于 2016-10-10 13:30 | 只看該作者
51黑有你更精彩。
回復

使用道具 舉報

地板
ID:115772 發表于 2016-10-11 12:22 | 只看該作者
樓主,我加了一段蜂鳴器程序就仿真不了了,為什么啊?
回復

使用道具 舉報

5#
ID:147400 發表于 2016-11-17 20:34 | 只看該作者
這個PCB怎么弄啊 能不能做成單層板啊 我下下來看飛線好多啊
回復

使用道具 舉報

6#
ID:203433 發表于 2017-5-25 09:49 | 只看該作者
樓主,我仿真運行不了是什么鬼
回復

使用道具 舉報

7#
ID:207252 發表于 2017-6-2 22:55 | 只看該作者
謝謝樓主大大~
回復

使用道具 舉報

8#
ID:72444 發表于 2017-6-19 20:35 | 只看該作者
謝謝分享
回復

使用道具 舉報

9#
ID:213548 發表于 2017-6-21 23:16 | 只看該作者
好厲害
回復

使用道具 舉報

10#
ID:233728 發表于 2017-9-17 23:02 | 只看該作者
為什么不能下
回復

使用道具 舉報

11#
ID:238226 發表于 2017-10-14 22:18 來自手機 | 只看該作者
請問一下設計要求,設計思路,設計方案,軟硬件設計方案有嗎
回復

使用道具 舉報

12#
ID:239815 發表于 2017-10-16 10:00 | 只看該作者
你好,這個有PCB源文件嗎?
回復

使用道具 舉報

13#
ID:197566 發表于 2018-9-29 11:18 | 只看該作者
樓主 可以提供下PCB庫文件嗎?  1441516027@qq.com
回復

使用道具 舉報

14#
ID:405670 發表于 2018-10-8 18:59 來自手機 | 只看該作者
樓主,按鍵按下后再次啟動數碼管不是按照自己設定的值開始計數的哎
回復

使用道具 舉報

15#
ID:400057 發表于 2018-10-9 17:01 | 只看該作者
51黑有你更精彩!
回復

使用道具 舉報

16#
ID:243612 發表于 2018-11-26 12:21 | 只看該作者
樓主,有ad的各種元件庫嗎?想要直插式的,可是我弄的是貼片式的,很急用
回復

使用道具 舉報

17#
ID:497641 發表于 2019-3-25 08:35 | 只看該作者
很棒!學習了很多
回復

使用道具 舉報

18#
ID:761121 發表于 2020-5-26 17:59 | 只看該作者

RE: 基于單片機的交通燈課程設計 帶PCB文件 仿真 程序 原理圖(Altium Designer)

樓主 元件清單不應該有12個LED燈嗎
回復

使用道具 舉報

19#
ID:851900 發表于 2020-12-1 10:57 | 只看該作者
強啊,非常的細節
回復

使用道具 舉報

20#
ID:377523 發表于 2021-5-24 22:04 | 只看該作者
原理圖P0都沒接呀
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 午夜精品久久久久久久99黑人 | 日韩精品免费在线观看 | 欧美中文字幕一区二区三区亚洲 | 羞羞视频免费观看 | 久久精品国产一区二区三区不卡 | 在线看成人av | 国产欧美一区二区三区久久手机版 | 中文字幕一区二区三区精彩视频 | 欧美视频在线观看 | 欧美最猛性xxxxx亚洲精品 | 亚洲午夜电影 | 色视频网站在线观看 | 亚洲国产一| 人人草天天草 | 国产情侣久久 | 日本成人中文字幕 | 日日噜噜噜夜夜爽爽狠狠视频97 | 久久黄色网 | 男女羞羞免费视频 | 日韩一区二区三区在线视频 | 91精品国产色综合久久不卡蜜臀 | 久久www免费人成看片高清 | 99亚洲| 污污免费网站 | 中国一级特黄毛片大片 | 精品国产乱码久久久久久牛牛 | 视频一区二区三区在线观看 | 中文字幕精品一区二区三区精品 | 91在线 | 久久国产激情视频 | 国产免费拔擦拔擦8x高清 | 91免费观看视频 | 欧美老少妇一级特黄一片 | 日本午夜一区 | 狠狠艹 | 欧美精品影院 | 欧美成人精品一区二区男人看 | 国产精品视频久久久久久 | 一区二区三区四区视频 | www.youjizz.com日韩| 羞羞视频一区二区 |