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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

求助單片機交通燈,數碼管的數值如何跟交通燈連接起來呢

[復制鏈接]
回帖獎勵 5 黑幣 回復本帖可獲得 5 黑幣獎勵! 每人限 1 次(中獎概率 20%)
跳轉到指定樓層
樓主
看了好多別人的作品可還是搞不清楚要怎么把這兩個聯系起來

單片機源程序如下:
  1. #include <reg51.h>                                                                                                               
  2. #define uchar unsigned char
  3. #define  uint unsigned int
  4. sbit RED_A=P0^0;                         //定義東西方向紅燈
  5. sbit YELLOW_A=P0^1;                         //定義東西方向黃燈
  6. sbit GREEN_A=P0^2;                         //定義東西方向綠燈
  7. sbit RED_B=P0^3;                         //定義南北方向紅燈
  8. sbit YELLOW_B=P0^4;                         //定義南北方向黃燈
  9. sbit GREEN_B=P0^5;                         //定義南北方向綠燈
  10. sbit add=P3^3;                                 //定義東西綠燈時間加按鍵
  11. sbit sub=P3^4;                                 //定義東西綠燈時間減按鍵
  12. sbit K1=P3^2;                                 //定義設定時間按鍵
  13. sbit add2=P3^5;                             //定義調南北綠燈時間加按鍵
  14. sbit sub2=P3^6;                             //定義調南北綠燈時間減按鍵
  15. int time_1=2000,time_2=2000; //定義東西和南北綠燈亮時可調變量并賦予初值2S
  16. uchar Flash_Count=0;                 //黃燈閃爍次數初始為0
  17. Operation_Type=1;                         //從模式1開始
  18. void DelayMS(uint x);                 //延時子函數聲明
  19. void Traffic_lignt();                 //交通燈循環亮子程序聲明
  20. /*主函數*/
  21. void main()
  22. {
  23.         P3=0xff;                                 //預讀先寫1
  24.         EA=1;                                         //打開總中斷
  25.         EX0=1;                                         //打開外部中斷0
  26.         IT0=0;                                         //觸發方式為低電平觸發
  27.   
  28.                 while(1)
  29.                 {
  30.                    Traffic_lignt();        
  31.                 }
  32. }
  33. /*延時子程序*/
  34. void DelayMS(uint x)                  //延時ms
  35. {
  36.     uchar t;
  37.     while(x--)
  38.     {
  39.         for(t=120;t>0;t--);
  40.     }
  41. }
  42. /*交通燈循環亮程序**/
  43. void Traffic_lignt()                 
  44. {
  45.          switch(Operation_Type)
  46.         {
  47.                  case 1:
  48.                         RED_A=1;YELLOW_A=1;GREEN_A=0;                 //東西方向紅燈和黃燈滅,綠燈亮
  49.                         RED_B=0;YELLOW_B=1;GREEN_B=1;                 //南北方向綠燈和黃燈滅,紅燈亮
  50.                         DelayMS(time_1);                                         //東西方向綠燈延時時間
  51.                         while(K1==0);                                                 //產生中斷時可靠停止
  52.                         Operation_Type = 2;                                         //轉到模式2
  53.                         break;
  54.                 case 2:
  55.                         GREEN_A=1;                                                         //東西方向綠燈滅
  56.                         DelayMS(200);                                                 //黃燈延時時間
  57.                         while(K1==0);                                                 //產生中斷時可靠停止
  58.                         YELLOW_A=~YELLOW_A;                                         //黃燈閃爍
  59.                         if(++Flash_Count !=10)                                  //閃爍10次(亮5次滅5次)
  60.                                 return;
  61.                         Flash_Count=0;                                                 //黃燈閃爍次數清零
  62.                         Operation_Type = 3;                                         //轉到模式3
  63.                         break;
  64.                 case 3:
  65.                         RED_A=0;YELLOW_A=1;GREEN_A=1;                 //東西方向僅紅燈亮
  66.                         RED_B=1;YELLOW_B=1;GREEN_B=0;                 //南北方向僅綠燈亮
  67.                         DelayMS(time_2);                                     //南北方向綠燈延時時間
  68.                         while(K1==0);                                                 //產生中斷時可靠停止
  69.                         Operation_Type = 4;                                         //轉到模式4
  70.                         break;        
  71.                 case 4:
  72.                         GREEN_B=1;                                                         //南北方向綠燈滅
  73.                         DelayMS(200);                                                 //黃燈延時時間
  74.                         while(K1==0);                                                 //產生中斷時可靠停止
  75.                         YELLOW_B=~YELLOW_B;                                         //黃燈閃爍
  76.                         if(++Flash_Count !=10)                                  //閃爍10次(亮5次滅5次)
  77.                                 return;
  78.                         Flash_Count=0;                                                 //黃燈閃爍次數清零
  79.                         Operation_Type = 1;                                         //轉到模式1
  80.                         break;        
  81.         }
  82. }
  83. /*外部中斷0子程序*/
  84. void exter_0() interrupt 0
  85. {
  86.         while(!(add&&sub&&add2&&sub2))                        //掃描是否有按鍵按下
  87.                 {
  88.                 while(add==0)                                    //如果第一個按鍵按下東西方向綠燈延續時間加1秒
  89.                                         {
  90.                                             DelayMS(10);
  91.                                                 while(add==0);
  92.                                                 time_1=time_1+1000;
  93.                                                 if(time_1>60000)   //當時間超過60秒將時間置為60秒
  94.                                                 {time_1=60000;}
  95.                                         }
  96.                         while(sub==0)                                   //如果第二個按鍵按下東西方向綠燈延續時間減1秒
  97.                                         {        
  98.                                                 DelayMS(10);
  99.                                                 while(sub==0);
  100.                                                 time_1=time_1-1000;
  101.                                                 if(time_1<=0)           //當時間減到小于或等于0時將時間置為1秒
  102.                                                 {time_1=1000;}
  103.                                         }
  104.                     while(add2==0)                                   //如果第三個按鍵按下南北方向綠燈延續時間加1秒
  105.                                         {        
  106.                                                 DelayMS(10);
  107.                                                 while(add2==0);
  108.                                                 time_2=time_2+1000;
  109.                                                 if(time_2>60000)   //當時間超過60秒將時間置為60秒
  110.                                                 {time_2=60000;}
  111.                                         }
  112.                         while(sub2==0)                                   //如果第四個按鍵按下南北方向綠燈延續時間減1秒
  113.                                         {                                          
  114.                                                 DelayMS(10);
  115.                                                 while(sub2==0);
  116.                                                 time_2=time_2-1000;
  117.                                                 if(time_2<=0)           //當時間減到小于或等于0時將時間置為1秒
  118.                                                 {time_2=1000;}
  119.                                         }
  120.            }
  121. }
