目录
1数码管应用场景
2数码管显示原理
3静态与动态显示
474HC573锁存器工作原理
5上拉电阻的作用
6原理图分析
7实践
1数码管应用场景
2数码管显示原理
图(b)左边是共阴极,右边是共阳极
GND是公共极,可以用万用表测,拿黑脚笔接GND,拿宏脚笔接a,如果a亮了就是共阴极,如果没反应可以换一下
3静态与动态显示
4 74HC573锁存器工作原理
使用锁存器节省硬件资源
5上拉电阻的作用
为什么要接上拉电阻?
开漏:可以输出低电平不能输出高电平,加了上拉电阻就可以两个都输出
G与S有一个正偏D与S才导通,G接正电压,S接地这个情况导通,如果G是0,D与S断开
6原理图分析
锁存器io口电流大,用电阻限流一下
视频是锁存器控制数码管,一个是位,一个是段
Q要输出高低电平,OE接地, LE高电平,Q受D的影响
先给LE1,显示位数,再给0,去控制段选
7实践
动态显示:段选并联,动态扫描,利用余晖和视觉暂留,起到数码管同时显示的效果
视频的
#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit DU = P2^6;
sbit WE = P2^7;
//code固定table的值,code很大8kram区小
uchar code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
void delay(unsigned int xms) //@12.000MHz
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
void display(uchar i)
{
uchar bai,shi,ge;
bai=i/100;
shi = i%100/10;
ge = i%10;
//百位
P0 = 0xff;
WE = 1;//打开锁存器(第二次循环时,位选锁存器打开,P0还是第一次循环时的
//0x5b改变了位选的值,此时打开了别的数码管
P0=0xfe;//位选给0
WE = 0;//锁存器锁存
DU = 1;
P0 = 0x06;//0000 0110 共阴极给1亮
DU = 0;
delay(5);
//十位
P0 = 0xff;
WE = 1;//打开锁存器
P0=table[bai];//1111 1101位选给0
WE = 0;//锁存器锁存
P0 = 0xff;
DU = 1;
P0 = table[shi];//0101 1011 共阴极给1亮
DU = 0;
delay(5);
//个位
P0 = 0xff;
WE = 1;//打开锁存器(第二次循环时,位选锁存器打开,P0还是第一次循环时的
//0x5b改变了位选的值,此时打开了别的数码管
P0=0xfb;//位选给0
WE = 0;//锁存器锁存
DU = 1;
P0 = table[ge];//0000 0110 共阴极给1亮
DU = 0;
delay(5);
}
void main()
{
while(1)
{
display(0);
}
}
这个是QX-mini51的
#include <REGX52.H>
void Delay(unsigned int xms);
unsigned char NixieTable[]={~0x3f,~0x06,~0x5b,~0x4f,~0x66,~0x6d,~0x7d,~0x07,~0x7f,~0x6f,~0x77,~0x7c,~0x39,~0x5e,~0x79,~0x71,~0x00};
void Nixie(unsigned char location,number){
switch(location)
{
case 1:
P2=0x0e;
break;
case 2:
P2=0x0d;
break;
case 3:
P2=0x0b;
break;
case 4:
P2=0x07;
break;
}
P0=NixieTable[number];
Delay(1);
P0=0xff;
}
void Delay(unsigned int xms) //@12.000MHz
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
void main(){
while(1){
Nixie(1,1);
//Delay(200);
Nixie(2,2);
//Delay(200);
Nixie(3,3);
//Delay(200);
}
}