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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

我的單片機交通燈實驗,包括源碼,原理圖等資料

[復制鏈接]
跳轉到指定樓層
樓主
   本實驗主要利用了定時器和中斷的知識,定時器定時,顯示不同的燈。通過中斷控制顯示時長,閃爍。中斷處理按鍵,可靠性更高。
   定時器T0利用的方式1,方式1是一個16位的定時器,中斷的次數會相對較低。因為交通燈是秒級的控制,不需要很高的中斷頻率,如果用方式2的8位自動重裝方式,每秒中斷數千次,你仍然需要再次分頻以獲得秒或十分之一秒的信號,實在是沒有必要。

圖3.2共有4個按鍵K1、K2、K3、K4,分別連接到單片機P2.0、P2.1、P2.2、P2.3引腳,按鍵后對應引腳為低電平,通過4個二極管D17、D18、D19、D20連接到P3.2(外部中斷0),這是二極管構成的相與電路,即任意按一個鍵能在P3.2上產生一個低電平或下降沿,作為中斷觸發信號。
五、軟件設計思想
1、定時思想。
采用定時器T0或T1的方式1定時50ms,每50ms中斷進行計數,計數10次即0.5s,計數20次即1s,對秒計數實現所需要的定時時間。
2、亮燈控制思想。
單片機控制燈引腳與燈對應如下,0點亮。
一共有四種狀態S0、S1、S2、S3,
a、南北通行S0狀態:   

設置一個秒計數單元SEC每秒+1,設置兩個控制值變量a,b。
首先令SEC=0,a=0xfc,b=0xf3,處于S0狀態;
SEC==25,a=0xfd,b=0x75,處于S1狀態;
SEC==30,a=0xf7,b=0x9e,處于S2狀態;
SEC==55,a=0xfb,b=0xae,處于S3狀態;
SEC==60,SEC=0,a=0xfc,b=0xf3,處于S0狀態;
P0=a,P1=b。
設置一個秒計數單元SEC每秒+1,設置兩個控制值變量a,b。
首先令SEC=0,a=0xf7,b=0x9e,處于S0狀態;
SEC==25,a=0xfb,b=0xae,處于S1狀態;
SEC==30,a=0xfc,b=0xf3,處于S2狀態;
SEC==55,a=0xfd,b=0x75,處于S3狀態;
SEC==60,SEC=0,a=0xf7,b=0x9e,處于S0狀態;
P0=a,P1=b。

3、交通燈鍵控
按鍵后即進入外部中斷0,在外部中斷0中斷程序中判斷:若是按K1鍵,控制南北通行狀態,并將定時器T0關閉,即可保持南北通行狀態;若是按K2鍵,控制東西通行狀態,并將定時器T0中斷關閉,即可保持東西通行狀態;若是按K3鍵,開啟定時器T0中斷,恢復正常交通燈。
4、閃爍控制
在需要閃爍時,0.5s按正常顯示,0.5s全滅,即是閃爍效果。實現方法是:當=0.5s的時刻,并且在南北通行的最后5s(19<sec<25)或在東西通行的最后5s(49<sec<55),滅綠燈: P0=a|0xf9,P1==b|0x24,當=1s的時刻,按正常顯示。

單片機源程序如下:
  1. #include "reg51.h"
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. uint second1=0;
  5. uint i=0;
  6. sbit key1=P2^0;
  7. sbit key2=P2^1;
  8. sbit key3=P2^2;

  9. uchar keyvalue=0;  // 記錄按鍵值
  10. uchar second=0;     //記錄時間

  11. void NSgreen_WEred() //南北綠燈、東西紅燈
  12. {
  13.    P0=0xfc;P1=0xf3;
  14. }

  15. void NSyellow_WEred() //南北黃燈、東西紅燈
  16. {
  17.    P0=0xfd;P1=0x75;
  18. }

  19. void WEgreen_NSred() //東西綠燈、南北紅燈  
  20. {
  21.    P0=0xf7;P1=0x9e;
  22. }

  23. void WEyellow_NSred()//東西黃燈、南北紅燈
  24. {
  25.    P0=0xfb;P1=0xae;
  26. }

  27. void Timer0Init()
  28. {
  29.    TMOD|=0x01;
  30.    TH0=(65536-50000)/256;  //0x3C;50ms
  31.    TL0=(65536-50000)%256; //0xB0;
  32.    EA=0;
  33.    ET0=1;
  34.    TR0=1;
  35. }

  36. void normal_traffic()
  37. {
  38. if(second==0)
  39. {
  40.     P0=0xfc;P1=0xf3;}//南北綠燈、東西紅燈
  41.   if( second>=5&&second<10)
  42.      {                     
  43.       if( second1%2==0)//定時0.5s
  44.           {P0=0xfc;P1=0xf3;}
  45.       else
  46.                             {P0=0xfd;P1=0xf7;}//綠燈閃爍
  47.      }
  48.   if( second==10)//南北黃燈、東西紅燈
  49.         {P0=0xfd;P1=0x75;}
  50.   if( second==15)
  51.         {P0=0xf7;P1=0x9e;}//東西綠燈、南北紅燈
  52.   if( second>=21&& second<25)
  53.      {
  54.       if( second1%2==0)//定時0.5s
  55.                         {P0=0xf7;P1=0x9e;}
  56.      else
  57.                  {P0=0xff;P1=0xbe;}//綠燈閃爍
  58.      }
  59.   if( second==25)
  60.          {P0=0xfb;P1=0xae;}//東西黃燈、南北紅燈
  61.         if(second==30)
  62.                 second=0;
  63. }

  64. void display()
  65. {
  66.    if(key1==0)
  67.       {
  68.         keyvalue=1;
  69.       }
  70.     if(key2==0)
  71.       {
  72.         keyvalue=2;
  73.       }
  74.     if(key3==0)
  75.       {
  76.         keyvalue=0;
  77.       }
  78. }

  79. void main()
  80. {
  81.          P0=0xff;
  82.          P1=0xff;
  83.    Timer0Init();
  84.    while(1)
  85.    {
  86.      display();
  87.                  if(keyvalue==1)
  88.                  {
  89.                          NSgreen_WEred();
  90.                  }
  91.                  if(keyvalue==2)
  92.                  {
  93.                          WEgreen_NSred();
  94.                  }
  95.                  if(keyvalue==0)
  96.                  {
  97.                          EA=1;
  98.                          normal_traffic();
  99.                  }
  100.          }
  101. }

  102. void Timer0() interrupt 1
  103. {
  104.     TH0=(65536-50000)/256;  //0x3C;50ms
  105.     TL0=(65536-50000)%256; //0xB0;
  106.        i++;
  107.         if(i==10)
  108.         {
  109.                 second1++;
  110.         }
  111.     if(i==20)
  112.       {
  113.         second++;
  114.                                 i=0;
  115.       }
  116. }
復制代碼


實驗途中要注意,每個按鍵對應的LED燈,在與開發板連接時需要保證端口正確。實驗原理圖等,在文檔“實驗二”內。

實驗二.docx

46.36 KB, 下載次數: 16, 下載積分: 黑幣 -5

交通燈實驗源碼.rar

20.92 KB, 下載次數: 16, 下載積分: 黑幣 -5

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

使用道具 舉報

無效樓層,該帖已經被刪除
無效樓層,該帖已經被刪除
地板
ID:90852 發表于 2020-9-23 13:39 | 只看該作者
這個資源還真是不錯的
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

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