4.1静态数码管显示
上述数码管为共阴极数码管。我们想要第六个数码管显示数字,首先在138译码器中找到LED6对应着Y5接口,就是让Y5输出低电平,那么就需要p24 p23 p22 输出的二进制为 5,也就是101(二进制)
P2_4=1;
P2_3=0;
P2_2=1;
接着是阳极输出,想要数码管显示6,就让对应位置输出高电平
a b c d e f g dp
1 0 1 1 1 1 1 0
左端是低位 ,右端是高位对应二进制就是 0111 1101 ——>0X7D(十六进制),我们就是
#include <REGX52.H>
void main(){
P2_4=1;
P2_3=0;
P2_2=1;
P0=0X7D;
while(1){
}
}
现在我们编写函数,实现对函数参数进行改变控制数码管显示。
#include <REGX52.H>
void NiXie(unsigned char Location,unsigned char Number);
unsigned char digitSegments[] = {
0x3F, // 0
0x06, // 1
0x5B, // 2
0x4F, // 3
0x66, // 4
0x6D, // 5
0x7D, // 6
0x07, // 7
0x7F, // 8
0x6F // 9
};
void main(){
NiXie(3,1);
while(1){
}
}
void NiXie(unsigned char Location,unsigned char Number){
switch(Location){
case 1:
P2_4=0;P2_3=0;P2_2=0;
break;
case 2:
P2_4=0;P2_3=0;P2_2=1;
break;
case 3:
P2_4=0;P2_3=1;P2_2=0;
break;
case 4:
P2_4=0;P2_3=1;P2_2=1;
break;
case 5:
P2_4=1;P2_3=0;P2_2=0;
break;
case 6:
P2_4=1;P2_3=0;P2_2=1;
break;
case 7:
P2_4=1;P2_3=1;P2_2=0;
break;
case 8:
P2_4=1;P2_3=1;P2_2=1;
break;
default:
break;
}
P0=digitSegments[Number];
}
4.2动态数码管显示
我们的51单片机采用的就是直接扫描的方式,通过快速依次点亮不同的数码管,呈现同时点亮的效果。
void main(){
while(1){
NiXie(8,1);
NiXie(7,2);
NiXie(3,3);
}
}
数码管通电顺序是 位码 段码 位码 段码 位码 段码 ,在切换过程中就会产生跑串等现象,因此我们需要对数码管就进行”消影“。我们在NiXie函数末尾加上一个延迟函数,使得每次确定完显示数字之后,稳定一下再去显示下一个,
#include <REGX52.H>
void NiXie(unsigned char Location,unsigned char Number);
void Delay1ms(unsigned int xms);
unsigned char digitSegments[] = {
0x3F, // 0
0x06, // 1
0x5B, // 2
0x4F, // 3
0x66, // 4
0x6D, // 5
0x7D, // 6
0x07, // 7
0x7F, // 8
0x6F // 9
};
void main(){
while(1){
NiXie(8,1);
NiXie(7,2);
NiXie(6,3);
}
}
void NiXie(unsigned char Location,unsigned char Number){
switch(Location){
case 1:
P2_4=0;P2_3=0;P2_2=0;
break;
case 2:
P2_4=0;P2_3=0;P2_2=1;
break;
case 3:
P2_4=0;P2_3=1;P2_2=0;
break;
case 4:
P2_4=0;P2_3=1;P2_2=1;
break;
case 5:
P2_4=1;P2_3=0;P2_2=0;
break;
case 6:
P2_4=1;P2_3=0;P2_2=1;
break;
case 7:
P2_4=1;P2_3=1;P2_2=0;
break;
case 8:
P2_4=1;P2_3=1;P2_2=1;
break;
default:
break;
}
P0=digitSegments[Number];
Delay1ms(1);
}
void Delay1ms(unsigned int xms) //@11.0592MHz
{
unsigned char i, j;
while(xms){
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
xms--;
}
}