目录
一、硬件接线原理图
1、数码管接线原理图(共阳极)
2、数码管锁存器接线原理图
其中芯片(74HC573)U8为位选(位选控制选择具体数码管),U9为段选(段选控制数码管具体的显示)
二、数码管显示
1、静态显示
(1)、程序(keil)
#include<reg52.h> //51头文件
#include<intrins.h>//循环位移函数
#define uint unsigned int
#define uchar unsigned char
sbit DU = P2^6;
sbit WE = P2^7;
void main()
{
WE = 1;//打开位选锁存
P0 = 0XFE;
WE = 0;//锁存数据
DU = 1;//打开段选锁存
P0 = 0X30;//位选显示数字1
DU = 0 ;
while(1);
}
(2)、程序烧录
(3)、效果演示
2、动态显示
(1)、程序(keil)
#include<reg52.h> //51头文件
#include<intrins.h>//循环位移函数
#define uint unsigned int
#define uchar unsigned char
uchar a=10,b=5,c=0,d=0,temp;//a为小时数,b为分钟数,c为秒数
uchar hourG,hourD,minG,minD,secG,secD; //G为十位数,D为个位数
uchar code table1[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,};//段选显示数字
uchar code table3[] = {0xBF, 0x86, 0xDB, 0xCF, 0xE6, 0xED, 0xFD, 0x87, 0xFF, 0xEF,};//段选显示带点数字
uchar code table2[] = {0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F,};//位选显示数字
sbit DU = P2^6;
sbit WE = P2^7;
//延时函数
void delay(uint z)
{
uint x, y;
for(x = z; x > 0; x--)
for(y = 114; y > 0; y--);
}
//主程序
void main()
{
while(1)
{
if(a<24)
{
//小时
temp = 0XFF;
hourG =a / 10;
hourD =a % 10;
P0 = temp;
WE = 1;
P0 = 0XFE;
WE = 0;
P0 = 0x00;
DU = 1;
P0 = table1[hourG];
DU = 0;
delay(1);
P0 = temp;
WE = 1;
P0 = 0XFD;
WE = 0;
P0 = 0x00;
DU = 1;
P0 = table3[hourD];
DU = 0;
delay(5);
//分
if(b<60)
{
minG =b / 10;
minD =b % 10;
P0 = temp;
WE = 1;
P0 = 0XFB;
WE = 0;
P0 = 0x00;
DU = 1;
P0 = table1[minG];
DU = 0;
delay(1);
P0 = temp;
WE = 1;
P0 = 0XF7;
WE = 0;
P0 = 0x00;
DU = 1;
P0 = table3[minD];
DU = 0;
delay(1);
//秒
if(c<60)
{
secG =c / 10;
secD =c % 10;
P0 = temp;
WE = 1;
P0 = 0XEF;
WE = 0;
P0 = 0x00;
DU = 1;
P0 = table1[secG];
DU = 0;
delay(1);
P0 = temp;
WE = 1;
P0 = 0XDF;
WE = 0;
P0 = 0x00;
DU = 1;
P0 = table1[secD];
DU = 0;
delay(1);
//秒闪烁灭
if(d<97)
{
d++;
}
else
{
d=0;
c++;
}
}
else
{
c = 0;
b++;
}
}
else
{
b = 0;
a++;
}
}
else
{
a=0;
}
}
}
(2)、程序烧录
(3)、效果演示
a、快速动态效果
数码管动态显示快速效果
b、正常时间显示
数码管动态时间显示
三、仿真
仿真部分无法正常显示,后续再补充吧,暂时先这样了