一、数码管介绍:
1.什么是数码管?
多个LED组合成8字显示器。
2.一位数码管的引脚(只有一个8):
数码管的引脚为1-10,其中公共极为3,8,其余八位分别对应一个二极管,如下图:
若3,8为公共阴极,则各引脚接高电平1为亮;
若3,8为公共阳极,则各引脚接低电平0为亮;
3.多位数码管的引脚(四个8):
其中每个8的对应位置(如A),都链接在一个引脚上,故只需要12(4+8)个引脚。
4.多位数码管的缺点与解决:
缺点:因为4个8的同一位置链接在同一引脚,故只能显示同一数字(如同时显示四个1)。
解决:动态数码管,利用人眼分辨率低,快速切换四个数字,让每个数字高速频闪,欺骗眼睛。
(即第一个数字显示1,立刻关闭第一个,并让第二个显示2 。。。)
二、静态数码管实战:LED6显示6
1.51单片机数码管端口介绍:
由P2_2 - P2_4控制8个8的亮灭,三个端口,二进制转十进制,2^3=8,遵循CBA。
(例:101(CBA)=5,使Y5端口对应LED6亮)
由P0_0 - P0_7控制每个8的每个二极管亮灭。
2.实战代码:
void main()
{
P2_4 = 1;
P2_3 = 0;
P2_2 = 1;
P0 = 0x7D;// 0111 1101 分别对应P0_7-P0_0,注意是倒着的
while (1);
}
3.进阶代码:设计子函数,可直接指定对应位置显示对应数字:
void Nixie(unsigned char Location, int 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;
}
unsigned char NixieTable[10] = { 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F };
P0 = NixieTable[Number];
Delayms(1);
P0 = 0x00;//显示一下后清零
}
三、动态数码管实战:显示123:
void main()
{
while (1)
{
Nixie(1, 1);
Delayms(200);
Nixie(2, 2);
Delayms(200);
Nixie(3, 3);
Delayms(200);
}
}