AVR单片机教程——拨动开关

2019-12-02来源: eefocus关键字:AVR  单片机教程  拨动开关

在按键的上方有4个拨动开关。开关与按键,在原理和使用方法上都是很类似的,但有不同的用途——按键按下后松开就会弹起,而开关可以保存其状态。


 定义了与开关相关的函数。switch_status 对应 button_down ,switch_changed 对应 button_pressed ,使用与按键是基本相同的。

这里通过一个异常简单的例子来演示开关函数的使用,并说明开关操作与按键的细微差别:使LED与开关状态保持同步。


仿照上一篇教程,我们可以简单地把 button_pressed 替换为 switch_changed :


 1 #include

 2 #include

 3 #include

 4 

 5 int main()

 6 {

 7     led_init();

 8     switch_init(PIN_NULL, PIN_NULL);

 9     while (1)

10     {

11         if (switch_changed(SWITCH_0))

12             led_flip(LED_GREEN);

13         delay(40);

14     }

15 }


如果把按键拨到关(即下)再复位单片机,一切安好,但是如果一开始是开的状态,LED的状态会总是与开关相反。为什么呢?因为开关可以保存状态,这是第一个差别。

所以,我们可以每次得知开关状态改变后读取开关状态,并传给LED:


 1 #include

 2 #include

 3 #include

 4 

 5 int main()

 6 {

 7     led_init();

 8     switch_init(PIN_NULL, PIN_NULL);

 9     while (1)

10     {

11         if (switch_changed(SWITCH_0))

12             led_set(LED_GREEN, switch_status(SWITCH_0));

13         delay(40);

14     }

15 }


这也引出了第二个差别——当 switch_changed 返回 true 时,我们不能直接知晓开关的状态,需要手动调用 switch_status ;而对于相应的按键操作,我们知道此时按键一定处于按下的状态。

如果复位时开关状态为开,除了第一次拨动按键以前,LED总是与按键同步的。然而我们的要求是保持同步,当然包括一开始的时候。为了获得正确的初始状态,我们可以在进入主循环前添加以下代码:


1 if (switch_status(SWITCH_0))

2     led_set(LED_GREEN, true);


但事实上,这个问题根本没有那么麻烦,甚至不需要 switch_changed 函数——每次循环读取开关状态,再把LED设置成相应状态即可:


 1 #include

 2 #include

 3 #include

 4 

 5 int main()

 6 {

 7     led_init();

 8     switch_init(PIN_NULL, PIN_NULL);

 9     while (1)

10     {

11         led_set(LED_GREEN, switch_status(SWITCH_0));

12         delay(40);

13     }

14 }


你一开始有没有想到这个简单的方案?如果有,并且第一反应就是这个,那你得开始逐渐改变思路了。这种方案在这个例子中可用,是因为对 led_set 和 switch_status 的调用的成本是很低的,每次循环都调用也没有问题。然而这并不是放之四海而皆准的,有些函数经不起这样频繁的调用。在那样的情况下,检测状态改变,再读取状态,是一种更好的方案。

关键字:AVR  单片机教程  拨动开关 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic481674.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:AVR单片机教程——数字输入
下一篇:AVR单片机教程——按键动作

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

avr单片机功能特性介绍
RISC 优先选取使用频率最高的简单指令,避免复杂指令:并固定指令宽度,减少指令格式和寻址方式的种类,从而缩短指令周期,提高运行速度。由于 AVR 采用了 RISC 的这种结构,使AVR系列单片机都具备了1MIPS/MHz(百万条指令每秒/兆赫兹)的高速处理能力。早期单片机主要由于工艺及设计水平不高、功耗高和抗干扰性能差等原因,所以采取稳妥方案:即采用较高的分频系数对时钟分频,使得指令周期长,执行速度慢。以后的CMOS单片机虽然采用提高时钟频率和缩小分频系数等措施,但这种状态并未被彻底改观(51以及51兼容)。此间虽有某些精简指令集单片机(RISC)问世,但依然沿袭对时钟分频的作法。AVR单片机的推出,彻底打破这种旧设计格局,废除
发表于 2019-12-14
avr单片机功能特性介绍
avr单片机按键程序
  什么是avr单片机  AVR单片机是1997年由ATMEL公司研发出的增强型内置Flash的RISC(Reduced InstrucTIon Set CPU) 精简指令集高速8位单片机。可以广泛应用于计算机外部设备、工业实时控制、仪器仪表、通讯设备、家用电器等各个领域。AVR单片机是 Atmel 公司 1997 年推出的 RISC 单片机。RISC(精简指令系统计算机)是相对于CISC(复杂指令系统计算机)而言的。RISC 并非只是简单地去减少指令,而是通过使计算机的结构更加简单合理而提高运算速度的。  RISC 优先选取使用频率最高的简单指令,避免复杂指令:并固定指令宽度,减少指令格式和寻址方式的种类,从而缩短指令周期,提高
