5、用一个带A/D的I/O口实现16个键盘输入。
许多单片机带有A/D转换功能,在实际运用中,如果利用其中的一路A/D转换,可以很方便地实现4×4键盘输入。
如图一所示,由于键盘的纵向电阻R1~R4的阻值为递增状态,其增幅超过横向最大阻值电阻R8,因此当按键从S1至S16按下时,纵向电阻与横向电阻串联的阻值也会相应由低到高增加,如S1按下时串联阻值为11k,S2按下时阻值为13.9k,S5按下时为25k,…,由于每个键按下后的串联阻值均不同,并且依按键的次序呈逐渐增大趋势,经与R9分压后,会在单片机的输入端产生不同的电压值,该电压经过A/D转换后进行相应处理,即可判断出是哪个键按下。
在实际应用中,由于阻值与电压为非线性关系,因此在电阻选用及编程时需要注意,同时A/D转换应进行相应的软件处理(如重复检测两次才确认),以消除按键抖动引起的误判断。
6、用软件产生PWM实现模拟量输出。
在单片机应用中,常需要通过输出模拟量来对外部进行控制,但增加D/A转换芯片不仅需要占用I/O口资源,同时也会使成本增加。下图提供一种通过单片机的定时器中断来用软件的方法产生PWM,并经过滤波与跟随电路产生准确的模拟量输出。
该电路只用单片机的一个I/O脚实现D/A转换功能。其输出的模拟量电压Vout=VDD*D1/(D1+D2)。该输出电压带有纹波,当RC值足够大时,该纹波值几乎为零,可忽略不计。D1与D2可通过单片机内部的定时器中断来准确产生。该模拟量从输出PWM到稳定状态,需要一定的时间,若要缩短达到稳定的时间,可以减小R1和C1的值,但纹波会增大,这在设计时需要注意。
7、用2个I/O口实现多按键扫描及键盘唤醒
在一些低功耗的单片机应用场合中,常常需要让单片机平时工作于睡眠状态,而在有键盘输入时唤醒单片机以做相应控制。单个按键唤醒单片机容易实现,但多个按键都能唤醒单片机有一定的困难,本文提供一种解决该问题的思路。
其工作过程说明如下:
1. 单片机的GP1口具有电平变化唤醒单片机功能,单片机在进入睡眠前将GP1口设置为输入状态,GP2设置为输出高电平状态。
2. 当任一键被按下时,GP1口将变为高电平,使单片机唤醒。此时将GP2口设置为输出低电平,短延时,使C1电容放电。
3. 将GP1设置为输出高电平,GP2设置为输入状态,定时器开始记时。
4. 当GP2由低电平变为高电平的瞬间,记录定时器时间。由于不同的按键按下时,分压器电路改变了RC电路的电压上升速度,因此根据测得的定时器值的大小通过查表法可判断出是哪个键被按下。
以上方法只适用于单键判断,当多键同时按下时是无法判断的。该方法需要占用单片机的定时器资源。
8、单片机的自动关机功能及开机按键兼做功能按键。
在许多电池供电的应用场合,要求电路平时处于关机状态以节省电能,而当开机键按下后单片机才开始工作,工作完后又能自动关机。
下图所示电路即可完成此种功能。在上电后,由于V1处于关断状态,单片机并不耗电,整个电路所消耗电流只有不到10μA。
当S1按下后,V1导通,78L05获得电源,输出稳定的5V使单片机开始工作,同时单片机的GP0送出高电平,使V2导通,这使V1保持在导通状态,单片机获得持续的电源进行工作,当单片机任务处理完成后,单片机的GP0输出低电平,将V2关断,使V1也处于关断状态,单片机的电源又被关断,电路又恢复到低功耗状态,其消耗电流小于10μA。
在单片机获电工作后,原作为电源开关按键的S1也可以作为功能按键来使用,当S1未按下时,GP1口为高电平,而当S1按下后,GP1变为低电平,因此单片机可以检测该按键,并做相应的功能控制。例如可将S1定义为开关机按键或其它功能按键。