原创 单片机应用中的实用技巧

2008-9-22 13:14 3364 7 7 分类: MCU/ 嵌入式
单片机应用中的实用技巧(一)

作者:Azhu  E-mail:circuit51@tom.com


转自:azhu.blog.dianyuan.com

在单片机的应用中,有许多巧妙的技巧和方法,如果都能熟悉与掌握的话,对于减小系统资源,降低电路成本,提高设计的可靠性都很有帮助,本文为读者们提供一些较为常用的单片机应用中的实用技巧。

1、用一个I/O口控制2个单色指示灯。

由于单片机中的I/O口通常可设置为三种状态,即输出高电平、输出低电平和输入状态(高阻态)。利用这一点,可以很方便地用一个I/O口实现对2个指示灯的控制。其电路如下图所示。

1144042470.jpg


当要使LED1亮时,I/O口可置为低电平。此时LED2无电流流过,不会亮。

当要使LED2亮时,I/O口可置为高电平。此时LED1无电流流过,不会亮。

若要LED1、LED2均不亮,可将I/O口置为高阻态,此时发光管被VD1旁路,也不会亮。

若要LED1、LED2一起亮,则可以让I/O口在某一固定频率下以50%的占空比进行高低电平不停转换,利用视觉暂留,使人眼感觉两个灯都为亮的状态。

2、用一个I/O口控制1个三色指示灯。

其电路如下图所示。

1144042491.jpg

当要显示绿灯(LED1)亮时,I/O口可置为低电平。此时红灯(LED2)反向偏置,无电流流过,不会亮。

当要显示红灯(LED2)亮时,I/O口可置为高电平。此时绿灯(LED1)反向偏置,无电流流过,不会亮。

若要指示灯不亮,可将I/O口置为高阻态,此时两个发光管均无电流流过,也不会亮。

若要显示橙灯亮时,此时LED1、LED2要一起亮,则可以让I/O口在某一固定频率下以50%的占空比进行高低电平不停转换,利用视觉暂留,使人眼感觉到显示的是橙灯。

3、一个I/O口读取三种状态。

单片机应用中,有时需要让外部用跳线进行选择设置,单片机按跳线的状态来进行相应的控制操作。本例中可用一个I/O口检测出跳线连接的3种状态:高电平,低电平或者悬空(高阻态)。电路如下图所示。

1144042527.jpg


检测低电平状态:I/O口为输入状态,直接读取引脚上的低电平。

检查高电平状态:I/O口为输入状态,直接读取引脚上的高电平。

检查高阻状态:I/O口设为输出态,输出高电平。然后设置I/O口为输入态,读取引脚状态,为高电平;再把I/O口设为输出态,输出低电平,读取引脚状态,为低电平。说明为高阻态。

4、利用单片机的时钟输出产生高电压。

大多数的单片机都会有个时钟输出脚,利用该脚可以产生一个高过VDD的输出电压值,在输出功率不大的场合,很实用。电路如下图所示。在未接负载情况下,最大输出电压可以达到2*VDD-2*Vd。注:Vd为二极管的导通压降。

点击看大图


5、用一个带A/D的I/O口实现16个键盘输入。

许多单片机带有A/D转换功能,在实际运用中,如果利用其中的一路A/D转换,可以很方便地实现4×4键盘输入。

其电路图如下图所示。

1144044302.jpg


如图所示,由于键盘的纵向电阻R1~R4的阻值为递增状态,其增幅超过横向最大阻值电阻R8,因此当按键从S1至S16按下时,纵向电阻与横向电
阻串联的阻值也会相应由低到高增加,如S1按下时串联阻值为11k,S2按下时阻值为13.9k,S5按下时为25k,…,由于每个键按下后的串联阻值均
不同,并且依按键的次序呈逐渐增大趋势,经与R9分压后,会在单片机的输入端产生不同的电压值,该电压经过A/D转换后进行相应处理,即可判断出是哪个键
按下。

在实际应用中,由于阻值与电压为非线性关系,因此在电阻选用及编程时需要注意,同时A/D转换应进行相应的软件处理(如重复检测两次才确认),以消除按键抖动引起的误判断。

6、用软件产生PWM实现模拟量输出。

在单片机应用中,常需要通过输出模拟量来对外部进行控制,但增加D/A转换芯片不仅需要占用I/O口资源,同时也会使成本增加。下图提供一种通过单片机的定时器中断来用软件的方法产生PWM,并经过滤波与跟随电路产生准确的模拟量输出。

其电路如下图所示。

1144044330.jpg


该电路只用单片机的一个I/O脚实现D/A转换功能。其输出的模拟量电压Vout=VDD*D1/(D1+D2)。该输出电压带有纹波,当RC值
足够大时,该纹波值几乎为零,可忽略不计。D1与D2可通过单片机内部的定时器中断来准确产生。该模拟量从输出PWM到稳定状态,需要一定的时间,若要缩
短达到稳定的时间,可以减小R1和C1的值,但纹波会增大,这在设计时需要注意。
7、用2个I/O口实现多按键扫描及键盘唤醒

在一些低功耗的单片机应用场合中,常常需要让单片机平时工作于睡眠状态,而在有键盘输入时唤醒单片机以做相应控制。单个按键唤醒单片机容易实现,但多个按键都能唤醒单片机有一定的困难,本文提供一种解决该问题的思路。

电路如下图所示。

1144044748.jpg


其工作过程说明如下:

1.单片机的GP1口具有电平变化唤醒单片机功能,单片机在进入睡眠前将GP1口设置为输入状态,GP2设置为输出高电平状态。

2.当任一键被按下时,GP1口将变为高电平,使单片机唤醒。此时将GP2口设置为输出低电平,短延时,使C1电容放电。

3.将GP1设置为输出高电平,GP2设置为输入状态,定时器开始记时。

4.当GP2由低电平变为高电平的瞬间,记录定时器时间。由于不同的按键按下时,分压器电路改变了RC电路的电压上升速度,因此根据测得的定时器值的大小通过查表法可判断出是哪个键被按下。

以上方法只适用于单键判断,当多键同时按下时是无法判断的。该方法需要占用单片机的定时器资源。

8、单片机的自动关机功能及开机按键兼做功能按键。

在许多电池供电的应用场合,要求电路平时处于关机状态以节省电能,而当开机键按下后单片机才开始工作,工作完后又能自动关机。

1144044770.jpg


上图所示电路即可完成此种功能。在上电后,由于V1处于关断状态,单片机并不耗电,整个电路所消耗电流只有不到10μA。

当S1按下后,V1导通,78L05获得电源,输出稳定的5V使单片机开始工作,同时单片机的GP0送出高电平,使V2导通,这使V1保持在导通
状态,单片机获得持续的电源进行工作,当单片机任务处理完成后,单片机的GP0输出低电平,将V2关断,使V1也处于关断状态,单片机的电源又被关断,电
路又恢复到低功耗状态,其消耗电流小于10μA。

在单片机获电工作后,原作为电源开关按键的S1也可以作为功能按键来使用,当S1未按下时,GP1口为高电平,而当S1按下后,GP1变为低电平,因此单片机可以检测该按键,并做相应的功能控制。例如可将S1定义为开关机按键或其它功能按键。
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
7
关闭 站长推荐上一条 /3 下一条