单片机应用中的实用技巧(二)

发布者:星尘散落最新更新时间:2012-09-29 来源: 21ic 关键字:单片机  实用技巧 手机看文章 扫描二维码
随时随地手机看文章

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定义为开关机按键或其它功能按键。

 

关键字:单片机  实用技巧 引用地址:单片机应用中的实用技巧(二)

上一篇:触摸屏芯片ADS7846/ADS7843驱动程序(C51)
下一篇:从RS232口获取单片机工作电源

推荐阅读最新更新时间:2024-03-16 13:09

单片机资料上拉电阻的应用
如果是驱动led,那么用1K左右的就行了。如果希望亮度大一些,电阻可减小,最小不要小于200欧姆,否则电流太大;如果希望亮度小 一些,电阻可增大,增加到多少呢,主要看亮度情况,以亮度合适为准,一般来说超过3K以上时,亮度就很弱了,但是对于超高亮度的LED,有时 候电阻为10K时觉得亮度还能够用。我通常就用1k的。 对于驱动光耦合器,如果是高电位有效,即耦合器输入端接端口和地之间,那么和LED的情况是一样的;如果是低电位有效,即耦合器输入端接端 口和VCC之间,那么除了要串接一个1 4.7k之间的电阻以外,同时上拉电阻的阻值就可以用的特别大,用100k 500K之间的都行,当然用 10K的也可以,但是考虑到省电问题,没有必
[单片机]
51单片机-串口&液晶屏Ⅱ
1.题目要求 在上一讲代码测试中,电脑端发送过来的数据单片机这边需要用数组存取起来,再把这些数据通过液晶屏显示出来,不过我们也可以把接收到的数据直接写进液晶屏的RAM中让它实时显示。 比如在电脑端那边发送“DAN ”(DAN后面有一个空格),液晶屏就从第一格开始显示“DAN ”, 接着在电脑端上我们删除之前发送过的内容,打上“PIAN ”然后发送, 删除之前发送过的内容打上“JI”发送,观察液晶屏的显示情况。 2.main.c测试代码 #include reg52.h #include function.h //详见第六章第8讲 #include lcd.h //详见第十一章第3讲 #include
[单片机]
基于单片机C8051F020的液晶显示的接口电路和程序实现与设计
在单片机系统设计中,LCM(液晶显示模块)人机交互界面的设计往往是很重要的一个环节。LCM可以用于智能仪器上的显示设定参数、状态提示符、检测结果和待输入参数等功能。本文结合电解质分析仪的设计要求,采用液晶显示模块YXD—12864A2LCM,研究并实现了以单片机C8051F020为基础的液晶显示的接口电路和程序设计,添加了按键系统,从而达到方便用户使用的目的。 1电解质分析仪简介 本系统所设计的电解质分析仪(Electrolyte Analyzer)是一种具有高分辨率和高精度的仪器,可以与多种离子选择电极配套使用,可用自动方法测定样品中钾、钠、氯、钙离子的浓度和pH值。其结构方框图如图1所示。仪器采用单片机C8051F02
[单片机]
基于<font color='red'>单片机</font>C8051F020的液晶显示的接口电路和程序实现与设计
单片机驱动DM9000网卡芯片
4、验证初始化中的各个函数。 下面我们来看一下,上面所写的初始化函数是否可用。以上我们写好了三个函数,分别为 DM9000_init(),sendpacket()和receivepacket(),保存并命名为dm9000.c。既然我们要进行调试,当 然要有结果输出,根据自己的处理器的情况写一个串口程序,这些函数是学某个单片机的基础,这里不 做详细介绍,用到是时候会在函数里注释一下。 接下来我们来写个主函数,新建C文件,命名为mian.c,填写如下函数: void main(void) { unsigned int i; unsigned char c; uart0_init(
[单片机]
<font color='red'>单片机</font>驱动DM9000网卡芯片
单片机学习之十三:流水灯花样变换(中断)
一、 实验现象: 进入程序后,程序作双向跑马灯;按下k0键,程序作左向跑马灯;按下k1按键程序作右向跑马灯;按下k2键两个亮点从两边向中间移动;按下k3键两个亮点从中间向两边移动。 二、 实验目的 掌握在中断程序中处理多个按键动作的响应方法 三、 实验任务分析: ( 注意:在作这个试验的时候,不要忘了把JMP0跳线置于1、2的位置,选择二极管显示单元。) 在前面的两个中断方式响应按键动作的试验中,我们只对一个按键动作做出响应,难度比较小。 而在这个程序中,我们的中断程序要对多个按键动作进行响应, 灯光变换的花样有4种,用不同的按键切换。那么,这种问题又应该如何处理呢? 我们可以这
[单片机]
<font color='red'>单片机</font>学习之十三:流水灯花样变换(中断)
单片机学习札记2---调试数码管电路
在上一节中,我们交代了为什么要做这样一个项目,以及我们提出了需求,并根据具体的需求分析,将其转化为硬件设计,画出了具体的原理图,但是还有许多的问题没有交代清楚,比如数码管的引脚判断,12个管脚哪8个是数码管的段码?4个是数码管的位码?这个我们刚买来并不清楚,还需要测量,这就要用到万用表了,将万用表拨到二极管档位,二极管有单向导电性,我们知道数码管就是8个小灯组成的,如果我们买的是共阳极的数码管,也就是如下图所示: 如果我们将万用表的红表笔接12个引脚中的任意一个,黑表笔接其余11的任意一个引脚,如果小灯亮的话,说明红表笔管脚是数码管的位码,而我们的数码管有四个,所以有4个位码,可以按照点亮小灯的方法查找,找完位码之后,记下来,
[单片机]
<font color='red'>单片机</font>学习札记2---调试数码管电路
基于ARM单片机中的部分寄存器地址为什么会相差4
图中是LPC1114用户手册系统控制模块(SYSCON)中的部分寄存器,请看红色框内,地址相差0x4。为什么会相差4?很多初学者问我这个问题,高手就请绕过吧。 计算机、单片机都是以字节为单位进行存储的。这里的4就是4个字节的意思。上面列举的LPC1114是ARM Cortex-M0内核,STM32是ARM Cortex-M3内核,这两ARM单片机都是32位的。1个字节是8位,4个字节就是32位。32位单片机的寄存器基本上是32位的,8位单片机的寄存器基本上也是8位的。 打开你曾经用过的reg51.h文件,看看普通51单片机的寄存器地址映射,一共不到100个寄存器,几下就写完了。但是ARM单片机内部的模块非常多,寄存器也非常
[单片机]
基于ARM<font color='red'>单片机</font>中的部分寄存器地址为什么会相差4
SEPTNY256型单片机开关电源及其应用
1 TNY256的性能特点   ·内置自动重启电路,不需外接元件,一旦发生输出短路或控制环开路故障,可将占空比降低以保护芯片。   ·在输入直流高压电路中,不需要使用瞬态电压抑制器构成的钳位保护电路,仅用简单的RC吸收回路即可衰减视频噪声。   ·输入欠压检测电路仅需外接1只电阻,目的是在上电时将片内的功率MOSFET关断,直到直流输入电压VI达到欠压保护门限电压(100V)为止;正常工作后若VI突然降低,对芯片也能起到保护作用。   ·开关频率抖动可降低电磁辐射。   ·输入电压范围宽(85~265VAC或120~375VDC)且交、直流两用。效率高,265VAC输入时的空载功耗低于100mW。   ·控制方
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved