GPIO应用-LED

。_饼干妹妹 提交于 2020-01-10 15:49:30

LED

由8个发光二极管LED按照组成数字0到9的方式进行物理连接,形成LED数码管,简称LED

LED的选择

需要根据实际应用的需求来决定,若只需要显示数字“0”~“9”,需要7段LED即可。

若同时需要显示小数点,则需要8段LED

8段数码管由8个发光二极管LED组成。

MCU是通过I/O引脚来控制LED某段发光二极管的亮暗,从而达到显示某个数字的目的。

控制LED亮暗

确定选用的数码管是共阴极数码管或共阳极数码管。

共阴极数码管:公共端需要接地,8段数码管的信号端高电平有效,只需要在各段加上高电平信号即可使相应的段发光。

共阳极数码管:公共端接电源阳极,8段数码管的信号端低电平有效,只需要在各段加上低电平信号即可使相应的段发光。

例如共阳极8段数码管,[hgfedcba]=[0111 1111]时,h段亮,显示为小数点;[hgfedcba]=[1100 0000]时,除h、g段均亮,显示为数字“0”或字母“O”。

单个LED只能显示一个数字或字母,实际中使用多个LED显示多个数字或字母。

电气参数

能承受的最大电流;额定电压;限流电阻;电流放大电路。

对LED编程

通过一个8位数据线的数据口来控制段。

8段数码管的公共端根据共阴或共阳接到固定的低电平或高电平,现在接到MCU的一个输出引脚(片选信号)由MCU控制,这些n个数码管合在一起称为n连排数码管。

四连排共阴极8段数码管共有12根线需要连接到MCU。

若要控制更多数码管,还可以外加一个译码芯片。

各个数码管的段信号端称为数据端分别对应相连,可以由MCU的8个引脚控制,同时还有4个位选信号也称为控制端。

位选是指向第几个数码管,用于分别选中要显示数据的数码管,可用MCU的4个引脚来控制。

每个时刻只让一个数码管有效,即只有一个位选信号为0,其他为1,由于人眼的视觉暂停效应,看起来则是同时显示的效果。

这种n连排数码管也称动态扫描数码管,其含义就是任何一个时刻,只有一个数码管显示,而整体上看起来一起显示,是由于MCU对其动态刷新,而人眼具有视觉暂留效应而造成的现象。

驱动构件设计

LED与MCU的硬件接线在工程中使用宏定义描述,且每个接线单独使用宏定义,更具有普适性,若LED接在MCU的不同引脚,只需修改LED的硬件接线宏定义即可。

LED数码管各字母及数据的显示码

在头文件led.h中给出了主要函数的声明,主要包括LED初始化LEDInit;LED显示LEDshow。

在初始化函数中将相关MCU引脚初始化为GPIO功能,并将所有数码管初始化状态设置为暗。

显示函数的主要功能是将入口参数的4字节数组中的内容显示在数码管上。

数组中的哪一个字节显示在数码管的那个位置上?

虽然一个时刻只能显示一个数码管,但可以使用静态变量确定下次要显示的位选信号,这样显示函数就可使用4字节数组作为形参,实际调用时,将待显示的4字节数组作为实参传入即可。

每隔10ms,在定时中断服务例程中,调用该函数一次。由于人眼的视觉暂留,就可稳定的显示需要的内容。

编程过程

  1. 根据LED实际使用的MCU引脚,修改led.h文件中“LED的硬件接线”
  2. 在“includes.h”文件中声明全局变量位置声明LED显示缓冲区数组。

     

  3. 在main.c文件中“变量赋初值”位置给LED显示缓冲区赋初值

     

  4. 在isr.c的某一定时中断处理函数中添加调用LEDshow函数定时刷新,利用视觉暂留显示缓冲区中的全部内容。

     

只要main函数中正常初始化并开启SysTick中断及总中断,LED就正常显示了。任何程序中改变LED显示缓冲区g_LEDBuffer的值,LED显示随即改变。

 

 

嵌入式技术基础与实践(第4版)

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!