求教...怎么用一个按键切换两种流水灯状态,
设置一个位变量,每按一次键变量取反一次,为0执行A程序,为1执行B程序。
可以记录按键的次数,根据次数来选择执行状态,这样可以在多状态中进行切换,当到达最后一个状态时记得要回零,再从头开始循环
能不能帮我写出一个大概的框架?、万分感谢
怎么记录呀
比如设一个key_times的 变量,初始值为0,检测到一次按键按下,key_times就加一,这样key_times=1是第一次按键按下,=2就是第二次,以此类推,就可以根据key_times的值来判断该做什么。
假如按键按下10次为一循环,那当key_times=10,再加一时,就设置key_times=1,就可以一直循环了
//单键控制流水灯方向,可以参考,举一反三。
#include<reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit key=P3^7; //按键端口
uchar num=0; //按键计次标志
void keyscan() //按键识别子程序
{
static bit key_sign=0; //按键自锁标志
static uchar count=0; //计数变量
if(key==0) //检测按键按下
{
count++; //消抖计数
if(count>=100) //100次检测按键如果为0
{
count=100; //防止溢出
if(key_sign==0) //按键自锁标志为0
{
key_sign=1; //按键自锁标志置1,防止重复响应
num++;
if(num>=3) //按任务取数
num=0;
}
}
}
else //按键抬起
{
key_sign=0; //按键自锁标志清0
count=0; //消抖计数清0
}
}
void display() //显示子程序
{
static uint count1=0; //计数变量
count1++; //计数延时
if(count1>=10000)
{
count1=0;
switch(num) //多重分支
{
case 0:
P1=0xfe; //固定显示
break;
case 1:
P1=_crol_(P1,1); //循环左移位
break;
case 2:
P1=_cror_(P1,1); //循环右移位
break;
// case N:
// N任务
// break;
}
}
}
void main()
{
// P1=0xfe;
while(1)
{
keyscan(); //按键识别子程序
display(); //显示子程序
}
}
一个变量就搞定了
谢谢
请问怎么切换程序呀
我在7楼给你的程序中已经很清楚的表述了这个问题,设置变量num就是为了记忆按键的操作状态,初学期间要多实验,只看程序不一定能完全理解。设置变量的数据类型是根据实际需要选择的,可以是bit位变量,也可以是unsigned char 无符号字符型以及其他类型,随着学习的深入逐渐掌握,给你的按键处理程序是完全可以用于实战的,并且非常容易扩展运用,而不是初级教科书上常用的delay,那是要占用系统运行时间影响运行效率的。
恩恩,,