文章目录
一、数码管介绍
1、什么是数码管
2、数码管原理图
3、数码管引脚定义
共阴极和共阳极:(见上图)
共阴极(51开发板)和共阳极 以及电平测试思路
测试思路:共同段都设置为1,若是共阴,另一端输入0\1都不亮;若共阳,另一端输入0会亮
8个数码管的名称顺序:见上图
位选:显示哪个8个数码管中的数码管
段选:显示哪个数码管
数码管的段码表
4、数码管驱动方式
5、点亮一个数码管代码
二、138译码器原理图
进行位选(对哪8个数码管进行操作)
通过连接芯片的P2口控制位选
三、缓冲器
缓冲器作用
1、控制信号传递方向
2、放大高电平信号
3、确定位选后,通过 P0口给段码数据,来控制数码管的亮灭
dir:direction,接高电平将数据送到右边,低电平读取右边数据
四、静态数码管显示
代码编辑及含义
#include <REGX52.H>
unsigned char Nixietable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //所有可以显示的数字,包括0,1,2,3,4,5,6,7,8,9
void Nixie(unsigned char Location,Number) //定义位置和要显示的数字
{
switch(Location)
{
case 1:P2_4=1;P2_3=1;P2_2=1;break; //使用译码器来进行位选
case 2:P2_4=1;P2_3=1;P2_2=0;break;
case 3:P2_4=1;P2_3=0;P2_2=1;break;
case 4:P2_4=1;P2_3=0;P2_2=0;break;
case 5:P2_4=0;P2_3=1;P2_2=1;break;
case 6:P2_4=0;P2_3=1;P2_2=0;break;
case 7:P2_4=0;P2_3=0;P2_2=1;break;
case 8:P2_4=0;P2_3=0;P2_2=0;break;
}
P0=Nixietable[Number];//显示的数字与数组位置一一对应
}
void main()
{
Nixie(5,0); //根据坐标选择要点亮的数码管,含义为第五个数码管显示0
while(1)
{
}
}
五、动态数码管显示
1、数码管消影
原因:
数据串位
解决方式:
每次进行初始化,将其归零
P0=0x00;
2、代码编辑及含义
#include <REGX52.H>
void Delay(unsigned int xms)
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
}
while (--i);
}
}
unsigned char Nixietable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void Nixie(unsigned char Location,Number)
{
switch(Location)
{
case 1:P2_4=1;P2_3=1;P2_2=1;break;
case 2:P2_4=1;P2_3=1;P2_2=0;break;
case 3:P2_4=1;P2_3=0;P2_2=1;break;
case 4:P2_4=1;P2_3=0;P2_2=0;break;
case 5:P2_4=0;P2_3=1;P2_2=1;break;
case 6:P2_4=0;P2_3=1;P2_2=0;break;
case 7:P2_4=0;P2_3=0;P2_2=1;break;
case 8:P2_4=0;P2_3=0;P2_2=0;break;
}
P0=Nixietable[Number];
P0=0x00; //数字消影
}
void main()
{
while(1)
{
Nixie(2,5);
//Delay(200); //消影和延时不能同时出现,延时可出现跑马灯效果
Nixie(3,2);
//Delay(200);
Nixie(4,0);
//Delay(200);
Nixie(5,1);
//Delay(200);
Nixie(6,3);
//Delay(200);
Nixie(7,1);
//Delay(200);
Nixie(8,4);
//Delay(200);
}
}
零碎
电容读数:类似电阻读数