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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 30244|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

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

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:315336 發(fā)表于 2018-4-24 22:27 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
按鍵控制流水燈仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)

功能:
1. 用8盞LED小燈,實現(xiàn)至少4種彩燈燈光效果(不含全部點亮,全部熄滅);
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 //獨立鍵盤用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ù)制代碼





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

使用道具 舉報

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

使用道具 舉報

板凳
ID:66287 發(fā)表于 2018-11-14 08:58 | 只看該作者
程序?qū)懙暮芎茫?br /> 個人認為,類似
if(1 == state)
     {
        LED1();
        change_state = 0;
     }
     else if(2 == state)
改成switch語句,更加一目了然。
回復(fù)

使用道具 舉報

地板
ID:437955 發(fā)表于 2018-12-2 21:22 | 只看該作者
請問附件在哪。
回復(fù)

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 精品久久久久久久久久久久久久 | 91视在线国内在线播放酒店 | 91视频进入| www.99热.com| 欧美一级视频免费看 | 日韩欧美成人精品 | 午夜精品一区二区三区三上悠亚 | 91在线视频国产 | 国产在线aa| 国产日韩av一区二区 | 国产一区二区三区在线 | 免费看欧美一级片 | 一级免费在线视频 | 自拍偷拍3p | 一级黄色片毛片 | 中文字幕亚洲一区 | 一区二区三区网站 | 黄色在线观看网站 | 欧美中文字幕在线观看 | 久久成人一区二区三区 | 超碰男人天堂 | 久久久久久蜜桃一区二区 | 久久久久久免费免费 | 精品一区欧美 | 亚洲资源在线 | 91精品国产91久久久久久吃药 | 欧美男人天堂 | 日韩精品一区在线 | 亚洲精品久久嫩草网站秘色 | 久久久综合久久 | 日韩久久网 | 亚洲精品亚洲人成人网 | 国产丝袜av | 亚洲精品一区二区 | 国产精品地址 | 欧美日韩精品一区 | 久久激情五月丁香伊人 | 羞羞视频在线观免费观看 | 亚洲444kkkk在线观看最新 | 久久精品青青大伊人av | 福利片在线 |