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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

簡單的單片機按鍵控制流水燈

  [復制鏈接]
跳轉到指定樓層
樓主
按鍵控制流水燈仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)

功能:
1. 用8盞LED小燈,實現至少4種彩燈燈光效果(不含全部點亮,全部熄滅);
2. 可以用輸入按鈕在幾種燈光效果間切換;
3. 可以通過按鈕暫停彩燈效果,使小燈全亮,再次按下相同按鈕后繼續之前的效果;
4. 增加自動在幾種效果間切換的功能,并設置一個按鈕可以在自動模式和手動模式間切換;
5. 使用定時中斷延時
(由于仿真圖略大,不能上傳)
源代碼:
  1. #include<reg51.h>   
  2. #include<intrins.h>
  3. #define  GPIO_LED P0 //led使用P0口
  4. #define  GPIO_KEY P1 //獨立鍵盤用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的數據
  59.         state=1;
  60.         change_state=1;
  61.         break;
  62.         case(0xFD) :    //返回按鍵K2的數據
  63.         state=2;
  64.         change_state=2;
  65.         break;
  66.         case(0xFB) :    //返回按鍵K3的數據
  67.         state=3;
  68.         change_state=3;
  69.         break;
  70.         case(0xF7) :    //返回按鍵K4的數據
  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. }
復制代碼





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

使用道具 舉報

沙發
ID:425642 發表于 2018-11-13 13:29 | 只看該作者
請問附件在哪啊?
回復

使用道具 舉報

板凳
ID:66287 發表于 2018-11-14 08:58 | 只看該作者
程序寫的很好!
個人認為,類似
if(1 == state)
     {
        LED1();
        change_state = 0;
     }
     else if(2 == state)
改成switch語句,更加一目了然。
回復

使用道具 舉報

地板
ID:437955 發表于 2018-12-2 21:22 | 只看該作者
請問附件在哪啊?
回復

使用道具 舉報

5#
ID:516266 發表于 2019-4-22 21:12 來自手機 | 只看該作者
為什么沒有晶振
回復

使用道具 舉報

6#
ID:418164 發表于 2019-10-14 21:58 來自手機 | 只看該作者
樓主你這個是自動的 跟按鍵沒關系啊auto_LED就直接運行了啊
回復

使用道具 舉報

7#
ID:781362 發表于 2020-6-16 20:52 | 只看該作者
87行的大括號少了
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 午夜爱爱网 | 青青草国产在线观看 | 日韩久久精品电影 | 国产探花在线精品一区二区 | 久久99网站 | www.毛片| 精品不卡 | 国产一二三区电影 | 日韩在线欧美 | 亚洲网址在线观看 | 欧美激情精品久久久久久变态 | 成人在线视频网址 | 亚洲欧美精 | 91久久久久久久久 | 国产精品视频一区二区三区 | 国产一区91精品张津瑜 | 国产精品毛片 | 91久久国产综合久久 | 综合久久综合久久 | 99热热| 国产免费一区二区三区 | 日本亚洲一区 | 国产精品久久久久久久久免费桃花 | 日本爱爱视频 | 欧美日韩一区二区在线 | 欧美色欧美亚洲另类七区 | www.操com| www97影院 | 蜜桃av一区二区三区 | 亚洲一区二区三区在线视频 | 国产黄色在线观看 | 欧美日韩综合精品 | 国产成人jvid在线播放 | 久久一区视频 | 日韩成人一区二区 | 韩日一区二区三区 | 亚洲精品日韩精品 | 91黄在线观看 | 国产美女在线观看 | 视频一区二区三区在线观看 | 五月天婷婷综合 |