本文适合依据官方指导书写法的同学对比参考。
显示方式:中断,具体方法看指导书,需要一个内容更新函数smgdate( )和显示函数display( )。
加小数点方式:在display()函数中加一个判断位置的函数,相应位置&0x7f。
void display()
{
P2=(P2&0X1F)|0XE0;P0=0XFF;P2&=0X1F;
P2=(P2&0X1F)|0XC0;P0=1<<add;P2&=0X1F;
P2=(P2&0X1F)|0XE0;P0=smgvalue[smg[add]];
if(jiemian==1&&add==6)P0&=0X1F;%%此条语句为选择在第一个界面第七位的数码管带上小数点,相同道理可以添加其他小数点。
P2&=0X1F;
}
闪烁方式:在display()函数中添加条件使得相应位置一段时间不亮一段时间亮,具体亮灭的时间要在定时器中进行求取,具体如下。
void display()
{
if(jiemian==1)
{
P2=(P2&0X1F)|0XE0;P0=0XFF;P2&=0X1F;
P2=(P2&0X1F)|0XC0;P0=1<<add;P2&=0X1F;
P2=(P2&0X1F)|0XE0;P0=smgvalue[smg[add]];P2&=0X1F;%%%%前三句正常写
if(((mode==1)&&((add==3)||(add==4))&&(onesflag==1))||((mode==2)&&((add==6)|(add==7))&&(onesflag==1))){P2=(P2&0X1F)|0XE0;P0=0xff;P2&=0X1F;}%%%%此句mode为模式并且onesflag为亮灭时间时相应地址的数码管熄灭%%%
}
else{P2=(P2&0X1F)|0XE0;P0=0XFF;P2&=0X1F;
P2=(P2&0X1F)|0XC0;P0=1<<add;P2&=0X1F;
P2=(P2&0X1F)|0XE0;P0=smgvalue[smg[add]];P2&=0X1F;%%%%此三句正常些
}
if(++add==8)add=0;
}
定时器部分:
(假设2ms一次中断)if(++onesnum==500){onesnum=0;onesflag=(onesflag+1)%2}