AVR单片机教程——数字输入

发布者:beup001最新更新时间:2019-12-02 来源: eefocus关键字:AVR  单片机教程  数字输入 手机看文章 扫描二维码
随时随地手机看文章

我们已经学习了如何使用按键和拨动开关,不知你有没有好奇 button_down 和 switch_status 等函数是如何实现的。本篇教程带你一探究竟,让我们从按键的原理开始。

在原理图中,按键的符号如下图所示:

符号很简单,就是两个触点上方有一个动片,当按下时与两个触点接触。实际上按键内部的机械结构大体上就是这样,实现的功能是,没有按下时两端断路,按下时两端短路。

还有一种画法是这样的,即电键:

就按键内部的机械结构来说,第一种更加真实,但从电路角度来看,两者没什么区别。

但是我们的开发板上的按键有4个引脚,这是怎么回事呢?其实上面两个和下面两个分别是连通的,相当于只有两个:

拨动开关,相当于单刀双掷开关:

从开发板反面可以看到拨动开关有3个引脚。拨到上方时,上面两个导通;拨到下方时,下面两个导通。


然而,光知道这些原理还不够。任何IC,包括单片机,与外界打交道的唯一途径是引脚。单片机要知道按键状态,必须由我们搭建合适的电路,把按键和开关的信息转换为电平,连接到单片机上。


先说按键吧。按键按下时,两引脚之间导通,如果一端接在某一极(电源或地)上,另一端的电平就是确定的。然而,如果不连接其他器件,当没有按下时,这一端是浮空的,电压可能高也可能低,是无效的。而我们希望不按下时检测到的是另一种电平,因此我们可以在按键一端和另一极之间接一个电路:

按键接到地,电阻接到电源,这是一种很常见的接法,其中的电阻称为上拉电阻,取值几千欧到几十千欧都没啥问题。这个电阻可以在单片机内部,也可以是一个独立的元件。在我们的开发板上,4个按键(以及4个开关,后面会提到)是通过排阻上拉的。


为什么把按键接在地上用上拉,而不是接在正电源上用下拉?这是个很复杂的问题。尽管在布尔代数中0和1是完全对称的,但电子毕竟是电子而空穴是电子的缺失,由于某些很复杂的原因,导致上拉比下拉更加常见(得多)。事实上,AVR单片机的引脚可以配置独立的上拉电阻,但是没有下拉电阻可选(部分新型号中有)。


如果你没有受过上拉电阻思想的熏陶,对于拨动开关,你可能会想到这种接法:

这种接法不需要额外的元器件,听起来很妙。然而,虽然可行,这是一种不好的方法。万一两个触点之间短路了怎么办?整块开发板都短路保护了。尽管短路保护听起来安全,但即使保护起来,在解决短路问题之前,开发板还是不能用的。还有一种情况,我真的碰到过,就是单片机上两个相邻的读取开关的引脚因为焊接时的疏忽短路了,导致一旦这两个开关状态不一样就会触发短路保护。总之,这种接法不提倡。


与按键类似,在开关这边我们也可以用上拉电阻的接法:

利用这两种电路,我们成功地将按键不按下与按下分别转换成高电平和低电平,把开关位于下方和上方分别转换成低电平和高电平。那么,单片机怎么读取电平呢?库提供了 pin_read 函数,定义在  中。我们还是通过一个例子来学习其使用方法:保持黄灯和蓝灯的状态分别与按键2和开关2的电平相同。


 1 #include

 2 #include

 3 

 4 #define BUTTON2 PIN_0

 5 #define SWITCH2 PIN_1

 6 

 7 int main()

 8 {

 9     led_init();

10     pin_mode(BUTTON2, INPUT);

11     pin_mode(SWITCH2, INPUT);

12     while (1)

13     {

14         led_set(LED_YELLOW, pin_read(BUTTON2));

15         led_set(LED_BLUE  , pin_read(SWITCH2));

16     }

17 }


