51单片机_独立按键检测

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档