【51单片机】数码管显示
一、数码管
普中-2&普中-3&普中-4开发板原理图
两个四位共阴极数码管
74HC138译码器(三线控八线,节省单片机I/O口占用)
点亮一个数码管,只需给I/O口一个高电平,一个低电平,由于此单片机(型号:STC89C52RC)数码管是共阴极连接,我们只需给I/O口一个高电平(即给1),就可以点亮了
晶体管LED从左边到右边依次为LED8、LED7……LED1
138译码器P2_4、P2_3、P2_2由高位到低位,如下编码就是选中LED位置(段选)
8(111) 7(110) 6(101) 5(100) 4(011) 3(010) 2(001) 1(000)
switch (location) { //选中LED位置
case 0:P2_4 = 1;P2_3 = 1;P2_2 = 1;break;//第一位数码管
case 1:P2_4 = 1;P2_3 = 1;P2_2 = 0;break;
case 2:P2_4 = 1;P2_3 = 0;P2_2 = 1;break;
case 3:P2_4 = 1;P2_3 = 0;P2_2 = 0;break;
case 4:P2_4 = 0;P2_3 = 1;P2_2 = 1;break;
case 5:P2_4 = 0;P2_3 = 1;P2_2 = 0;break;
case 6:P2_4 = 0;P2_3 = 0;P2_2 = 1;break;
case 7:P2_4 = 0;P2_3 = 0;P2_2 = 0;break;//第八位数码管
}
为了在对应位置显示想要的数字和字母,我们要把数字字母写出来
先截取一位数码管原理图,相当于由八个发光二极管组成 ,对应的数字或字母,给 1 是亮
选中的顺序依次为dp.g.f.e.d.c.b.a
总结一下:
数码管函数
void Delay(int xms) { //@11.0592MHz
unsigned char i, j;
while (xms--) {
i = 2;
j = 199;
do {
while (--j);
} while (--i);
}
}
void Nixie(int location,int number)//(位置,数字)
{
switch(location)//选中LED位置,位选
{
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;//消影清零
}
然后在while(1)里调用此函数即可
Nixie(1,1); Nixie(2,0); Nixie(3,2); Nixie(4,4); Nixie(5,1); Nixie(6,0); Nixie(7,2); Nixie(8,4);
这样数码管上就会显示1024 1024
有兴趣学习具体原理的童鞋可以学习江科大自化协的课程~
