c51单片机独立按键控制,流水灯程序

c51单片机独立按键控制,流水灯程序,第1张

while(1)

{ P1=aa;

delayms(1000);

aa=_crol_(aa,1);

}

这前面的while(1)根本不会退出,也就是不会执行下面的if(key1 == 0)的语句了,所以按键按下去当然没有反应了

if(key1==0)

{

P1=0x7e;

while(1)

{

while(P1_0); // 等待按键按下

while(!P1_0); // 等待按键松开。

while(P1_0)

{

// 如果没有按键按下,就执行程序。

}

while(!P1_0); // 等待按键松开。

}

此程序实现独立按键的检测功能,每次按下按键 key5 时,数码管最后一位显示的数 值加 1,按键同时响蜂鸣器 #include<reg52h> 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; while(i>0) { P3_6 = 1; delay_ms(1); P3_6 = 0; delay_ms(1); i--; } } void main() //喇叭连续响 n 毫秒 //向喇叭输入 1000HZ 的方波震荡源 //05 毫秒高电平 //05 毫秒低电平 { 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<reg52h> 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; while(i>0) { P3_6 = 1; delay_ms(1); P3_6 = 0; delay_ms(1); i--; } } void main() { int num=0, num2=0; while(1) { P2=BitSet[6]; //喇叭连续响 n 毫秒 //向喇叭输入 1000HZ 的方波震荡源 //05 毫秒高电平 //05 毫秒低电平 //选择最低位的数码管 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; }; } } P2=BitSet[7]; //选择最低位的数码管 P0=~NumberCode[num2]; delay_ms(3); P2=0xff; //直到按键释放,按下时 key5==0,持续循环 P0=~NumberCode[num]; delay

你好!

因为按键 *** 作涉及寄存器配置和按键防抖,因此写了你也不一定用得上。而且你这个的逻辑比较简单,建议自己写。主要注意几个地方就可以了:

按键I/O口电平的配置:要结合硬件电路确认按键是低电平触发还是高电平触发。在程序中设置正确的I/O口电平。

I/O口的输入输出状态的配置:I/O口作为按键输入必须是准双向模式或输入模式,这个不同单片机配置寄存器方式不同但大同小异。

按键防抖:在按键按下时有时会有短暂的接触不良,因此会多次判断按键按下和断开,因此一般在按键按下或断开时增加几十毫秒的防抖处理,具体就是连续多个循环判断按键是否是一个状态,如果状态不变,再进行下一步处理。

void delay(unsigned char);

void main()

{

;

}

/IndependentButtons/

char Button(void)

{

unsigned char state1,a = 1,mt = 1;

P1 = 0xff;

state1 = P1;

state1 = ~ state1;

if(state1 != 0x00)

{

delay10ms(5);

do{

if(mt > 1)

dealy10ms(100);

delay10ms(50);

a ++;

mt ++;

}while(P1 != 0xff);

}

return a;

}

为相应的独立按键c代码(为8个独立按键,如果要4个独立按键可以在上面程序该的),其他的只要用main调用,在main里制表,就行了。

以上就是关于c51单片机独立按键控制,流水灯程序全部的内容,包括:c51单片机独立按键控制,流水灯程序、51单片机如何使用独立按键第一次按的时候,程序执行,再次按的时候,、若51单片机的PLOD接了1个独立按键,编写程序完成按键检测程序要求每按下按钮一次P1.1端口电子改变一次等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/zz/9507919.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存