51单片机独立式按键程序

2024-11-26 10:32:03
推荐回答(2个)
回答1:

#include
unsigned char ID;
sbit k1 = P3 ^ 7;        // 定义按键端口
void delay()
{
TMOD = 0x10;    // 定时器的工作方式
TH1=0xd8;
TL1=0xf0;
TR1=1;
while(!TF1);    // 这里错了,是定时器1
TF1=0;
}
void main()
{
while(1)
{
if(k1==0)
{
delay();              //去抖动
if(k1==0)           //检测按键确实按下,进行按键处理
{
ID++;
if(ID==0)
{
ID=0;
}
while(!k1);   //这里错了,多余的加了==0
}
}
switch(ID)
{
case 0:P1=0x3f;break;
case 1:P1=0x06;break;
case 2:P1=0x5b;break;
case 3:P1=0x4f;break;
case 4:P1=0x66;break;
case 5:P1=0x6d;break;
case 6:P1=0x7d;break;
case 7:P1=0x07;break;
case 8:P1=0x7f;break;
case 9:P1=0x6f;break;
default:break;
}
}
}

回答2:

#include //头文件
#define uint unsigned int //宏定义
#define uchar unsigned char //宏定义
sbit led=P1^0; //输出口
sbit key=P3^4; //按键
uchar flag; //全局变量
uint num;
void delay(uint xms) //延时函数
{
uint i, j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);

}
void zhixing(); //执行函数声明
uchar key1() //按键扫描函数带返回值
{
uchar num;
key=1;
if(key==0)
{
delay(1);
if(key==0)
{
while(!key);
num++;
switch (num)
{
case 1:
flag=0;
break;
case 2:
flag=1;
break;
case 3:
flag=2;
break;
case 4:
flag=3;
break;
case 5:
flag=4;
break;
}

if(num==5)
num=0;
}
}
return flag;
}
void zhixing(uchar flag) //执行函数
{
if(flag==0)
led=1;
if(flag==1)
led=0;
if(flag==2)
{
led=0;
delay(100);
led=1;
delay(100);
}
if(flag==3)
{
led=0;
delay(250);
led=1;
delay(250);
}
if(flag==4)
{
led=0;
delay(500);
led=1;
delay(500);
}
}
void main() //主函数
{

while(1)
{
zhixing(key1());
}
}
//这个程序你研究一下,你的延时函数有问题主函数也有问题希望用上面的程序能帮助你解题。