大家好!今天是学习51单片机的第三天,今天学习了数码管的硬件知识,学习笔记如下:
首先,数码管是由多个发光二极管组成的,按组成发光二极管的数目可以分为7段数码管和8段数码管,其中8段数码管比7段数码管会多一个小数点。
按照发光二极管单元的连接方式,可分为共阳极数码管和共阴极数码管。
共阳极数码管,共同接口COM接到5V高电平,如果某个端口接低电平,则那个端口亮。
同理,共阴极数码管,共同接口COM接到低电平,如果某个端口为高电平,则那个端口亮。
数码管的显示原理:
引脚图:
结合上面两图,如果要显示数字“1”,则需要字段b,c亮。那么记住e,f,g,小数点这是高四位,a,b,c,d 为低四位。
那么共阴极数码管对应的二进制为0000/0110,换成十六进制为0x06。
那么共阳极数码管对应的二进制为1111/1001,换成十六进制为0xf9。
其他数字可以自行推理一下。
数码管静态显示原理
静态显示的特点是每个数码管的段选必须接一个 8 位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。
利用代码实现下列现象:
下载程序后“数码管模块”最左边数码管显示数字0。
代码如下:
#include "reg52.h"
typedef unsigned int u16; //对系统默认数据类型进行重定义
typedef unsigned char u8;
#define SMG_A_DP_PORT P0 //使用宏定义数码管段码口
u8 gsmg_code[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void main()
{
SMG_A_DP_PORT=gsmg_code[0];//将数组第1个数据赋值给数码管段选口
while(1)
{
}
}