单片机 数码管的发光
扫描二维码
随时随地手机看文章
数码管的显示原理都一样,都靠点亮内部发光二极管来发光。TX-1C 的单片机开发板是6位数码管。数码管的引脚是10个,显示8字需要7个小段,外加一个小数点,共有8个发光二极管,还有一个公共端。公共端分为共阳极和共阴极,共阴极即8个二极管的阴极连在一起,共阳极即8个二极管的阳极连在一起。TX-1C开发板的数码管位共阴极。多为一体的数码管,内部的公共端是独立的,而负责显示什么数字的断线是全部连在一起的,独立的公共端可以控制多位一体中的哪一位数码管点亮,而连在一起的段线可以能控制这位数码管能亮出什么数字。公共端叫作位选线,连在一起的段线叫作段选线。有了这两根线,就能通过单片机控制任意的数码管显示任意的数字。
(1) 数码管的静态显示
在同一时刻,位选选通的数码管显示的数字始终是相同的,因为它们的段选是连在一起的,所以送入的数码管的段选信号是相同的。数码管的这种显示方法叫静态显示法。
6个数码管的位选端与74HC573锁存器U2的低六位连接,锁存器的数据输入端连接到P0口。6个数码管的a、b、c、d、e、f、g、h的引脚分别连在一 起,然后与74HC573锁存器U1的数据输出端连接,锁存器的数据输入端也与P0口相连。U1 、U2的锁存端与P2口的6、7位相连。
代码
#include
sbit dula=P2^6; // 申明U1锁存器的锁存端
sbit wela=P2^7; // 申明U2锁存器的锁存端
void main()
{
wela=1; //打开U2锁存器
P0=0xfe; //送入位选信号
wela=0; //关闭U2锁存器
dula=1; //打开U1锁存器
P0=0x7f; //送入段选信号
dula=0; //关闭U1锁存器
}
以上就是数码管静态显示的代码。
(2)数码管的动态显示
第一个数码管显示1,时间为0.5秒,然后关闭它。第二个数码管显示2,时间为0.5秒………………
代码如下:
#include
#define uchar unsigned char
#define uint unsigned int
uchar code table_1[]={ 0x1, 0x2, 0x4, 0x8, 0x10, 0x20 }; //位选信号
uchar code table_2[]={ 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x77, 0x7c, 0x39, 0x5e, 0x79, 0x71 }; //段选信号
void delays(uint); //延时函数
uint h;
void main()
{
while(1)
{ for( h=1; h<=6; h++)
{ dula=1; //打开段选
P0=table_2[h]; // 送入段选信号
dula=0; // 关闭段选
P0=0xff; // 消影语句,每次送入段选信号后,P0口仍然保留着上次的段选数据,若不加 P0=0xff; 在执行打开位选锁存器命令后,P0口
段选数据会立即加在数码管上,,接下来才是再次通过P0口给位选锁存器送入位选数据。这个过程很短暂,但我们仍能看见 数码管显示混乱的现象。加上消影语句后就能避免这样的状况发生
wela=1; // 打开位选
P0=table_2[h]; //送入位选信号
wela=0; // 关闭位选
delay(500);
}
}
}
void delay( uint xms) // 延时函数 (在下篇会和锁存器一并作出叙述)
{
uint i,j;
for( i=mxs; i>0; i--)
for( j=110; j>0; j--);
}