发表于 2019-12-14
avr单片机按键程序
三分钟告诉你:AVR单片机的熔丝与解锁
AVR单片机的熔丝位配置是AVR单片机初学者很容易出错的地方,其实只要注意一些事项,还是能够尽量避免单片机被锁死,即使单片机被锁死,也可以使用一些方法解锁,本文讲述我在刚开始接触AVR单片机时熔丝位配置出现的一些问题。1、AVR单片机的熔丝位是比较独到的特征,可以控制系统的时钟,JTAG调试、看门狗、芯片加密等等。图1是progisp软件,对于初学者来说,对熔丝位不熟悉,可以先将2处的编程熔丝对勾去掉,这样在编程的时候,就不会对熔丝位进行编程,单片机出厂的默认设置就可以使用。点击1处进入熔丝位配置界面。图1图2为位配置方式,这里的每一位都不能随意点击,尤其是熔丝低位控制时钟的地方,一般来说,直接对位进行配置并不安全,一定要确定是
发表于 2019-12-14
三分钟告诉你:AVR单片机的熔丝与解锁
avr单片机和stm32区别与优缺点分析
  摘要:avr单片机和stm32单片机是目前使用较广泛的单片机,那么avr单片机和stm32单片机有什么区别呢?有什么优劣势呢?  一、AVR单片机介绍  AVR单片机是1997年由ATMEL公司研发出的增强型内置Flash的RISC(Reduced InstrucTIon Set CPU) 精简指令集高速8位单片机。可以广泛应用于计算机外部设备、工业实时控制、仪器仪表、通讯设备、家用电器等各个领域。  avr单片机特点:  1. avr系列没有类似累加器A的结构,它主要是通过R16~R31寄存器来实现A的功能。在avr中,没有像51系列的数据指针DPTR,而是由X(由 R26、R27组成)、Y(由R28、R29组成)、Z
发表于 2019-12-14
AVR系列单片机的主要特性及选型
AVR单片机是ATMEL公司研制开发的一种新型单片机,它与51单片机、PIC单片机相比具有一系列的优点:在相同的系统时钟下AVR运行速度最快;芯片内部的Flsah、EEPROM、SRAM容量较大;所有型号的Flash、EEPROM都可以反复烧写、全部支持在线编程烧写(ISP);多种频率的内部RC振荡器、上电自动复位、看门狗、启动延时等功能,零外围电路也可以工作;每个IO口都可以以推换驱动的方式输出高、低电平,驱动能力强;内部资源丰富,一般都集成AD、DA模数器;PWM;SPI、USART、TWI、I2C通信口;丰富的中断源等。目前支持AVR单片机编译器的语言主要有汇编语言、C语言、BASIC语言等。其中C编译器主要有
发表于 2019-12-14
AVR系列单片机的主要特性及选型
如何设计一个以AVR单片机为控制芯片的电子镇流器?
引言电子镇流器是新型节能产品,不仅能带动一些照明灯具,还可以和一些紫外灯结合在一起,对于空气净化和水源净化都有着非常大的作用。当前,全世界都在大力提倡环境保护,电子镇流器间接地为环保提供了原动力。AVR单片机是一款性价比较高的单片机,用这种单片机来对电子镇流器进行调光和时间采样非常合适,首先是AVR单片机本身较稳定,抗干扰能力比较强,其次是其本身的Harvard结构使得运行速度比较快,数据回读时间较快,可以实现实时在线控制。1 AVR单片机介绍1.1 AVR单片机的特点与以往的8位单片机相比,AVR单片机采用Harvard结构,也就是程序总线和数据总线分开,并采用两级流水线,具备1MIPS/MHz的高速运行处理能力。片内集成多种
发表于 2019-12-14
如何设计一个以AVR单片机为控制芯片的电子镇流器?
小广播
何立民专栏 单片机及嵌入式宝典

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

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