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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

小白求助51單片機切換流水燈模式該怎么設計

[復制鏈接]
跳轉到指定樓層
#
ID:1003831 發表于 2022-1-29 20:55 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
問題是不會寫按鍵切換模式的代碼
比如說按一下是閃爍模式
再按一下是呼吸燈模式
再按一下是跑馬燈模式
一個按鍵控制八個led燈
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

板凳
ID:316468 發表于 2022-1-31 01:19 | 只看該作者
用一串if語句可以,用一個switch也可以
if(ann==0)               //宏定義把實際端口映射到變量ann上, 如果有按鈕按下
{delay(10);            //延時消抖
if(ann==0)
{
  i++;                 //i變量加1,為后面選擇做準備
   }  
  }
  
if(i>2)
   {i=0;}   //給變量i設定一個邊界。
switch (i)
                {
                        case 0:閃爍模式程序;break;
                        case 1:呼吸燈模式;break;
                        case 2:跑馬燈模式;break;
                        default:break;  
                  }
回復

使用道具 舉報

沙發
ID:161164 發表于 2022-1-30 15:39 | 只看該作者
給個栗子
  1. #include <reg52.h>

  2. typedef         unsigned char        u8;  //0 to 255
  3. typedef         unsigned int        u16;  //0 to 65535
  4. typedef         unsigned long        u32;  //0 to 4294967295

  5. sbit KEY_32 = P3^2;
  6. u8 mode = 0;
  7. u16 TMR_XX_PRE = 6000;
  8. u8 index = 0;
  9. void key_Proc()
  10. {
  11.         static u16 Delay_XD=0;
  12.         if(!KEY_32)
  13.         {
  14.                 if(Delay_XD<0xFFFF)Delay_XD++;
  15.                 if(Delay_XD==250)
  16.                 {
  17.                                 mode = ++mode %4;               
  18.                                 index = 0;
  19.                                 P1 = 0xFF;                       
  20.                 }
  21.         }
  22.         else
  23.                 Delay_XD = 0;
  24. }
  25. void Led_Flow()
  26. {
  27.         static u16 TMR_XX_ACC;
  28.         if(++TMR_XX_ACC >= TMR_XX_PRE)
  29.         {TMR_XX_ACC=0;
  30.                 switch (mode)
  31.                 {
  32.                         case 0:
  33.                                 P1 = ~(0x01 << index);
  34.                                 index = ++index %8;
  35.                                 break;
  36.                         case 1:
  37.                                 P1 = ~(0x80 >> index);
  38.                                 index = ++index %8;
  39.                                 break;
  40.                         case 2:
  41.                                 if(index < 8)
  42.                                         P1 &= ~(0x01 <<index);
  43.                                 else
  44.                                         P1 |= (0x01 <<(index-8));
  45.                                 if(++index >15)
  46.                                 {
  47.                                         index = 0;
  48.                                 }
  49.                                 break;
  50.                 }
  51.         }
  52. }
  53. void main()
  54. {
  55.     while (1)
  56.     {
  57.                         key_Proc();
  58.                         Led_Flow();
  59.     }
  60. }
復制代碼
回復

使用道具 舉報

樓主
ID:941788 發表于 2022-1-30 07:53 | 只看該作者
用一串if,按鍵按下進入下一個循環就像這樣
if(按鍵按下&&計數變量為x)
{
     函數體;
    if(按鍵按下)
     {
       計數變量增加1;//進入到下一個函數中
      }
}
不知道我說的你能否明白
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品免费观看 | 久久久久久久综合 | 成人精品啪啪欧美成 | 国产精品久久久亚洲 | 91在线视频观看免费 | 免费黄色成人 | 中国三级黄色录像 | 九色视频网站 | 免费午夜视频 | 爱爱免费视频 | av免费看在线 | 国产精品3区 | 亚洲精品www久久久久久广东 | 欧美精品片| 亚洲午夜网 | 中文字幕日本一区二区 | 性福视频在线观看 | 一区二区三区免费 | 日日操日日舔 | 亚洲精品一 | 午夜精品91| 小h片免费观看久久久久 | 亚洲国产欧美日韩 | 四虎在线播放 | 成人免费在线视频 | 午夜在线小视频 | 欧美成人自拍 | 久久99深爱久久99精品 | 国产在线不卡 | 日韩在线视频一区二区三区 | 亚洲精彩视频在线观看 | 一级黄在线观看 | 国产精品99久久久久久动医院 | 欧美成人性生活 | 精品一区二区久久久久久久网站 | 欧美日本韩国一区二区三区 | 在线日韩欧美 | 国产在线视频一区二区 | 97人人超碰 | 欧美日韩视频网站 | 自拍 亚洲 欧美 老师 丝袜 |