📄 017_符点数在数码管上显示.c
字号:
#include <REGX51.H>
#define PORTA P0
#define PORTC P2
#define LEDDATAPORT PORTA
#define LEDBITPORT PORTC
const unsigned char LEDDATA[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71,
0x00,0x40,
};
void Delay(unsigned int t)
{
while(t)t--;
}
void main(void)
{
unsigned char i;
unsigned char LEDBuffer[8]={0,16,16,16,16,16,16,16};
unsigned char ScanLEDCount;
unsigned int SecondCount=0;
unsigned char SwitchFunction=0;
unsigned char DotPosition=0;
unsigned char NagFlag=0;
float Temp[10]={
3.1416,0.3621,0.0286,0.0094,0.0005,
12.763,0.3 ,0.48 ,0.06 ,0.008 ,
};
long TempA;
while(1)
{
if(DotPosition!=0)
{
if(DotPosition==ScanLEDCount)LEDDATAPORT=LEDDATA[LEDBuffer[ScanLEDCount]]|0x80;
else LEDDATAPORT=LEDDATA[LEDBuffer[ScanLEDCount]];
}
else LEDDATAPORT=LEDDATA[LEDBuffer[ScanLEDCount]];
LEDBITPORT=ScanLEDCount;
ScanLEDCount++;
if(ScanLEDCount==sizeof(LEDBuffer))ScanLEDCount=0;
Delay(664);
SecondCount++;
if(SecondCount==1920)
{
SecondCount=0;
Temp[SwitchFunction]=0-Temp[SwitchFunction];
TempA=Temp[SwitchFunction]*100000;
SwitchFunction++;
if(SwitchFunction==sizeof(Temp)/4)SwitchFunction=0;
NagFlag=0;
if(TempA<0)
{
TempA=~TempA;
TempA++;
NagFlag=1;
}
for(i=0;i<sizeof(LEDBuffer);i++)LEDBuffer[i]=16;
LEDBuffer[0]=0;
if(TempA>=10000)DotPosition=5;
else if(TempA>=1000)DotPosition=4;
else if(TempA>=100)DotPosition=3;
else if(TempA>=10)DotPosition=2;
else if(TempA>=1)DotPosition=1;
for(i=DotPosition;i<6;i++)LEDBuffer[i]=0;
DotPosition=5;
if(NagFlag==1)
{
if(TempA>=1000000)LEDBuffer[DotPosition+2]=17;
else LEDBuffer[DotPosition+1]=17;
}
i=0;
while(TempA)
{
LEDBuffer[i]=TempA%10;
TempA/=10;
i++;
}
while(LEDBuffer[0]==0)
{
for(i=0;i<sizeof(LEDBuffer);i++)LEDBuffer[i]=LEDBuffer[i+1];
LEDBuffer[sizeof(LEDBuffer)-1]=16;
DotPosition--;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -