//*************数码管转换
void SmgConvert(void)
{
u8 i=0;
u8 j=0;
//*****************数据转换成数码管的段码,相当于数码管翻译
while(SmgBuffer[i]!=0x00)
{
switch(SmgBuffer[i])
{
case '0':SmgTemp =t_display[0];break;
case '1':SmgTemp =t_display[1];break;
case '2':SmgTemp =t_display[2];break;
case '3':SmgTemp =t_display[3];break;
case '4':SmgTemp =t_display[4];break;
case '5':SmgTemp =t_display[5];break;
case '6':SmgTemp =t_display[6];break;
case '7':SmgTemp =t_display[7];break;
case '8':SmgTemp =t_display[8];break;
case '9':SmgTemp =t_display[9];break;
case 'U':SmgTemp =0x3E;break;
case '-':SmgTemp =0x40;break;
case 'C':SmgTemp =0x39;break;
default:SmgTemp=0x00;break;
}
if(SmgBuffer[i+1]=='.') //将段的最高位置1,点亮对应小数点的数据
{
SmgTemp =SmgTemp | 0x80;
i=i+2; //注意,这里是加2,因为多个小数点
}
else
i=i+1; //如果没有小数点,那么就是+1,下个元素。
SmgData[j]=SmgTemp; //将数据翻译成功,放到对应的数据区
j++;//数据区位置+1。
}
}
void SmgDisp()
{
static u8 index=0;
//**************消隐,为什么要消隐呢,因为前后两个显示,变化太快,会存在残影,影响显示效果。
//如何消隐?将对应的数码管熄灭,就可以了。
//选择位选
P0=0x00;
Choose573(SMGCOMY);
Delay5us();
Choose573(LOCKY);
//选择段码
P0=~0xff;
Choose573(SMGDATY);
Delay5us();
Choose573(LOCKY);
//******************************************消隐
//选择位选
P0=T_COM[index];
Choose573(SMGCOMY);
Delay5us();
Choose573(LOCKY);
//选择段码
P0=~SmgData[index];
Choose573(SMGDATY);
Delay5us();
Choose573(LOCKY);
index++;
if(index==8)index=0;
}