单片机按一下加一,加到20的程序

单片机按一下加一,加到20的程序,第1张

假设P0 P1口各接尺羡一个数码管局困昌,p2.0接按键程序如下:

#include<reg52.h>

#define uchar unsigned char

#define uint unsigned int

sbit key=P2^0

uchar num=0

//共阴数码管七段码

uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77}

void Delay1ms(uint i) //1ms延时程序

{

uint j

for(i>0i--)

{

for(j=0j<164j++)

{}

}

}

void main(void )//主程序

{

while(1)

{

if(key==0)//判断按键是否按下桐扒

{

Delay1ms(10)//延时消抖

if(key==0)

{

while(key==0)//等待按键抬起

num++

if(num==20)num=0

}

}

P0=table[num%10]

P1=table[num/10]

}

}

这个可以通宏神过定时器来实现,携悄比如当按键时间蔽隐亏小于2秒时,按一次加1,当超过2秒时,没50毫秒加1实现连加功能。例程如下:

#include<reg51.h>

unsigned int a

unsigned char times

sbit key=P1^0

void t0isr() interrupt 1

{

TH0=(65536-50000)/256

TL0=(65536-50000)%256

times++

if(times>40)

{

a++

printf("%d",a)

}

}

main()

{

TMOD=0x21

TH0=(65536-50000)/256

TL0=(65536-50000)%256

TH1=0xfd

TL1=0xfd

TR0=1

TR1=1

ET0=1

EA=1

times=0

a=0

while(1)

{

if(key==0)

{

a++

printf("%d",a)

while(key==0)

times=0

}

}

}

本人只讲思路:(1)首先你要明确你的按键是厅激上拉接法还是下拉接法;(2)要明确按键是输入设备,所以按键接在PA1上,你要根据按键硬件电路的上拉或下拉接法来确定PA1这个GPIO口的输入方式,按键硬件上是上拉接入,PA1就配置上拉输入,同理,下拉对应下拉;(3)然后写程序,首先写GPIO初始化程序:陆李包括使能时钟、输入模式设置、速度设置、上下拉设置;(4)在写按键检测程序之前要明确检测上升沿还是检测下降沿:如果按键在硬件上是上拉接法,则按下按键会产生负脉冲按键信号,按键检测程序则检测下降沿即可。如果是下拉接法,则当按键按下则产生正脉冲按键信号,按键检测程序则检测上升沿即可。(5)根据(4)中所述,写按键检测上升沿或者下降沿的按键检测程序,并且在按键检测程序中应该采用延时程序实现10至20ms的延时处理按键的抖动,目的是为了消除按键产生的机械抖动,专业说法叫做按键的消抖。(6)在按键检测程序内部,当按键检测成功,则执行自己设定的变量自加1的这一行代码。以上六步就可以实现扮悉袜君所需功能。


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存