欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

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

使用道具 舉報

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

使用道具 舉報

無效樓層,該帖已經(jīng)被刪除
地板
ID:161164 發(fā)表于 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. }
復制代碼
回復

使用道具 舉報

5#
ID:316468 發(fā)表于 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;  
                  }
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表