基于STC15系列单片机的ADC键盘编写方法
STC15系列单片机自带AD转换功能,本文结合作者自己的,以STC15W408AS单片机为例,搭建出测试ADC键盘的板型,并介绍ADC键盘的驱动如何编写。
声明:电路原理图取自STC宏晶科技STC15.PDF数据手册。
硬件部分
- 01
在单片机系统设计中,使用ADC键盘代替矩阵键盘有巨大的优势,例如节省IO口就是明显的好处之一。所以ADC键盘的驱动方式就成为了初学者应该学习和掌握的技巧之一。
- 02
由于本例选取的是STC15W408AS单片机,引脚图如下图所示(截取自数据手册)。根据图可以看出AD转换功能排列在P1口。
- 03
参考数据手册STC15.pdf的低405页4.23 A/D做键盘扫描应用线路图。对应所选择的单片机,安排IO连接如下图所示。 其中,74HC595驱动一位数码管显示当前按下的设定值,数码管显示出当前按键的AD转换值。如此安排便于排除故障并且可以由此设定按键判断的AD转换值范围(不懂没关系,继续看)。
- 04
电路原理图如下,其中,使用74HC138改为2-4线译码连到数码管位选,使用74HC573作为中继连接到数码管的段选,顺序按照0~7对应a~f连接。 74HC595连接的数码管由于处在静态显示状态,所以COM口接470Ω电阻到地用于限流。 基准源按照数据手册提供的连接方法接到CMP+口。 电路原理图使用立创EDA绘制。
- 05
按照电路原理图进行焊接,注意保证走线的清晰明了,ADC键盘电阻之间的连线不能有短路等现象,建议添加电源指示灯(便于检测是否有电源短路现象)和预留出下载接口。
- 06
由于本人原本是制作方波发生器,利用了ADC键盘,所以在此放上制作的方波发生器实物图,大家可以看一下ADC键盘的元件安排。 另一张是键盘部分细节图,走线还是很明朗的,但是本人画工很差,读者将就看吧…… 本人菜鸟级学生,请高手误喷。
软件部分
- 01
搭建编程环境。 打开Keil,本例以Keil4为例,添加STC15系列头文件,写出函数基本框架。
- 02
查找单片机的数据手册,找到相关的寄存器,并写在系统初始化函数里。 初始化主要包括74HC595的上电消隐、AD转换相关寄存器的开启和配置等。
- 03
用查询方式检测键盘的按动情况,在中断函数中进行键值判断。以便在每一次AD转换完成后自动获取键值。 按照之前的原理图连接的电路,AD典型转换值在程序中列出
- 04
在主函数中,每进行一次AD转换值就进行一次比对,只要AD转换值不是非按下状态的值(这个值在本例中设置为16,因为共有16个按键,键值分配依次为0~15),就证明有按键按下,继而使用switch-case语句判断接下来执行的语句。 下图的功能是不断调用AD转换,实时显示转换对应的值。
- 05
为实现上述程序,需要添加的全局变量和子函数如图所示,主要包括数码管显示函数、74HC595通信函数、延时函数和一些位定义等。
- 06
在工程配置中设置生成HEX文件,并下载到板子上测试运行即可,此处放上我使用当初方波发生器的板子做的测试图。 可以清晰的看见,当按下某个按键时,静态显示数码管显示键位值,动态扫描数码管显示AD转换值。