数码管有发光二级管组成,单个二极管由10个管脚组成,其中3号和8号管脚相连,它分为共阳极和共阴极两种,
共阳极的编码:uchar code table[]={0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};
代表:"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F";
共阴极编码:uchar code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
数码管的点亮电流约5mA,而单片机I/O管脚的输出电流小于5mA,故使用数码管时需要添加驱动电路如74HC573芯片;
对六位一体或多位一体的数码管,他们内部的公共端是独立的,负责显示数字的段线连接在一起,公共端也叫位选线控制哪位数码管点亮,段线也叫段选线控制显示什么数字。
数码管分为静态显示和动态显示两种;
显示电路
驱动电路
控制电路
最小系统电路(系统时钟,复位)
用共阴极静态显示1--F个字符,每个显示0.5s:
#include<reg52.h>//单片机头文件
#define uchar unsigned char//宏定义
#define uint unsigned int
sbit dula=P2^6;//申明U2锁存器的锁存端
sbit wela=P2^7;//申明U3锁存器的锁存端
uchar code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uint num;
void delayms(uint xms)//延时函数
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void main()
{
wela=1;//输入位选信号
P0=0xc0;//送入位选数据
wela=0;//关闭位选信号
while(1)
{
for(num=0;num<16;num++)
{
dula=1;//输入段选信号
P0=table[num];//输出显示的数据
dula=0;//关闭位选信号
delayms(500);//延时500ms
}
}
}
动态显示:依次让数码管显示,每次显示0.3s
#include<reg52.h>//单片机头文件
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;//申明U2锁存器的锁存端
sbit wela=P2^7;//申明U3锁存器的锁存端
uchar code table[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delayms(uint xms)//延时函数
{
uint i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
void main()
{
while(1)//循环
{
dula=1;
P0=table[1];//送段选数据
dula=0;
P0=0xff;//消影
wela=1;
P0=0xfe;//送位选数据
wela=0;
delayms(300);
dula=1;
P0=table[2];//送段选数据
dula=0;
P0=0xff;//消影
wela=1;
P0=0xfd;//送位选数据
wela=0;
delayms(300);
dula=1;
P0=table[3];//送段选数据
dula=0;
P0=0xff;//消影
wela=1;
P0=0xfb;//送位选数据
wela=0;
delayms(300);
dula=1;
P0=table[4];//送段选数据
dula=0;
P0=0xff;//消影
wela=1;
P0=0xf7;//送位选数据
wela=0;
delayms(300);
dula=1;
P0=table[5];//送段选数据
dula=0;
P0=0xff;//消影
wela=1;
P0=0xef;//送位选数据
wela=0;
delayms(300);
dula=1;
P0=table[6];//送段选数据
dula=0;
P0=0xff;//消影
wela=1;
P0=0xdf;//送位选数据
wela=0;
delayms(300);
}
}
所谓动态显示是利用人的视觉无法区分间隔小于0.1s的图像,实质是多位数码管一位一位的轮流显示的。
定义特殊的位用:sbit
定义特殊的字符用:sfr