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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 9151|回復: 5
收起左側

單片機交通燈設計(東西南北四個方向分別添加紅、黃、綠交通信號燈)

[復制鏈接]
ID:322586 發(fā)表于 2018-5-5 10:11 | 顯示全部樓層 |閱讀模式
、任務功能介紹:
(1)四位數碼管計時,分別代表小時和分鐘(為了便于演示,可加快時間,實際是最高兩位按分鐘變動,低兩位按秒變動)
(2)兩個獨立按鍵,分別對小時數,分鐘數修改(按一下加一個值)
(3)東西南北四個方向分別添加紅、黃、綠交通信號燈以及兩位數碼管顯示信號燈剩余時間。

單片機源程序如下:
  1. #include<reg51.h>
  2. #include<rtx51tny.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char

  5. sbit con=P3^2;                 //存儲寄存器的時鐘輸入。

  6. sbit snr=P2^2;                //上升沿時移位寄存器中的數據進入存儲寄存器,         
  7. sbit sng=P2^3;                    //下降沿時存儲寄存器中的數據保持不變。                                                         
  8. sbit sny=P2^4;                    //應用時通常將ST_CP置為低點平,
  9. sbit ewr=P2^5;                    //移位結束后再在ST_CP端產生一個正脈沖更新顯示數據。                 
  10. sbit ewg=P2^6;
  11. sbit ewy=P2^7;

  12. sbit KEY1 = P1^0;      
  13. sbit KEY2 = P1^1;
  14. sbit LA=P2^0;
  15. sbit LB=P2^1;

  16. uchar minute=0;
  17. uchar hour=0;
  18. uchar code DSY_DUAN[]={0x3f,0x06,0x5b,0x4f,0x66,
  19.                                                 0x6d,0x7d,0x07,0x7f,0x6f};
  20. unsigned char code tew[]={0x06,0x7f,0x06,0x07,0x06,0x7d,0x06, 0x6d,
  21.                                                         0x06,0x66,0x06,0x4f,0x06,0x5b,0x06,0x06,
  22.                                                         0x06,0x3f,0x3f,0x6f,0x3f,0x7f,0x3f,0x07,
  23.                                                         0x3f,0x7d,0x3f,0x6d,0x3f,0x66,0x3f,0x4f,
  24.                                                         0x3f,0x5b,0x3f,0x06,0x3f,0x3f,0x06,0x66,
  25.                                                         0x06,0x4f,0x06,0x5b,0x06,0x06,0x06,0x3f,
  26.                                                          0x3f,0x6f,0x3f,0x7f,0x3f,0x07,0x3f,0x7d,
  27.                                                         0x3f,0x6d,0x3f,0x66,0x3f,0x4f,0x3f,0x5b,
  28.                                                         0x3f,0x06,0x3f,0x3f,0x3f,0x4f,0x3f,0x5b,
  29.                                                         0x3f,0x06,0x3f,0x3f};
  30.                                              //東西方向數碼管倒計時段碼表
  31. unsigned char code tsn[]={0x06,0x66,0x06,0x4f,0x06,0x5b,0x06,0x06,
  32.                                                         0x06,0x3f,0x3f,0x6f,0x3f,0x7f,0x3f,0x07,
  33.                                                         0x3f,0x7d,0x3f,0x6d,0x3f,0x66,0x3f,0x4f,
  34.                                                         0x3f,0x5b,0x3f,0x06,0x3f,0x3f,0x3f,0x4f,
  35.                                                         0x3f,0x5b,0x3f,0x06,0x3f,0x3f,0x06,0x7f,
  36.                                                         0x06,0x07,0x06,0x7d,0x06,0x6d,0x06,0x66,
  37.                                                         0x06,0x4f,0x06,0x5b,0x06,0x06,0x06,0x3f,
  38.                                      0x3f,0x6f,0x3f,0x7f,0x3f,0x07,0x3f,0x7d,
  39.                                                         0x3f,0x6d,0x3f,0x66,0x3f,0x4f,0x3f,0x5b,
  40.                                                         0x3f,0x06,0x3f,0x3f};
  41.                                             //南北方向數碼管倒計時段碼表
  42. void delay(uint t)
  43. {
  44.    uchar i;
  45.    while(t--);
  46.    for(i=0;i>250;i++);
  47. }


  48. void job0() _task_ 0
  49. {
  50.     os_create_task(1);
  51.         os_create_task(2);
  52.         os_create_task(3);
  53.         os_create_task(4);
  54.         os_create_task(5);
  55.         os_delete_task(0);
  56. }
  57. void job1() _task_ 1                  //十字路口數碼管倒計時部分
  58. {         
  59.         uchar i;
  60.         SCON=0x00;                          //配置串口通信為方式0,八位同步移位寄存器
  61.         con=0;                                  //con先拉低,后拉高
  62.         while(1)
  63.         {
  64.            for(i=0;i<38;i++)             //每兩個數碼管倒計時部分共有76個段碼,
  65.                                       //所以需要乘2才能到達下一個狀態(tài)。        
  66.               {
  67.                            SBUF=tsn[i*2];              //南北方向9-15數碼管掃描
  68.                            while(!TI);
  69.                            TI=0;                          //軟件清零部分;
  70.                            SBUF=tsn[i*2+1];      //南北方向1-7數碼管掃描
  71.                            while(!TI);
  72.                            TI=0;
  73.                         SBUF=tew[i*2];
  74.                            while(!TI);
  75.                            TI=0;               
  76.                         SBUF=tew[i*2+1];
  77.                            while(!TI);
  78.                            TI=0;                      //接收完畢信號;
  79.                            con=1;                           //595芯片ST_CP端工作;
  80.                            os_wait(K_IVL,10,0);       //延時100ms;
  81.                            con=0;                           //595芯片ST_CP端停止工作;
  82.           }
  83.         }                  
  84. }

  85. void job2() _task_ 2
  86. {
  87.    while(1)
  88.    {
  89.                 minute++;                    //分鐘加一
  90.                 if(minute==60)               //分鐘滿60;
  91.                 {
  92.                         minute=0;                //分鐘清零;
  93.                         hour++;                  //小時加一;
  94.                         if(hour==60)             //小時滿60;
  95.                         {
  96.                                 hour=0;              //小時清零;
  97.                         }
  98.                            
  99.                 }
  100.                 os_wait(K_IVL,100,0);        //延時1s;
  101.         }
  102. }
  103. void job3() _task_ 3                    //按鍵檢測
  104. {
  105.         while(1)
  106.         {
  107.                 if(P1!=0xff)                //有鍵被按下;
  108.                 {
  109.                         delay(10);
  110.                         
  111.                         if(KEY1==0)                    //如果第一個鍵被按下,分鐘個位加一;
  112.                         {
  113.                                 minute=minute%10+1;
  114.                                 if(minute==60)      //分鐘滿60清零
  115.                                 {
  116.                                         minute=0;
  117.                                 }
  118.                         }
  119.                         else if(KEY2==0)        //如果第二個鍵被按下,小時個位加一;
  120.                         {
  121.                                 hour=hour%10+1;
  122.                                 if(hour==60)        //小時滿60清零
  123.                                 {
  124.                                         hour=0;
  125.                                 }
  126.                         }
  127.                         while(P1!=0xff);             //判斷抬起;   
  128.                 }
  129.         }
  130. }

  131. void job4() _task_ 4                    //計時數碼管掃描程序
  132. {
  133.         while(1)
  134.         {

  135.                 LA=1,LB=1;                            //P2口前兩個管腳輸入
  136.                 P0=DSY_DUAN[minute%10];                //分個
  137.                 delay(500);
  138.         
  139.                 LA=1,LB=0;
  140.                 P0=DSY_DUAN[hour%10];           //時個
  141.                 delay(500);
  142.                
  143.                 LA=0,LB=1;
  144.                 P0=DSY_DUAN[minute/10];
  145.                 delay(500);
  146.         
  147.                 LA=0,LB=0;
  148.                 P0=DSY_DUAN[hour/10];
  149.                 delay(500);         
  150.    }         
  151. }

  152. void job5() _task_ 5               //南北方向交通燈
  153. {
  154.    while(1)
  155.    {
  156.             snr=0;sng=1;sny=1;                                                           //南北紅,東西綠
  157.          ewr=1;ewg=0;ewy=1;
  158.          os_wait(K_IVL,150,0);
  159.          
  160.          snr=0;sng=1;sny=1;                                                           //南北紅,東西黃
  161.          ewr=1;ewg=1;ewy=0;
  162.          os_wait(K_IVL,10,0);
  163.          snr=0;sng=1;sny=1;                                                           //南北紅,東西黃
  164.          ewr=1;ewg=1;ewy=1;
  165.          os_wait(K_IVL,10,0);
  166.          snr=0;sng=1;sny=1;                                                           //南北紅,東西黃
  167.          ewr=1;ewg=1;ewy=0;
  168.          os_wait(K_IVL,10,0);
  169.          snr=0;sng=1;sny=1;                                                           //南北紅,東西黃
  170.          ewr=1;ewg=1;ewy=1;
  171.          os_wait(K_IVL,10,0);
  172.          
  173.          snr=1;sng=0;sny=1;                                                           //南北綠,東西紅
  174.          ewr=0;ewg=1;ewy=1;
  175.          os_wait(K_IVL,150,0);
  176.          
  177.          snr=1;sng=1;sny=0;                                                           //南北黃,東西紅
  178.          ewr=0;ewg=1;ewy=1;
  179.          os_wait(K_IVL,10,0);
  180.          snr=1;sng=1;sny=1;                                                           //南北黃,東西紅
  181.          ewr=0;ewg=1;ewy=1;
  182.          os_wait(K_IVL,10,0);
  183.          snr=1;sng=1;sny=0;                                                           //南北黃,東西紅
  184.          ewr=0;ewg=1;ewy=1;
  185.          os_wait(K_IVL,10,0);
  186.          snr=1;sng=1;sny=1;                                                           //南北黃,東西紅
  187.          ewr=0;ewg=1;ewy=1;
  188.          os_wait(K_IVL,10,0);

  189.    }
  190.         os_wait(K_IVL,100,0);   
  191. }
復制代碼

所有資料51hei提供下載:
紅綠燈.rar (45.99 KB, 下載次數: 69)



回復

使用道具 舉報

ID:430008 發(fā)表于 2018-11-20 19:48 | 顯示全部樓層
感謝樓主
回復

使用道具 舉報

ID:449527 發(fā)表于 2018-12-19 08:54 | 顯示全部樓層
感謝感謝
回復

使用道具 舉報

ID:528461 發(fā)表于 2019-5-6 14:48 | 顯示全部樓層
為什么數碼管不顯示數字
回復

使用道具 舉報

ID:542332 發(fā)表于 2019-5-19 20:23 | 顯示全部樓層
感謝樓主
回復

使用道具 舉報

ID:542727 發(fā)表于 2019-5-20 12:54 來自觸屏版 | 顯示全部樓層
感謝樓主
回復

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網

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