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

標(biāo)題: 簡單的單片機(jī)按鍵控制流水燈 [打印本頁]

作者: Danny1710    時間: 2018-4-24 22:27
標(biāo)題: 簡單的單片機(jī)按鍵控制流水燈
按鍵控制流水燈仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)

功能:
1. 用8盞LED小燈,實(shí)現(xiàn)至少4種彩燈燈光效果(不含全部點(diǎn)亮,全部熄滅);
2. 可以用輸入按鈕在幾種燈光效果間切換;
3. 可以通過按鈕暫停彩燈效果,使小燈全亮,再次按下相同按鈕后繼續(xù)之前的效果;
4. 增加自動在幾種效果間切換的功能,并設(shè)置一個按鈕可以在自動模式和手動模式間切換;
5. 使用定時中斷延時
(由于仿真圖略大,不能上傳)
源代碼:
  1. #include<reg51.h>   
  2. #include<intrins.h>
  3. #define  GPIO_LED P0 //led使用P0口
  4. #define  GPIO_KEY P1 //獨(dú)立鍵盤用P1口
  5. sbitK1=P1^0;
  6. sbitK2=P1^1;
  7. sbitK3=P1^2;
  8. sbitK4=P1^3;
  9. sbitK5=P1^4;
  10. char  KeyNum;
  11. unsignedchar  state;
  12. unsignedchar  change_state;
  13. voidDelay10ms(unsigned int c);   //延時10ms
  14. voidLED1();
  15. voidLED2();
  16. voidLED3();
  17. voidLED4();
  18. voidauto_LED();
  19. voidPause();
  20. unsignedchar Key_Scan();            //掃描鍵盤//
  21. voidmain(void)
  22. {  
  23.    IT0=1;
  24.    IT1=1;
  25.    EX1=1;
  26.    EX0=1;
  27.    EA=1;
  28.     auto_LED();
  29.   while(1)
  30.   {
  31.       if(1 == state)
  32.      {
  33.         LED1();
  34.         change_state = 0;
  35.      }
  36.      else if(2 == state)
  37.      {
  38.         LED2();
  39.         change_state = 0;
  40.      }
  41.      else if(3 == state)
  42.      {
  43.         LED3();
  44.         change_state = 0;
  45.      }
  46.      else if(4 == state)
  47.      {
  48.         LED4();
  49.         change_state = 0;
  50.      }
  51. }  
  52. }         
  53. voidChange() interrupt 0
  54. {     
  55.    KeyNum=Key_Scan();
  56.    switch(KeyNum)
  57.    {
  58.         case(0xFe) :    //返回按鍵K1的數(shù)據(jù)
  59.         state=1;
  60.         change_state=1;
  61.         break;
  62.         case(0xFD) :    //返回按鍵K2的數(shù)據(jù)
  63.         state=2;
  64.         change_state=2;
  65.         break;
  66.         case(0xFB) :    //返回按鍵K3的數(shù)據(jù)
  67.         state=3;
  68.         change_state=3;
  69.         break;
  70.         case(0xF7) :    //返回按鍵K4的數(shù)據(jù)
  71.         state=4;
  72.         change_state=4;
  73.         break;
  74.         default:
  75.         break;
  76.     }
  77. }
  78. voidPause() interrupt 1
  79. {
  80.      auto_LED();
  81. }
  82. voidDelay10ms(unsigned int c)   //誤差 0us
  83. {
  84.   unsigned char a, b;
  85.    for (;c>0;c--)
  86.    {for (b=30;b>0;b--)
  87.      {
  88.         for (a=100;a>0;a--);         
  89.    }      
  90.      
  91. }
  92. unsignedchar Key_Scan()
  93. {
  94.    unsigned char keyValue = 0 , i; //保存鍵值
  95. //--檢測按鍵1--//
  96.    if (GPIO_KEY != 0xFF)    /檢測按鍵K1是否按下
  97.    {
  98.      Delay10ms(1); //消除抖動
  99.      if (GPIO_KEY != 0xFF) //再次檢測按鍵
  100.      {
  101.         keyValue = GPIO_KEY;
  102.         i = 0;
  103.        while ((i<50) && (GPIO_KEY !=0xFF))  //檢測按鍵是否松開
  104.         {
  105.            Delay10ms(1);
  106.            i++;
  107.         }
  108.      }
  109.    }
  110.    return keyValue;   //將讀取到鍵值的值返回
  111. }
  112. voidLED1()
  113. {
  114.     unsigned char i;
  115.    GPIO_LED = 0x01;
  116.    for (i=0; i<16; i++)
  117.    {
  118.      GPIO_LED = _crol_(GPIO_LED, 1);
  119.       Delay10ms(100);
  120.    if(change_state==2)
  121.         break;
  122.    if(change_state==3)   
  123.         break;
  124.    if(change_state==4)      
  125.         break;
  126.    if(change_state==5)      
  127.         break;
  128.    }
  129. }
  130. voidLED2()
  131. {
  132. unsignedchar i;
  133.    GPIO_LED = 0x80;
  134.    for (i=0; i<16; i++)
  135.    {
  136.      GPIO_LED = _cror_(GPIO_LED, 1);
  137.      Delay10ms(100);
  138.    if(change_state==1)
  139.         break;
  140.    if(change_state==3)   
  141.         break;
  142.    if(change_state==4)      
  143.         break;
  144.    if(change_state==5)      
  145.         break;
  146.    }
  147. }
  148. voidLED3()
  149. {
  150. unsigned char i;
  151.    GPIO_LED = 0x81;
  152.    for (i=0; i<8; i++)
  153.    {
  154.      GPIO_LED = _cror_(GPIO_LED, 4);
  155.      Delay10ms(100);
  156.    if(change_state==1)
  157.         break;
  158.    if(change_state==2)   
  159.         break;
  160.    if(change_state==4)      
  161.         break;
  162.    if(change_state==5)      
  163.         break;
  164.    }
  165. }
  166. voidLED4()
  167. {
  168.    unsigned char i;
  169.    GPIO_LED = 0x18;
  170.    for (i=0; i<8; i++)
  171.    {
  172.      GPIO_LED = _cror_(GPIO_LED, 3);
  173.      Delay10ms(100);
  174.    if(change_state==1)
  175.         break;
  176.    if(change_state==2)   
  177.         break;
  178.    if(change_state==3)      
  179.         break;
  180.    if(change_state==5)      
  181.         break;
  182.    }
  183. }
  184. void auto_LED()  
  185. {  
  186.     LED1();
  187.    Delay10ms(100);
  188.    LED2();
  189.    Delay10ms(100);
  190.    LED3();
  191.    Delay10ms(100);
  192.    LED4();
  193.    Delay10ms(100);  
  194. }
復(fù)制代碼






作者: 發(fā)了個哥    時間: 2018-11-13 13:29
請問附件在哪啊?
作者: bhjyqjs    時間: 2018-11-14 08:58
程序?qū)懙暮芎茫?br /> 個人認(rèn)為,類似
if(1 == state)
     {
        LED1();
        change_state = 0;
     }
     else if(2 == state)
