#include <reg52.h> #include<math.h>
unsigned char code table[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; //數碼管對應的碼制 對應于P1口
unsigned char code tab[]={0x7F,0xbF,0xdF,0xef,0xf7,0xfb,0xfd,0xfe}; //數碼管片選 對應于P0口
unsigned int a[8]; //存放各個位的數組
unsigned int temp[8];
void delay(unsigned int i) //延時程序
{
char j;
for(i; i > 0; i--)
for(j = 200; j > 0; j--);
}
void ftm(float num) //主要函數實現
{
float m,n;
int integer,start,f;
int i=0;
int floatnum=0;
int integernum=0;
integer=(int)num;
m=num-integer;
while(m!=0) //求出小數部分的數字放到temp數組里,同時求出小數的位數
{
n=m*10;
temp=(int)n;
m=m*10-temp;
floatnum=floatnum+1;
i++;
}
f=floatnum-1;
for(i=7;i>=0;i--) //從數組a的最后一位開始存放小數部分,
{
a=temp[f];
if(f==0)
break;
else
f=f-1;
}
for(i=7-floatnum;i>=0;i--) //數組a接著存放整數部分,并求出整數部分的位數
{
a=integer-(integer/10)*10;
integer=integer/10;
if(integer==0)
{
integernum=7-floatnum-i+1;
break;
}
}
start=8-integernum-floatnum;
while(1) //顯示
{
for(i=start;i<8;i++)
{
P1=table[a] ;
P0=tab;
delay(100);
if(i==start+integernum-1)
{ P1=0x80;
delay(100);
}
}
}
}
void main ()
{
ftm(125.42);
} 請詳細描述下你的問題
其實不用這么復雜的,以下是小弟寫的顯示3.2的程序
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit wx=P2^7;
sbit dx=P2^6;
uchar shu,shi,ge;
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0x80};
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void init();
void display(uchar dot,uchar shi,uchar ge);
void main()
{
init();
while(1)
{
//dot=17;
shi=shu/10;
ge=shu%10;
display(16,shi,ge);
}
}
void display(uchar dot,uchar shi,uchar ge)
{
wx=1;
P0=0xfe;
wx=0;
P0=0xff;
dx=1;
P0=table[dot];
dx=0;
delay(5);
wx=1;
P0=0xfe;
wx=0;
P0=0xff;
dx=1;
P0=table[shi];
dx=0;
delay(5);
wx=1;
P0=0xfd;
wx=0;
P0=0xff;
dx=1;
P0=table[ge];
dx=0;
delay(5);
}
void init()
{
shu=32;
}
| 歡迎光臨 (http://www.raoushi.com/bbs/) | Powered by Discuz! X3.1 |