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

標題: 求助單片機交通燈,數碼管的數值如何跟交通燈連接起來呢 [打印本頁]

作者: 十三境阿良    時間: 2021-12-11 20:59
標題: 求助單片機交通燈,數碼管的數值如何跟交通燈連接起來呢
看了好多別人的作品可還是搞不清楚要怎么把這兩個聯系起來

單片機源程序如下:
  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. }
復制代碼



作者: 十三境阿良    時間: 2021-12-11 21:04
就是不知道display函數要怎么設計呢,怎么才能跟紅綠燈的倒計時聯系起來,
作者: 十三境阿良    時間: 2021-12-11 21:04
有大佬指導一下嗎
作者: xianfajushi    時間: 2021-12-12 15:02
https://blog.csdn.net/xianfajushi/article/details/89946765

作者: xianfajushi    時間: 2021-12-12 15:03
https://blog.csdn.net/xianfajushi/article/details/80553964

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

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




歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 欧美成人小视频 | 在线观看av的网站 | 日韩精品一区二区三区中文在线 | 久久中文网 | 手机av免费| 亚洲精品小视频 | 九九国产 | 免费福利在线观看 | 在线亚洲天堂 | 欧美a一级 | 久久爱影视i | 国产欧美日韩在线视频 | www.av在线 | 成人免费视频一区二区 | 特级丰满少妇一级aaaa爱毛片 | 3d动漫精品h区xxxxx区 | 高清视频一区二区 | 中国黄色1级片 | av免费看网站 | 久久久久久久久国产精品 | 69av在线播放| 日本精品视频 | 美女黄色在线观看 | 在线一区二区三区四区 | 五月天综合网 | 色婷婷精品 | 欧美一二区 | 欧美精品久久久久久久多人混战 | 日日夜夜精品免费 | 亚洲成人一区二区 | 午夜天堂网| 91黄色免费 | 伊人国产女 | 黄色小视频免费 | 91久久久久久久久久 | 丰满少妇在线观看网站 | 日韩免费一区二区三区 | 国产精品国产三级国产 | 成人国产精品久久久网站 | 久久免费观看视频 | 中文字幕超清在线观看 |