#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的这一行代码。以上六步就可以实现扮悉袜君所需功能。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)