面向接口的编程——平台技术、开关量信号
按照前面的思路,在点亮灯之后,延时一段时间,让"亮灯状态"保持一段时间,再熄灭LED 灯,再延时一段时间,让"熄灭状态"保持一段时间,详见程序清单4.4。
程序清单4.4 单个LED 闪烁范例程序(1)
其实LED 不停地闪烁就是让一个I/O 不断翻转的过程,而AMetal 软件包针对LED 提供了翻转LED 状态的函数led_toggle(),优化后的代码详见程序清单4.5。
程序清单4.5 单个LED 闪烁范例程序(2)
MiniPort-LED 模块集成了8 个LED,均为低电平有效,分别通过PIO0_8~PIO0_15 控制,其中的R1~R8 为LED 的限流电阻,详见图4.7。
图4.7 LED 模块电路
LED 模块通过MiniPort B(排母)与AM824-Core相连,同时将其余不使用的I/O 通过MiniPort A(排针)引出,实现模块的横向堆叠,其对应AM824-Core 的MiniPort 接口J4 的功能定义详见图4.8。
图4.8 LED 模块实物与接口定义图
下面将以LED 流水灯为例说明通用函数接口的应用开发方法。人们时常看到户外动画广告,一会儿从左到右显示,一会儿又从右到左显示,这就是流水灯效果。现在用LED 流水灯来模拟户外动画广告,使LED 顺时针旋转循环流动。假设上电初始化,将所有的GPIO 都配置为输出,且初始化为高电平,即所有的LED 全部熄灭。首先点亮LED0,延时后熄灭LED0;接着点亮LED1,延时后熄灭LED1......;然后点亮LED7,延时后熄灭LED7;接着点亮LED0,延时后熄灭LED0……,周而复始形成了循环的圆环,详见程序清单4.6。
程序清单4.6 LED 流水灯范例程序(1)
流水灯实验使用的是MiniPort-LED 的8 个LED,其对应的控制引脚与AM824-Core 上两个LED 对应的控制引脚是不同的。当使用MiniPort-LED 时,需要将led.h 文件中的宏USE_MINIPORT_LED 对应的值修改为1,表明使用MiniPort-LED。该宏的默认值为0,使用AM824-Core 板载的两个LED 灯。
显然,LED 流水灯是一个典型的"首尾相接"算法,循环队列与环形缓冲区等都属于同一类问题,这是一种常用的软件设计模式,优化后的代码详见程序清单4.7。
程序清单4.7 LED 流水灯范例程序(2)
如图4.9 所示为无源蜂鸣器电路原理图,只要短接J7_1 与J7_2,则蜂鸣器接入PIO0_24。当PIO0_24 输出低电平时,则三极管导通,向蜂鸣器供电;当PIO0_24 输出高电平时,则三极管截止,停止向蜂鸣器供电。因此只需要轮流切换PIO0_24 的电平状态,就可以控制蜂鸣器的"通电"和"断电",即以一定的频率翻转PIO0_24 的输出电平。其实接通和断开"一段时间"的总和就是蜂鸣器的振荡周期,再稍作转换就能够得到确定的音频脉冲频率参数。从而产生机械振动音,只要频率在人耳听觉范围内,即可听到蜂鸣器发声。
图4.9 蜂鸣器电路图
显然,通过翻转引脚电平和延时,也可以让蜂鸣器发出固定频率的声音。假如使蜂鸣器发出1KHz 频率的声音,1KHz 频率对应的周期为:T=1/1000(s)=1(ms),由于一个周期是低电平(接通)时间和高电平(断开)时间的总和,因此在一个周期内,高、低电平保持的的时间分别为500us。由此可见,要使蜂鸣器不间断地发声,只要以500us 的时间间隔不断的翻转引脚的输出电平即可。当需要控制蜂鸣器时,可直接调用蜂鸣器接口,buzzer.h文件内容详见程序清单4.8 buzzer.h 接口。
程序清单4.8 buzzer.h 接口
buzzer_init()会将发声频率设置为默认值:1KHz。如需修改发声频率为其它值,如:2.5KHz,则应调用发声频率设置函数,即"buzzer_freq_set(2500);",详见程序清单4.9。
程序清单4.9 蜂鸣器发声范例程序
编程 相关文章:
- 基于单片机的可编程直流稳压电源设计(08-17)
- 利用可编程电源平衡输入纹波电流的解决方案(09-11)
- 可编程电源设计(01-12)
- NXP (Freescale) i.MX7 96Board(05-17)
- 可编程逻辑控制器(PLC)基本操作及功能简介(03-07)
- 分析机器人离线编程误差来源(06-28)