按键按照结构原理可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关等;另一类是无触点式开关按键,如电气式按键,磁感应按键等。前者造价低,后者寿命长。目前,微机系统中最常见的是触点式开关按键。

2.输入原理

在单片机应用系统中,除了复位按键有专门的复位电路及专一的复位功能外,其它按键都是以开关状态来设置控制功能或输入数据的。当所设置的功能键或数字键按下时,计算机应用系统应完成该按键所设定的功能,键信息输入是与软件结构密切相关的过程。
对于一组键或一个键盘,总有一个接口电路与CPU相连。CPU可以采用查询或中断方式了解有无将键输入,并检查是哪一个键按下,将该键号送入累加器ACC,然后通过跳转指令转入执行该键的功能程序,执行完后再返回主程序
程序有些问题,延时消抖的延时时间太长了,DelayMs(100);改为DelayMs(10);试试效果。
给你个思路。程序自己写
void intterupt0(void) interrupt 0
{ while(k4==1)
{
if(k1==0)
{
delay(10);
while(k1==0);
p++;
}
else if(k2==0)
{
delay(10);
while(k2==0);
*p=*p++;
}
else if(k3==0)
{
delay(10);
while(k3==0);
*p=*p--;
}
DISPLAY(); //显示b[]中的内容
if(*p=='\0')
p=b;
}
p=b;
}
简单和你说下。
p定义一个指向数组b的指针
数组b为从时钟芯片中读取的时间内容,格式,秒,分,时,日,月,星期,年
用了5个按键。一个按键控制中断,一个按键退出修改(K4)。进入中断后,若K4不按下,则在WHILE(K4)里一直循环,K1,指针地址+1,K2指针值+1,K3,指针值-1; 改完了后,将修改好的B里的值显示出来。由于DISPLAY()是在循环中的,所以每修改一个键,他就会被调用显示一次,就实现了实时修改显示的目的。修改完后,按下K4,跳出循环。最后将b[]中的值存入时钟芯片,OK了
不知道你懂没。
时钟芯片用DS1302
1.中断方式(这个比较可靠)
一般程序按键按下后 灯亮 然后按键松开灯还是亮的
采用的是边沿检测,即有电平跳变就改变输出。
如果想按键按住的时候灯亮,不按的时候灯不亮
采用电平触发,即当电平维持是正或者负的时候才稳定输出。
2.也可以用查询方式
比如
一般程序按键按下后 灯亮 然后按键松开灯还是亮的
if(P1^1==0) //判断是否按下键盘
{
delay10ms(); //延时,软件去干扰
if(P1^1==0) //确认按键按下
{
count++; //按键计数加1
if(count==1) //第一次按下亮,第二次按下灭
{
count=0; //将count清零
}
}
while(P1^1==0);//按键锁定.
}
P1^2=count;//输出显示
如果想按键按住的时候灯亮,不按的时候灯不亮
if(P1^1==1)
{
P1^2=1;
while(P1^1);
P1^2=0;
}
P1^1是按键采集管脚,P1^2是输出显示管脚。当然,前面得加去抖动。
你试试。
5步。分别是判断按键是否按下,延时消抖,再次判断按键是否按下,等待按键抬起,执行预定语句。
一种是普通io口,一种是中弹的形式,普通io口是按下按键触发按键子程序案件,指程序经过一段时间的,比如20~50毫秒的延时再次毒案件,如果按键值还是会按下,那么就延时等待按键抬起按键,抬起后执行按键程序,然后返回中弹也是一样的,按下按键之后进入中段读按键状态,是否还是为按一下是按一下等待延时再读等待,然后等待案件采取后执行相应的代码,然后退出总代。
单片机按键和指针按键的介绍就聊到这里吧,感谢您花时间阅读,谢谢。
本文标签:单片机按键和指针按键