静态数码管显示原理
数码管是一种简单的廉价的显示器,是由多个发光二级管封装在一起的组成8字型的器件
数码管分为共阴极共阳极连接。
其中八个共阴极的数码管来说,当我们把数码管的任意一个阳极加一个高电平的时候,对应的发光二极管也就点亮了,可以给八个阳极全部送高电平,如果想显示0,可把g.dp设为低电平
以下是采用共阴极连接的数码管
数码管显示主要分为位选和段选,其中可以运用74HC595和74HC573进行实现
74HC595控制数码管
首先是74HC595,74HC595的作用是通过三个IO口来控制数码管的八个位置是否被点亮,起到减少使用IO口的作用
接下来我们来实现让数码管静态显示数字,这里我们运用了C语言里面的数组,子函数的知识;
这里我们把0-9数字的段码表放到一个数组中,然后通过一个函数将位选(选数码管哪个位置点亮)段选(一个数码管怎么量),用一个Switch函数,用8个case来表示数码管的八个位置,然后将数组赋给P0口;函数中的第一个变量是数码管的位置,第二个变量是数码管显示的数字
#include <REGX52.H>
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];
}
void main()
{
Nixie(8,9);
while(1)
{
}
}
动态数码管显示
注意这里运用了数码管消隐:Delay(1);/ P0=0X00;
#include <REGX52.H>
unsigned char NixieTable[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};//数码管数组定义
void Delay(unsigned char xms)//延时函数
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
void Nixie(unsigned char Location,Number)//定义一个函数
{
switch(Location)//运用Switch函数的选择功能再配合通过74HC595通过三个IO口对数码管进行位选
{
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];
Delay(1);//数码管消隐
P0=0X00;
}
void main()
{
while(1)
{
Nixie(1,1);
// Delay(20);
Nixie(2,2);
// Delay(20);
Nixie(3,3);
// Delay(20);
Nixie(4,4);
Nixie(5,5);
Nixie(6,6);
Nixie(7,7);
Nixie(8,8);
}
}
74H573控制数码管
这里我们运用了两个74HC573一个用来位选一个用来段选
#include <REGX52.H>
sbit WE=P2^7;//位
sbit DU=P2^6;//段
void main()
{
WE=1;
P0=0xfe;
DU=1;
P0=0x3f;
DU=0;
while(1)
{
}
}