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,在定时中断服务例程中,调用该函数一次。由于人眼的视觉暂留,就可稳定的显示需要的内容。
编程过程
- 根据LED实际使用的MCU引脚,修改led.h文件中“LED的硬件接线”
- 在“includes.h”文件中声明全局变量位置声明LED显示缓冲区数组。
- 在main.c文件中“变量赋初值”位置给LED显示缓冲区赋初值
- 在isr.c的某一定时中断处理函数中添加调用LEDshow函数定时刷新,利用视觉暂留显示缓冲区中的全部内容。
只要main函数中正常初始化并开启SysTick中断及总中断,LED就正常显示了。任何程序中改变LED显示缓冲区g_LEDBuffer的值,LED显示随即改变。
嵌入式技术基础与实践(第4版)
来源:CSDN
作者:林决明
链接:https://blog.csdn.net/qq_40883804/article/details/103246845