復制代碼


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

使用道具 舉報

沙發
ID:863590 發表于 2021-12-11 21:04 | 只看該作者
就是不知道display函數要怎么設計呢,怎么才能跟紅綠燈的倒計時聯系起來,
回復

使用道具 舉報

板凳
ID:863590 發表于 2021-12-11 21:04 | 只看該作者
有大佬指導一下嗎
回復

使用道具 舉報

地板
ID:332444 發表于 2021-12-12 15:02 | 只看該作者
回復

使用道具 舉報

5#
ID:332444 發表于 2021-12-12 15:03 | 只看該作者
回復

使用道具 舉報

6#
ID:89515 發表于 2021-12-12 15:29 | 只看該作者
沒有寫過這個,但是我想你的紅綠燈總得有個參考吧!用定時器把倒計時程序寫出來做時間參考,同時送顯。計時參數由相應燈的時間規則決定,各色的燈做個標志以參數形式寫入時間函數,同時控制定時器的開關。這個難點就在于規則不在顯示上啊。我從新看了你的程序,時間相關程序用軟件模擬雖然不嚴謹但沒問題,可是時間變量直接耦合根本沒法顯示了,時間設置部分可以解決,關鍵的倒計時部分沒戲了。個人認為必須得從新寫。
display(燈標志,延時時間)
{
         燈標志=?;//確定是那個燈的延時;
         寫入定時器延時參數;
         參數送顯示;//數碼管顯示函數
         開啟定時器;
         注意時間參數清零時關閉定時器,為下一次定時做準備。
         哪個地方需要延時就放在那個地方。
         如果確實需要更改時間參數,可將其設定為全局變量,再用按鍵去控制就行了。
         
         
}

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

7#
ID:863590 發表于 2021-12-12 23:44 | 只看該作者
mengzhixinheng 發表于 2021-12-12 15:29
沒有寫過這個,但是我想你的紅綠燈總得有個參考吧!用定時器把倒計時程序寫出來做時間參考,同時送顯。計時 ...

謝謝你,我感覺我好像能理解到你的意思,我去試試試試
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美一区二区三区在线观看 | 无码日韩精品一区二区免费 | 亚洲激情网站 | 欧美黄a | 日日日视频 | 中文字幕在线观看 | 欧美久久天堂 | 可以免费看的毛片 | 欧美日韩在线一区二区 | 久久免费观看视频 | 欧美国产视频 | 久久99精品久久久久 | 国产精品国产精品国产专区不片 | 久久国内精品 | 精品国产一区二区三区日日嗨 | 99精品热视频| 亚洲国产精品福利 | 日韩视频在线一区 | 精品一区二区电影 | 成人在线免费网站 | 国产精品久久久久久久久久久久午夜片 | 久久手机视频 | 久久精品97 | 日日操夜夜操天天操 | 国产精品久久久久久久久久久久久 | 国产精品欧美一区二区三区不卡 | 日韩av一区二区在线观看 | 欧美亚洲一区二区三区 | 精品日韩| 久久久国产一区二区三区 | 久久久久久国产精品久久 | 色婷综合网 | 男女羞羞免费网站 | 日韩在线观看一区二区三区 | 国产精品毛片 | 激情一区二区三区 | 国产一二三区免费视频 | 亚洲综合在线视频 | 亚洲大片一区 | 国产精品三级久久久久久电影 | 亚洲九色|