更复杂的方法:键盘按下发出来一个scan
code,抬起来的时樱裂候还会发出另外一个值.当然这样弄起旁扮来
非常底层,非常复杂
取那么多、那么长时间的平均值干什么?连续取 20 次,其中有10 次,按的是这个键,有10 次,按的是那个键,
平均一下,判定结果:是按下了一个根本就没有按的键。
========
#include<reg52.h>键蔽
#include<intrins.h>
unsigned char code k_AD[] = {
10, 40, 70, 100, 130, 160, 190, 210, 230}//九个按基兆键所对应的ADC值
unsigned char code duan[] = { //共阳段码
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}
//--------------------------------------------
void delay(int x)
{
int i
while(x--) for(i = 115i >0i--)
}
//--------------------------------------------
unsigned char keyscan()
{
unsigned char k1, k2
k1 = GetADCResult(0)//读出
if(k1 <238) { //按下了
delay(20)//延时
k2 = GetADCResult(0) //再次读出
if((k1 >(k2 - 5) &&(k1 <(k2 + 5)) { //两者相差无几
k1 /= 2 k2 /= 2 k1 += k2//两次的平均值
for(k2 = 0k2 <9k2++) //稿锋州在表格中查找9次
if(k1 >(k_AD[k2]) - 5) &&(k1 <(k_AD[k2]) + 5)) //找到了
return(k2) //就返回键值
}
}
return(255) //没有按键
}
//--------------------------------------------
void main()
{
unsigned char key
while(1) {
key = keyscan()
if(key != 255) P0 = duan[key]//显示键值
}
}
//--------------------------------------------
本程序未经验证,仅供参考。
AD按键也有很多种,我使用的是下图所示的4个引脚的按键。键盘有一种连接方式,一般一个ADC端口就可以实现多个按键功能,不过需要加电阻。按键的电路图很简单,如下图所示,按钮一按下,可搭衡以看到该电路就接通,也就是有信号。
连接方式有很多种,下图所画的电路图就是其中一种,但是要注意,ADC按键连接时,由于端口数量是有限的,所以适用于按键核枝弯数量不多的场合。
要看下arduino板子的实物图,改闷如下图所示,大家就可以更直观,大家要知道每个引脚代表什么。
关于程序,很简单,通过电阻均匀分压,在每个分压节点连接一个按键到A0,这个也随便你选,A0-A5都行。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)