若51单片机的PLOD接了1个独立按键,编写程序完成按键检测程序要求每按下按钮一次P1.1端口电子改变一次

若51单片机的PLOD接了1个独立按键,编写程序完成按键检测程序要求每按下按钮一次P1.1端口电子改变一次,第1张

此程序实现独立按键的检测功能,每次按下按键 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

#include<reg52.h>

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

}

}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11140487.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存