学过单片机的都知道,按键在开发项目中是必不可缺少的东西,而大多数人都是采用行列式来识别矩阵键盘,这样很容易浪费IO口资源,不利于大型项目的开发。
这里介绍一种用AD转换接口来识别键盘的方法,由于现在的大多数单片机都带A/D转换,这样使用起来就方便多了,电路图如下图所示:
单片机只要识别AD转换结果的高四位就行。这里设计的关键就在于各段的电压变化只影响A/D转换结果的高四位。上边的VCC是接的AD的参考电压。
例如:一个12位的AD,读出的结果是0x0E08,那么这个按键就是15。下边是用C8051F410单片机识别的程序
void anjianshibie() //按键识别函数
{
unsigned int ad_val;
ad_val=Adc_410( ); //读出一个AD值
while(ad_val<0x0f88) //这里避免上限电压,如果不加这一句识别的按键永远是F
{
delayms(10); //延时消抖
ad_val=Adc_410( ); //再次判断
if(ad_val<0x0f88)
{
Key_AD=(unsigned char)(ad_val>>8)&0x0f; //读出按键值(高4位)
Display_5((uint)Key_AD);} //显示按键
}
}
下面是PCB设计图片和制作图片。不过这种识别键盘的方法有利也有弊,唯一缺点是使用长时间会造成焊点虚焊,一个焊点虚焊就会影响整个按键识别的准确度。以前的显像管电视就是采用这种识别键盘的办法,只要有一个按键接触不良其他按键就会乱识别,常常是按着音量加它就换台。