51单片机_独立按键检测
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《51系列单片机_独立按键检测》
此程序使用单片机89SC52
//1、此程序实现独立按键的检测功能,每次按下按键key5时,数码管最后一位显示的数值加1,按键同时响蜂鸣器
#include
sbit key5 = P1^4; //独立按键
sbit P3_6 = P3^6; //蜂鸣器控制端口
unsigned char code BitSet[8] =
{
0xfe, 0xfd, 0xfb, 0xf7,
0xef, 0xdf, 0xbf, 0x7f
}; //用于设置(低电平位选)数码管的位选信号,从低到高对应8个数码管
unsigned char code NumberCode[16] =
{
0x3f, 0x06, 0x5b, 0x4f,
0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c,
0x39, 0x5e, 0x79, 0x71,
}; //用于设置(共阴极)数码管的段选信号,从0~f共16个数值
void delay_ms(unsigned int n)
{ //软件延时函数,延时n毫秒
unsigned int i, j;
for(i=n;i>0;i--)
for(j=110;j>0;j--);
}
void beep(int n)
{
int i = n; //喇叭连续响n毫秒
while(i>0) //向喇叭输入1000HZ的方波震荡源
{
P3_6 = 1;
delay_ms(1); //0.5毫秒高电平
P3_6 = 0;
delay_ms(1); //0.5毫秒低电平
i--;
}
}
void main()
int num=0;
while(1)
{
P2=BitSet[7]; //选择最低位的数码管
if(key5==0) //判断按键key5是否按下
{
delay_ms(10); //延时重新判断按键是否按下,延时消除抖动
if(key5==0)
{
num++; //每按下一次显示的数值加1
beep(200); //喇叭响200毫秒
if(num==16) num=0;
while(!key5); //直到按键释放,按下时key5==0,持续循环
}
}
P0=~NumberCode[num];
}
}
//2、此程序实现独立按键的检测功能,key5和key6每次按下按键时,数码管次低位和最低位显示的数值加1,按键同时响蜂鸣器
#include
sbit key5 = P1^4;
sbit key6 = P1^5;
sbit P3_6 = P3^6;
unsigned char code BitSet[8] =
{
0xfe, 0xfd, 0xfb, 0xf7,
0xef, 0xdf, 0xbf, 0x7f
}; //用于设置(低电平位选)数码管的位选信号,从低到高对应8个数码管
unsigned char code NumberCode[16] =
{
0x3f, 0x06, 0x5b, 0x4f,
0x66, 0x6d, 0x7d, 0x07,
0x7f, 0x6f, 0x77, 0x7c,
0x39, 0x5e, 0x79, 0x71,
}; //用于设置(共阴极)数码管的段选信号,从0~f共16个数值
void delay_ms(unsigned int n)
{ //软件延时函数,延时n毫秒
unsigned int i, j;
for(i=n;i>0;i--)
for(j=110;j>0;j--);
}
void beep(int n)
{
int i = n; //喇叭连续响n毫秒
while(i>0) //向喇叭输入1000HZ的方波震荡源
{
P3_6 = 1;
delay_ms(1); //0.5毫秒高电平
P3_6 = 0;
delay_ms(1); //0.5毫秒低电平
i--;
}
}
void main()
{
int num=0, num2=0;
while(1)
{
P2=BitSet[6]; //选择最低位的数码管
if(key5==0) //判断按键key5是否按下
{
delay_ms(10); //延时重新判断按键是否按下,延时消除抖动
if(key5==0)
{
num++; //每按下一次显示的数值加1
beep(100); //喇叭响100毫秒
if(num==16) num=0;
while(!key5)
{
P2=BitSet[6]; //选择次低位的数码管
P0=~NumberCode[num];
delay_ms(3);
P2=0xff;