基础知识:
单片机系统中常用的显示器有:
发光二极管LED(Light Emitting Diode)显示器、液晶LCD(Liquid Crystal Display)显示器、TFT液晶显示器等。LED显示器有两种显示结构:段显示 (7段、米字型等) 和点阵显示 (5X8、8X8点阵等)
LED数码管根据LED的不同接法可以分为2类:共阴和共阳。
共阴极接法:将八个LED的负极全部接到0V,只有当我们给出一个正极1的信号才会亮。
共阳极接法:将八个LED的负极全部接到+5V,只有当我们给出一个0的信号才会亮。
使用LED显示器时,要注意区分这两种不同的接法。为了显示数字或字符,必须对数字或字符进行编码。七段数码管加上一个小数点,共计8段。因此为LED显示器提供的编码正好是一个字节。
LED数码管显示原理
举例说明一下:
假如我们需要显示一个2,那么对应的就要点亮途中的a,b,d,e,g,其他的全部都要熄灭,这样显示出来的数码管才是我们想要的结果。(假设八位LED刚好全部对应接到一个P口,而且还是从dp算最高位、a为最低为的接法)
所以对于共阴极接法来说,那么就要输出一个0101 1011的信号,转换成16进制的话,就是0x5B
而对于共阳极接法的话,那么就要输出1010 0100,转换成16进制的话就是0xA4
LED数码管静态显示的原理:
静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。这种方法的优点是占用CPU时间少,显示便于监测和控制。缺点是硬件电路比较复杂,成本较高
技能进阶:(数组)
单片机的数组结构是一种用来存储多个相同类型数据的数据结构,它可以用一组连续的内存空间来存储数据,也可以用指针来连接一组零散的内存块。数组结构可以方便地通过下标来访问数组中的元素,也可以通过结构体来封装数组和相关的函数,实现更高级的功能。
使用数组结构的方法有以下几点:
定义数组时,需要指定数组的类型、名称和大小,例如 int array[10]; 定义了一个有10个整数元素的数组。
初始化数组时,可以用花括号包含一组初始值,例如 int array[10] = {1,2,3,4,5,6,7,8,9,10}; 初始化了一个数组,每个元素的值等于其下标加一。
访问数组时,可以用数组名和下标来表示一个元素,例如 array[3] 表示数组中第四个元素,其值为4。注意下标从0开始计数。
修改数组时,可以用赋值语句来改变某个元素的值,例如 array[3] = 5; 将第四个元素的值改为5。
遍历数组时,可以用循环语句来依次访问每个元素,例如 for(i=0;i<10;i++) printf("%d ",array[i]); 将打印出数组中所有元素的值。
使用结构体时,可以将数组和相关的函数定义为一个新的数据类型,例如 struct LED { unsigned char array[8]; void (*on)(int); void (*off)(int); }; 定义了一个LED结构体,包含一个8位的数组和两个函数指针。这样可以方便地对外设进行操作,例如 LED led; led.on(3); 将点亮第四个LED灯。
程序编写:
#include
unsigned char code sunduan[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};
//创建一个数组的结构,此时采用的是共阳极接法,将0-F的显示使用了数组的结构创建出来
void main()
{
P2=sunduan[0]; //要显示一个0,即在P2口上接入了一个LED数码管之后,需要显示的数值,直接从编辑号的数组中挑选出来即可。
}
仿真展示:
可以看到,当我们启动仿真时,这个时候,就会在P2组管脚上的输出情况(P2.0 ~ P2.5全输出0,P2.6 ~ P2.7输出1)因为LED数码管采用的是共阳极接法,所以a~f全部点亮,g和dp都熄灭,这样展示出来的效果就是一个0的数字。
程序除了上述的数组结构之外,其实还可以直接通过点亮单片机的输出管脚单独控制。
全部0条评论
快来发表一下你的评论吧 !