找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1000|回复: 3
收起左侧

小白求助51单片机切换流水灯模式该怎么设计

[复制链接]
ID:1003831 发表于 2022-1-29 20:55 | 显示全部楼层 |阅读模式
问题是不会写按键切换模式的代码
比如说按一下是闪烁模式
再按一下是呼吸灯模式
再按一下是跑马灯模式
一个按键控制八个led灯
回复

使用道具 举报

ID:941788 发表于 2022-1-30 07:53 | 显示全部楼层
用一串if,按键按下进入下一个循环就像这样
if(按键按下&&计数变量为x)
{
     函数体;
    if(按键按下)
     {
       计数变量增加1;//进入到下一个函数中
      }
}
不知道我说的你能否明白
回复

使用道具 举报

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: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;  
                  }
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表