单片机数码管小数点的显示

数码管显示23.4怎么显示???
自己写的一种方法,感觉不好。有没有先进的算法??

display(234);

void display(uint tt)
{
uint xi,ge,sh;

sh=tt/100;
ge=tt/10%10;

xi=tt%10;
dula=1;
P0=table[sh];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delay(1);

dula=1;
P0=table1[ge];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delay(1);

dula=1;
P0=table[xi];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delay(1);
}

程序如下:

#include<reg52.h>

#include<intrins.h>

sbit duan=P3^0;

sbit wei=P3^1;

unsigned char code table[] = {

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71 };

void delay(void)

{

  unsigned char i,j;

for(i=0;i<10;i++)

  for(j=0;j<110;j++);

}

void show6led(float num)

{

unsigned char i;

i=num;

duan=1;

P2=table[i]+0x80;  //显示个位和小数点

duan=0;

P2=0xff;   //先关闭led

wei=1;

P2=0xfb;             //段选3

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=0xf7;          //段选4,十分位

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=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);

  }

}

扩展资料:

数码管工作原理

数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示)。

按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。

共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。

共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-11-23
我不懂你的电路图是怎么接的,但是数码管的小数点是这样的
P0=table1[ge];你这个是寻址的后面加个点就得了
给为 P0=table1[ge]+0x80;或者P0=table1[ge]|0x80应该都一样的;
0x80就是那个点亮,不懂你是公阳还是共阴的,
如果是公阳的是0x7f。。。和共阴的相反本回答被提问者采纳
第2个回答  2010-09-14
dula=1;
P0=table1[ge];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delay(1);
中,改为
P0=0x30;
第3个回答  2010-09-14
同志,你的电路都没有我们怎么回答呀,望把原理图发出来
相似回答