程序如下:
#include
#include
sbit duan=P3^0;
sbit wei=P3^1;
Unsigned character code table[] = {
0x3f、0x06、0x5b、0x4f,
0x66、0x6d、0x7d、0x07,
0x7f、0x6f、0x77、0x7c,
0x39、0x5e、0x79、0x71};
Invalid delay (invalid)
{
unsigned char i,j;
for(i=0;i<10;i++)
for(j=0;j<110;j++);
}
void show6led(float num)
{
Unsigned character I;
I= value;
Section =1;
P2 = table [i] + 0x80; //显示个位和小数点
Section =0;
P2=0xff;//先关闭led
wei=1;
P2=0xfb; //段选3
wei=0;
delay();
P2=0xff;
P3=0xff;//这两句非常重要,主要是清屏消隐
num=num-i
num=num*10
duan=1;
P2=table[i];
duan=0;
P2=0xff
wei=1
P2=0xf7 //段选4,十分位
Wei=0;
Delay ();
P2=0xff;
P3=0xff;
Num=num-i;
num=num*10;
I= value;
duan=1;
P2=table[i];
duan=0;
P2=0xff;
wei=1;
P2=0xef;//段选5,百分位
wei=0;
delay();
P2=0xff;
P3=0xff;
num=num-i;
num=num*10;
i=num;
duan=1;
P2=table[i];
duan=0;
P2=0xff;
wei=1;
P2=0xdf; //段选6,千分位
wei=0;
delay();
P2=0xff;
P3=0xff;
}
main()
{
float number;
number=3.718;
while(1)
{
show6led(number);
}
}
参考资料:
数码管工作原理
数码管分为七节数码管和八节数码管。八节数码管有一个以上的LED单元(一个以上小数点显示)比七个部分的数码管。
根据LED单元的连接方式,可分为普通阳极镍铬管和普通阴极镍铬管。普通阳数码管是指将所有发光二极管阳极连接在一起形成一个共同阳极(COM)的数码管。
公共极COM应连接到+5V时,共同的积极数码管应用。当场led的阴极低时,相应的场将打开。当一个场的阴极很高时,相应的场将不亮。
共用阴极数码管是一种将所有发光二极管的阴极连接在一起形成共同阴极(COM)的数码管。公共阴极COM应连接到GND,当共用阴极X射线管被应用时。当场led的阳极高时,相应的场将打开。当一个场的阳极很低时,相应的场将不亮。
平时常见的LED数码管包含8个字段,即数字8的每一段共七个字段加上小数点一共八个字段,分别命名为a,b,c,d,e,f,g和dp,其中dp位就是显示小数点。示意图如图所示:
除此之外数码管还有一个公共引脚,公共引脚接低电平的称为共阴数码管,高电平的称为共阳数码管,以共阴数码管为例,如果想显示 3. 那么需要给各个引脚的电平从a到dp分别为1,1,1,1,0,0,1,1,公共引脚接低电平即可。
把数据按正常顺序扫描点亮数码管,并观察你的数据里有几位小数,在扫描对应位时的段码时加入小数那一段码值就可以了.(如你的段码接在P0口,且小数点段是P0.7,那只要在扫描到对应位时加上P0|=0x80;再打开位显示就可以了)
在你的要显示的那个段码后面加 |0x80
级可以了。
。再说了,74LS48是没有小数点驱动的。感觉没什么实际意义。
如果是单片机的话,一般是取数值需要显示的几个位直接写道显示缓存去的,也就是显示值X10或者÷10实现小数点右移或者左移一位。小数点另外输出。