unsigned char LedData[10]={0x7E/*0*/,0x48/*1*/,0x3D/*2*/,0x6D/*3*/,0x4B/*4*/,0x67/*5*/, 0x77/*6*/,0x4C/*7*/,0x7F/*8*/,0x6F/*9*/};//显示码 unsigned char DispBuf[]={0,0,0,0,1};//显示缓冲区 DispBuf[4]=q; DispBuf[3]=result/1000; DispBuf[2]=(result%1000)/100; DispBuf[1]=((result%1000)%100)/10; DispBuf[0]=((result%1000)%100)%10; //显示程序 void Display(void) { unsigned char temp; unsigned char k; Dataswitch();//浮点数转数组程序 while(1) {switch(P0) { case 0xfe: //显示万位 temp=DispBuf[4]; if(temp==0) P1=0x00; //输出数据0x00,代表什么也不显示 k=1; else P1=LedData[temp]; k=0; break; case 0xfd: //显示千位 temp=DisBuf[3]; if(temp==0) { if(k) //判断万位是否为零 { P1=0x00; k=1; else P1=LedData[0]; k=0; } else P1=LedData[temp]; k=0; break; case 0xfb: //显示百位 temp=DisBuf[2]; if(temp==0) { if(k) { P1=0x00; k=1; else P1=LedData[0]; k=0; } else P1=LedData[temp]; k=0; break; case 0xf7: //显示十位 temp=DispBuf[1]; if(temp==0) { if(k) { P1=0x00; k=1; else P1=LedData[0]; k=0; } else P1=LedData[temp]; k=0; break; case oxef: //显示个位 temp=DispBuf[0]; P1=LedData[temp]; break; default: break } P0=(P0>>1)|0x80; } //浮点数转数组程序 void Dataswitch(result) { unsigned char p; //小数点位置标志位 unsigned char q; //符号标志位 if(result<0) { q=0x20; result=0-result; else q=0x00; } if(result>9999) { DispBuf[4]=E; DispBuf[3]=r; DispBuf[2]=r; DispBuf[1]=o; DispBuf[0]=r; } else if(result>999.9) { p=0; } else if(result>99.99) { p=1; result*=10; } else if(result>9.999) { p=2; result*=100; } else if { p=3; result*=1000; } while(DispBuf[0]==0) { DispBuf[0]=DispBuf[1]; DispBuf[1]=DispBuf[2]; DispBuf[2]=DispBuf[3]; DispBuf[3]=DispBuf[4]; DispBuf[4]=0; } }
|