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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2429|回復(fù): 6
收起左側(cè)

求助單片機(jī)交通燈,數(shù)碼管的數(shù)值如何跟交通燈連接起來呢

[復(fù)制鏈接]
回帖獎勵 5 黑幣 回復(fù)本帖可獲得 5 黑幣獎勵! 每人限 1 次(中獎概率 20%)
ID:863590 發(fā)表于 2021-12-11 20:59 | 顯示全部樓層 |閱讀模式
看了好多別人的作品可還是搞不清楚要怎么把這兩個聯(lián)系起來
YI]S}V]DRGZPSVY~E_`8{$L.png
單片機(jī)源程序如下:
  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;                                 //定義設(shè)定時間按鍵
  13. sbit add2=P3^5;                             //定義調(diào)南北綠燈時間加按鍵
  14. sbit sub2=P3^6;                             //定義調(diào)南北綠燈時間減按鍵
  15. int time_1=2000,time_2=2000; //定義東西和南北綠燈亮?xí)r可調(diào)變量并賦予初值2S
  16. uchar Flash_Count=0;                 //黃燈閃爍次數(shù)初始為0
  17. Operation_Type=1;                         //從模式1開始
  18. void DelayMS(uint x);                 //延時子函數(shù)聲明
  19. void Traffic_lignt();                 //交通燈循環(huán)亮子程序聲明
  20. /*主函數(shù)*/
  21. void main()
  22. {
  23.         P3=0xff;                                 //預(yù)讀先寫1
  24.         EA=1;                                         //打開總中斷
  25.         EX0=1;                                         //打開外部中斷0
  26.         IT0=0;                                         //觸發(fā)方式為低電平觸發(fā)
  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. /*交通燈循環(huán)亮程序**/
  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);                                                 //產(chǎn)生中斷時可靠停止
  52.                         Operation_Type = 2;                                         //轉(zhuǎn)到模式2
  53.                         break;
  54.                 case 2:
  55.                         GREEN_A=1;                                                         //東西方向綠燈滅
  56.                         DelayMS(200);                                                 //黃燈延時時間
  57.                         while(K1==0);                                                 //產(chǎn)生中斷時可靠停止
  58.                         YELLOW_A=~YELLOW_A;                                         //黃燈閃爍
  59.                         if(++Flash_Count !=10)                                  //閃爍10次(亮5次滅5次)
  60.                                 return;
  61.                         Flash_Count=0;                                                 //黃燈閃爍次數(shù)清零
  62.                         Operation_Type = 3;                                         //轉(zhuǎn)到模式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);                                                 //產(chǎn)生中斷時可靠停止
  69.                         Operation_Type = 4;                                         //轉(zhuǎn)到模式4
  70.                         break;        
  71.                 case 4:
  72.                         GREEN_B=1;                                                         //南北方向綠燈滅
  73.                         DelayMS(200);                                                 //黃燈延時時間
  74.                         while(K1==0);                                                 //產(chǎn)生中斷時可靠停止
  75.                         YELLOW_B=~YELLOW_B;                                         //黃燈閃爍
  76.                         if(++Flash_Count !=10)                                  //閃爍10次(亮5次滅5次)
  77.                                 return;
  78.                         Flash_Count=0;                                                 //黃燈閃爍次數(shù)清零
  79.                         Operation_Type = 1;                                         //轉(zhuǎn)到模式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)                                    //如果第一個按鍵按下東西方向綠燈延續(xù)時間加1秒
  89.                                         {
  90.                                             DelayMS(10);
  91.                                                 while(add==0);
  92.                                                 time_1=time_1+1000;
  93.                                                 if(time_1>60000)   //當(dāng)時間超過60秒將時間置為60秒
  94.                                                 {time_1=60000;}
  95.                                         }
  96.                         while(sub==0)                                   //如果第二個按鍵按下東西方向綠燈延續(xù)時間減1秒
  97.                                         {        
  98.                                                 DelayMS(10);
  99.                                                 while(sub==0);
  100.                                                 time_1=time_1-1000;
  101.                                                 if(time_1<=0)           //當(dāng)時間減到小于或等于0時將時間置為1秒
  102.                                                 {time_1=1000;}
  103.                                         }
  104.                     while(add2==0)                                   //如果第三個按鍵按下南北方向綠燈延續(xù)時間加1秒
  105.                                         {        
  106.                                                 DelayMS(10);
  107.                                                 while(add2==0);
  108.                                                 time_2=time_2+1000;
  109.                                                 if(time_2>60000)   //當(dāng)時間超過60秒將時間置為60秒
  110.                                                 {time_2=60000;}
  111.                                         }
  112.                         while(sub2==0)                                   //如果第四個按鍵按下南北方向綠燈延續(xù)時間減1秒
  113.                                         {                                          
  114.                                                 DelayMS(10);
  115.                                                 while(sub2==0);
  116.                                                 time_2=time_2-1000;
  117.                                                 if(time_2<=0)           //當(dāng)時間減到小于或等于0時將時間置為1秒
  118.                                                 {time_2=1000;}
  119.                                         }
  120.            }
  121. }
復(fù)制代碼


回復(fù)

使用道具 舉報

ID:863590 發(fā)表于 2021-12-11 21:04 | 顯示全部樓層
就是不知道display函數(shù)要怎么設(shè)計呢,怎么才能跟紅綠燈的倒計時聯(lián)系起來,
回復(fù)

使用道具 舉報

ID:863590 發(fā)表于 2021-12-11 21:04 | 顯示全部樓層
有大佬指導(dǎo)一下嗎
回復(fù)

使用道具 舉報

無效樓層,該帖已經(jīng)被刪除
5#
無效樓層,該帖已經(jīng)被刪除
6#
無效樓層,該帖已經(jīng)被刪除
ID:332444 發(fā)表于 2021-12-12 15:02 | 顯示全部樓層
回復(fù)

使用道具 舉報

ID:332444 發(fā)表于 2021-12-12 15:03 | 顯示全部樓層
回復(fù)

使用道具 舉報

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

評分

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

查看全部評分

回復(fù)

使用道具 舉報

ID:863590 發(fā)表于 2021-12-12 23:44 | 顯示全部樓層
mengzhixinheng 發(fā)表于 2021-12-12 15:29
沒有寫過這個,但是我想你的紅綠燈總得有個參考吧!用定時器把倒計時程序?qū)懗鰜碜鰰r間參考,同時送顯。計時 ...

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

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品一区二区三区丝袜 | 色爱区综合 | 国产在线成人 | 国产综合在线视频 | 精品欧美乱码久久久久久1区2区 | 狠狠操狠狠 | 亚洲精品久久久一区二区三区 | 国产精品一区久久久 | 一区二区三区欧美大片 | 岛国av免费在线观看 | 一级特黄a大片 | 欧美成人性生活 | 午夜日韩视频 | 91在线免费观看 | 国产精品欧美一区喷水 | 国产精品久久久久久久久久久免费看 | 亚洲精品综合 | 午夜影院污 | 日韩在线精品 | 欧美成人精品在线 | 亚洲国产精品人人爽夜夜爽 | 久操国产 | 久久一区二区三区电影 | 天天曰夜夜 | 91精品久久久久 | 激情小视频| 古装人性做爰av网站 | 亚洲网站免费看 | 一区二区成人 | 久久精品亚洲精品国产欧美 | 青青久视频 | 一区二区三区视频 | 91精品久久久久久久久久入口 | 欧美日韩精品中文字幕 | 国产99久久精品一区二区永久免费 | 日韩精品免费 | av午夜激情 | 91在线看片 | 欧美精品一区二区三区四区五区 | 国产免费a视频 | 人人干人人超 |