改成switch語句,更加一目了然。
作者: 產(chǎn)檢簿    時間: 2018-12-2 21:22
請問附件在哪啊?
作者: 玖吟璽    時間: 2019-4-22 21:12
為什么沒有晶振
作者: MisterM    時間: 2019-10-14 21:58
樓主你這個是自動的 跟按鍵沒關(guān)系啊auto_LED就直接運(yùn)行了啊
作者: flynn13    時間: 2020-6-16 20:52
87行的大括號少了




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 国产精品久久久久久久毛片 | 国产成人免费视频 | 成人影院在线视频 | 精品欧美一区二区精品久久 | 美国十次成人欧美色导视频 | 91视频播放 | 亚洲第一成人av | 久久久久成人精品免费播放动漫 | 欧美a区| 午夜激情一区 | 国产精品精品 | 在线视频中文字幕 | 91久久久久久久久久久久久 | 欧美一区二区三区久久精品 | 久久久久久久久久久福利观看 | 精品亚洲一区二区 | 日本 欧美 国产 | 2018国产大陆天天弄 | 99在线免费观看视频 | 国产精品欧美一区二区三区 | 国产精品国产三级国产aⅴ浪潮 | 亚洲欧美日韩精品久久亚洲区 | 成人免费xxxxx在线视频 | 在线观看国产h | 狠狠做六月爱婷婷综合aⅴ 国产精品视频网 | 国产精品久久久久久久久久免费 | 国产一区二区三区四区在线观看 | 欧美日韩视频网站 | 精品视频www| 久久美女网 | 欧美日韩一区不卡 | 成人一区二区三区在线观看 | 亚洲一区二区视频 | 日韩亚洲视频 | 99精品视频免费在线观看 | 国产精品片aa在线观看 | 国产在线精品一区二区三区 | 野狼在线社区2017入口 | 国产999精品久久久 精品三级在线观看 | 亚洲一区在线免费观看 | 成人网址在线观看 |