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=0x3fbreak
case 1:P1=0x06break
case 2:P1=0x5bbreak
case 3:P1=0x4fbreak
case 4:P1=0x66break
case 5:P1=0x6dbreak
case 6:P1=0x7dbreak
case 7:P1=0x07break
case 8:P1=0x7fbreak
case 9:P1=0x6fbreak
default:break
}
}
}
此程序实现独立孙芹按键的检测功能,每次按下按键 key5 时,数码管最后一位显示的数 值加 1,按键同时响蜂鸣器 #include<reg52.h>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, jfor(i=ni>0i--) for(j=110j>0j--)} void beep(int n) { int i = nwhile(i>0) { P3_6 = 1delay_ms(1)P3_6 = 0delay_ms(1)i--} } void main() //喇叭连续响 n 毫秒 //向喇叭输入 1000HZ 的方波震荡源 //0.5 毫秒高电平 //0.5 毫秒低电平 { int num=0while(1) { P2=BitSet[7]//选择最低位的数码管 if(key5==0) //判断按键 key5 是否按下 { delay_ms(10)//延时重新判断按键是否按下,延时消除抖动 if(key5==0) { num++//每按下一次显示的数值加 1 beep(200)//喇叭响 200 毫秒 if(num==16) num=0while(!key5)//直到按键释放,悔笑按下时 key5==0,持续循环 } } P0=~NumberCode[num]} } // 2、 此程序实现独立按键的检测功能,key5 和 key6 每次按下按键时,数码管次低位和最 低位显示的数值加 1,按键同时响蜂鸣器 #include<reg52.h>sbit key5 = P1^4sbit key6 = P1^5sbit P3_6 = P3^6unsigned 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, jfor(i=ni>0i--) for(j=110j>0j--)} void beep(int n) { int i = nwhile(i>0) { P3_6 = 1delay_ms(1)P3_6 = 0delay_ms(1)i--} } void main() { int num=0, num2=0while(1) { P2=BitSet[6]//喇叭连续响 n 毫秒 //向喇叭输入 1000HZ 的方波震荡源 //0.5 毫秒高电平 //0.5 毫秒低电平 //选择最低位的数码管 if(key5==0) //判断按键 key5 是否按下 { delay_ms(10)//延时重新判断按键是否按下,延时消除抖动 if(key5==0) { num++//每按下一次显示的数值加 1 beep(100)//喇叭响 100 毫秒 if(num==16) num=0while(!key5) { P2=BitSet[6]//选择次低位的数码管 P0=~NumberCode[num]delay_ms(3)P2=0xff}} } P2=BitSet[7]//选择最低位的数码管 P0=~NumberCode[num2]delay_ms(3)P2=0xff//直到按键释放,按下时 key5==0,持续循环 P0=~NumberCode[num]delay欢迎分享,转载请注明来源:内存溢出
评论列表(0条)