本篇主要介绍数码管的知识
简述
(1)理论概述
(2)共阳极和共阴极结构如下:
(3)段码表
(4)段码举例解释
例如在共阳极数码管中,我们要显示0的话,低电平有效,0xC0表示1100 0000,从左往右依次是高位--->低位,即DP--->A,那么0xC0表示数码管对应的abcd ef点亮,就是0
同理共阴极数码管则是高电平有效,0x3F表示0011 1111,也是数码管对应的abcd ef点亮,就是0
上述的要会运算,死记硬背不是长久之计!!!
(5)多个数码管
使用的是四位一体的共阴数码管,我们要选择LED8的话,那么就应该1000 0000
LED1-LED8连接到74HC138译码器,6、4、5端口为使能端,不用管,P22-P24为输入端,
Y0-Y7为输出端,输出低电平有效,如何看是输出低电平有效,还是高电平,一种方法就是看字母的头上带不带着——,带着就是输出低电平有效,还有一种方法就不过多解释,若为低电平有效字母一般都会标着“——"
4 2 1
P24 P23 P22
比如000,那么加起来就是0,就是Y0
010,就是1*2的1次方,就是0+2+0=2,就是Y2
然后对P0进行相应的电平设置,显示要显示的结果
A0-B0以此类推,P00-P07输入什么,LCD0-LCD7就输出什么
3.1静态数码管显示
代码:
第一种
第二种
运用子函数和switch语句
#include <REGX52.H>
void Nixie (unsigned char location,number)
//位选和段选
{
unsigned char choose[16]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D,0x7D, 0x07,0x7F, 0x6F, 0x77, 0x7C,0x39, 0x5E, 0x79, 0x71};//0-F
switch(location)
{
case 1:P2_4=1;P2_3=1;P2_2=1;//Y7
break;
case 2:P2_4=1;P2_3=1;P2_2=0;//Y6
break;
case 3:P2_4=1;P2_3=0;P2_2=1;//Y5
break;
case 4:P2_4=1;P2_3=0;P2_2=0;//Y4
break;
case 5:P2_4=0;P2_3=1;P2_2=1;//Y3
break;
case 6:P2_4=0;P2_3=1;P2_2=0;//Y2
break;
case 7:P2_4=0;P2_3=0;P2_2=1;//Y1
break;
case 8:P2_4=0;P2_3=0;P2_2=0;//Y0
break;
}
P0=choose[number];
}
void main()
{
Nixie(1,4);
while(1)
{
}
}
标红的变量定义不能放在switch后面,在 C 语言中,变量的定义必须在当前作用域的开头。
效果如下:
数码管静态显示
3.2动态数码管显示
原理:
因此要进行消影
代码:
#include <REGX52.H>
void Delay(unsigned int xms)//延时函数
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
}
}
void Nixie (unsigned char location,number)
//位选和段选
{
unsigned char choose[16]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D,0x7D, 0x07,0x7F, 0x6F, 0x77, 0x7C,0x39, 0x5E, 0x79, 0x71};//0-F
switch(location)
{
case 1:P2_4=1;P2_3=1;P2_2=1;//Y7
break;
case 2:P2_4=1;P2_3=1;P2_2=0;//Y6
break;
case 3:P2_4=1;P2_3=0;P2_2=1;//Y5
break;
case 4:P2_4=1;P2_3=0;P2_2=0;//Y4
break;
case 5:P2_4=0;P2_3=1;P2_2=1;//Y3
break;
case 6:P2_4=0;P2_3=1;P2_2=0;//Y2
break;
case 7:P2_4=0;P2_3=0;P2_2=1;//Y1
break;
case 8:P2_4=0;P2_3=0;P2_2=0;//Y0
break;
}
P0=choose[number];
Delay(1);
P0=0x00;//清零
}
void main()
{
while(1)
{
//位选 段选 清零 新的位选 段选 清零
Nixie(1,5);
//Delay(2000);
Nixie(2,2);
//Delay(2000);
Nixie(3,0);
//Delay(2000);
}
}
效果如下:
数码管动态显示