数码管介绍
原理
由多个发光二极管封装在一起组成8字形的器件,
数码管引脚定义
1 共阴极:公共端接地,位选,需点亮的接高电平。
2 共阳极:公共端接VCC,位选,需点亮的接低电平。
四位一体数码管
1共阴,上负下正,位选到的数码管赋0,亮的端口赋1。
2共阳,上正下负,位选到的数码管赋1,亮的端口赋0.
驱动方式
138译码器
ABC输入端,Y0-7输出端。G1,G2A,G3A使能端。
123口通过二进制转化十进制,选中某一位数码管输出0.
74HC245 数据缓冲器
如何显示数据
1.通过P22-24三个口 选中某一位数码管。
2.给P0口断码数据,缓冲,送到公共的断码端,显示响应数据。
其中,均为从高位往低位读,例如P00-P07是10111110,则读01111101,转化成16进制,0x7D.
应知应会
静态数码管
数码管段码表
在第7个数码管显示2
// An highlighted block
#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(7,2);
while(1)
{
}
}
动态数码管
消影
位选 段选 ( 清零 ) 位选 段选 位选 段选
#include <REGX52.H>
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0X07,0X7F,0x6F};
void Delay(xms) //延时函数
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
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];
Delay(1);//稳定一秒,让其稳定显示,如果立马清零就会变得很暗
P0=0x00;//清零
}
void main ()
{
while(1)
{
Nixie(1,1);//第一个数码管显示1
Nixie(2,2);
Nixie(3,3);
}
}