标题:
小白求助51单片机切换流水灯模式该怎么设计
[打印本页]
作者:
小白1211
时间:
2022-1-29 20:55
标题:
小白求助51单片机切换流水灯模式该怎么设计
问题是不会写按键切换模式的代码
比如说按一下是闪烁模式
再按一下是呼吸灯模式
再按一下是跑马灯模式
一个按键控制八个led灯
作者:
豆豆王一
时间:
2022-1-30 07:53
用一串if,按键按下进入下一个循环就像这样
if(按键按下&&计数变量为x)
{
函数体;
if(按键按下)
{
计数变量增加1;//进入到下一个函数中
}
}
不知道我说的你能否明白
作者:
lkc8210
时间:
2022-1-30 15:39
给个栗子
#include <reg52.h>
typedef unsigned char u8; //0 to 255
typedef unsigned int u16; //0 to 65535
typedef unsigned long u32; //0 to 4294967295
sbit KEY_32 = P3^2;
u8 mode = 0;
u16 TMR_XX_PRE = 6000;
u8 index = 0;
void key_Proc()
{
static u16 Delay_XD=0;
if(!KEY_32)
{
if(Delay_XD<0xFFFF)Delay_XD++;
if(Delay_XD==250)
{
mode = ++mode %4;
index = 0;
P1 = 0xFF;
}
}
else
Delay_XD = 0;
}
void Led_Flow()
{
static u16 TMR_XX_ACC;
if(++TMR_XX_ACC >= TMR_XX_PRE)
{TMR_XX_ACC=0;
switch (mode)
{
case 0:
P1 = ~(0x01 << index);
index = ++index %8;
break;
case 1:
P1 = ~(0x80 >> index);
index = ++index %8;
break;
case 2:
if(index < 8)
P1 &= ~(0x01 <<index);
else
P1 |= (0x01 <<(index-8));
if(++index >15)
{
index = 0;
}
break;
}
}
}
void main()
{
while (1)
{
key_Proc();
Led_Flow();
}
}
复制代码
作者:
lucheng77
时间:
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;
}
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1