异常简单的例子,不是吗?用 pin_read 读取引脚电平,再把LED设置为相应值。

当程序涉及端口操作时,为了能在硬件连接改变时方便地修改程序,建议用宏或常量建立设备与引脚之间的映射关系。这样在修改时就只有这个映射关系需要改动了,总比程序每一处调用都修改要方便得多。


值得一提的是,尽管今天的教程介绍了更底层的知识,但这仍不是我们能达到的最底层的地方。在几篇教程之后,你就可以抛弃库函数了。

关键字:AVR  单片机教程  数字输入 引用地址:AVR单片机教程——数字输入

上一篇:AVR单片机教程——数字输出
下一篇:AVR单片机教程——拨动开关

推荐阅读最新更新时间:2024-11-05 15:06

Maxim MAX22190八通道数字输入器件, 让工业4.0PLC系统更强大
专注于引入新品并提供海量库存的电子元器件分销商贸泽电子 ( Mouser Electronics ) 即日起开始分销 Maxim Integrated 的 MAX22190 八通道工业数字输入器件。MAX22190是符合IEC61131-2标准的高度集成数字输入器件,能够降低 可编程逻辑控制器 (PLC) 数字输入子系统的功耗、系统成本和尺寸,可用于 工业 、过程以及楼宇自动化应用。 贸泽备货的 Maxim MAX22190 可将八个24 V灌电流工业输入转换为与3 V至5.5 V逻辑接口的串行SPI兼容输出。MAX22190具备容错功能,尺寸为5 mm × 5 mm,并集成了电流设置电阻器,可配置为IEC611
[工业控制]
Maxim MAX22190八通道<font color='red'>数字</font><font color='red'>输入</font>器件, 让工业4.0PLC系统更强大
avr-gcc中关于delay延时函数的应用
在51中我们的延时函数都是自己编写的,无论是在汇编中还是在C言语中。虽然有模板,有时还是有点烦。呵呵。不过在应用avr 单片机的时候我们就有福了。因为avr-gcc 提供给我们很方便的delay 延时函数, 只有在源文件包含: #i nclude util/delay.h 就可以使用了。这个头文件定义了两个级别的延时函数分别是: ; 在51中我们的延时函数都是自己编写的 void _delay_us (double __us) ; //微秒级 void _delay_ms (double __ms); //毫秒级 sp; 不过不可以高兴的太早,因为要在你的avr-gcc中正确使用它们是有条件的
[单片机]
<font color='red'>avr</font>-gcc中关于delay延时函数的应用
AVR单片机模拟的串口程序
在一些应用中 , 经常要用到双串口,但是一般单片机只提供一个串口,其实完全可以用普通I/O口模拟一个串口。以下的程序是我编写的模拟串口程序,程序中使用了单片机的定时器0,和INT0中断。数据的发送和接收由中断程序自动进行。程序已经过AVR仿真器仿真和实际烧片使用,证明可靠。有一点需要说明的是,此模拟的串口为半双工方式。 主程序中,单片机将标准串口设置为115200bps,将模拟串口设置为19200bps。单片机将标准串口收到的数据从模拟串口发送出去,将模拟串口接收到的数据从标准串口发送回来。 ;*****************************************************************
[单片机]
基于AVR单片机的船舶气象仪测试系统的设计与实现
船舶气象仪是船舶导航系统设备之一,可测量船舶所在位置海区的风速、风向、温度、湿度、气压等多项气象要素,可向船舶的导航系统传送实时的气象参数。船舶气象仪一旦出现故障,将会影响船舶操作人员对各种气象要素的估计和判断,甚至导致航行船舶失控、搁浅、触礁、倾覆等严重事故。为了保障船舶气象仪能够时刻处于良好的状态,需要先进的测试技术和便携式的测试设备对船舶气象仪的运行情况进行检测。但是,目前市面上还没有出现一套完整的测试系统来完成对现有船舶气象仪的检测任务,以满足船舶操作人员的使用和保障需求。针对目前船舶上普遍使用的气象仪器专门设计的船舶气象仪测试系统,能够很好地完成船舶气象仪的故障测试任务,缩短船舶气象仪的测试诊断时间,满足船舶气象仪的快
[单片机]
AVR单片机的RTOS-AVRX应用
引 言 随着技术的发展,嵌入式系统的设计及应用对人们的生活产生了很大的影响,并将逐渐改变人们未来的生活方式。在特定的操作系统上开发应用程序,可以使开发人员忽略掉很多底层硬件细节,使得应用程序调试更方便、易于维护、开发周期缩短并且降低开发成本,因而嵌入式操作系统深得开发人员的青睐。 AVR 微处理器是Atmel公司开发的8位嵌入式RISC处理器,它具有高性能、高保密性、低功耗、非易失性等优点,而且程序存储器和数据存储器可独立编址,并具有独立访问的哈佛结构。AVR单片机内核有丰富的指令集,通过32个通用寄存器直接与逻辑运算单元相连接,允许在一个周期内一条单一指令访问两个独立的寄存器,这样的结构使代码的执行效率比传统的
[单片机]
AVR工具指南(二)
ATMEL公司的AVR单片机,是增强型RISC内载Flash的单片机,芯片上的Flash存储器附在用户的产品中,可随时编程,再编程,使用户的产品设计容易,更新换代方便。AVR单片机采用增强的RISC结构 ,使其具有高速处理能力,在一个时钟周期内可执行复杂的指令,每MHz可实现1MIPS的处理能力。AVR单片机工作电压为2.7-6.0V,可以实现耗电最优化。AVR的单片机广泛应用于计算机外部设备 ,工业实时控制,仪器仪表,通讯设备,家用电器,宇航设备等各个领域。 继续 AVR工具指南(一) 的内容 3. WinCUPL WinCUPL(可编程逻辑通用编译器)是一款可以为SPLD和CPLD创造出非常复杂的逻辑设计的逻辑编译器。该
[单片机]
<font color='red'>AVR</font>工具指南(二)
5. avr定时器/计数器1 快速PWM输出 (比较输出--快速PWM模式)
快速PWM 模式(WGM13:0 = 5、6、 7、14 或15) 可用来产生高频的PWM 波形。快速PWM模式与其他PWM模式的不同之处是其单边斜坡工作方式。计数器从BOTTOM计到TOP,然后立即回到BOTTOM 重新开始。对于普通的比较输出模式,输出比较引脚OC1x在TCNT1 与OCR1x 匹配时置位,在TOP 时清零;对于反向比较输出模式,OCR1x 的动作正好相反。由于使用了单边斜坡模式,快速PWM 模式的工作频率比使用双斜坡的相位修正PWM 模式高一倍。此高频操作特性使得快速PWM 模式十分适合于功率调节,整流和DAC应用。高频可以减小外部元器件( 电感,电容) 的物理尺寸,从而降低系统成本。 工作于快速PWM 模式
[单片机]
单片机控制的PWM斩波式交流净化稳压电源
目前,在各种交流稳压电源中,采用正弦能量分配技术的交流净化稳压电源是一种技术先进的稳压电源。这种电源主要是通过改变晶闸管的触发角θ,来控制调感支路的等效电感,从而起到稳定输出电压的作用。它具有性价比高、可靠性好等特点。 但是这种方式产生的谐波较多,电感损耗较大,噪音明显,尤其对电网产生很大干扰。为此,笔者用高频PWM斩波技术对其进行改造,用MOSFET或IGBT代替TRIAC,通过调节高频交流斩波器的脉冲宽度来调节等效电感。较好地解决了上述问题。 传统的正弦波交流净化电源原理如图1所示。 图1中T是带气隙的自耦变压器,输入交流电接T的B点,由C点输出稳定的交流电压。L、L1和L2是线性电感器,L和双向晶
[单片机]
<font color='red'>单片机</font>控制的PWM斩波式交流净化稳压电源
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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