void selsct_2(bit f,uchar k) //消除十位的0显示,及正负温度
的显示选择 {
if(f==0) //若为正温度,百位十位均为0则不显示十位,否则显示十位 {
if((k/100==0)&&(k0/10==0)) P0=temperature3[0];
else P0=temperature1[k0/10]; }
if(f==1) //若为负温度,若十位为0,十位不显示,否则十位显示‘-’ {
if(k0/10==0) P0=temperature3[2];
else P0=temperature1[k0/10]; } }
/******************************************************/ /* 主函数显示 /
/*****************************************************/
void display(uchart,uchart_d) //用于实测温度、上限温度的显示 {
uchari;
for(i=0;i<4;i++) //依次从左至右选通数码管显示,实现动态显示
{
switch(i) {
case 0: wei2=1; wei3=1; wei4=1; wei1=0;
//选通第一个数码管 //关第二个数码管 //关第三个数码管 //关第四个数码管 //开第一个数码管
if(a==0){selsct_1(f,t);} //若a=0则在第一个数码管上显示测量温
度的百位或‘-’
if(a==1) {
P0=temperature3[3]; //若a=1则在第一个数码管上显示‘H’
}
if(a==2) {
P0=temperature3[4]; //若a=2则在第一个数码管上显示‘L’ } break;
case 1: //选通第二个数码管 wei1=1; wei3=1;
wei4=1; wei2=0;
if(a==0){selsct_2(f,t);} //若a=0则在第二个数码管上显示测量温度的十位或‘-’ if(a==1) //若a=1则在第二个数码管上显示上限报警温度的百位或‘-’ {
if(s==0) selsct_1(f_max,max);//若s=0则显示第二个数码管,否则不显示
else P0=temperature3[0]; //通过s标志位的变化实现调节上下限报警温度时数码管的闪烁
if(s1==1) selsct_1(f_max,max);//若s1=1则显示第二个数码管(s1标志位用于上下限查看时的显示) }
if(a==2) //若a=2则在第二个数码管上显示下限报警温度的百位或‘-’ {
if(s==0) selsct_1(f_min,min); else P0=temperature3[0];
if(s1==1) selsct_1(f_min,min); } break;
case 2:
//选通第三个数码管
wei1=1;
wei2=1; wei4=1; wei3=0;
if(a==0){P0=temperature2[t];}//若a=0则在第三个数码管上显示测量温度的个位 if(a==1) //若a=1则在第三个数码管上显示上限报警温度的十位或‘-’ {
if(s==0) selsct_2(f_max,max);//若s=0则显示第三个数码管,否则不显示
else P0=temperature3[0];
if(s1==1) selsct_2(f_max,max);//若s1=1则显示第三个数码管 }
if(a==2) //若a=2则在第三个数码管上显示下限报警温度的十位或‘-’ {
if(s==0) selsct_2(f_min,min); else P0=temperature3[0];
if(s1==1) selsct_2(f_min,min);
} break;
case 3: //选通第四个数码管 wei1=1; wei2=1; wei3=1;
wei4=0;
if(a==0){P0=temperature1[t_d];}//若a=0则在第四个数码管上显示测量温度的小数位 if(a==1) //若a=1则在第四个数码管上显示上限报警温度的个位 {
if(s==0) P0=temperature1[max];//若s=0则显示第四个数码管,否则不显示
else P0=temperature3[0];
if(s1==1) P0=temperature1[max];//若s1=1则显示第四个数码管
}
if(a==2) //若a=2则在
第四个数码管上显示下限报警温度的个位
{
if(s==0) P0=temperature1[min]; else P0=temperature3[0];
if(s1==1) P0=temperature1[min]; } break; }
display_delay(10); //每个数码管显示3ms左右 }
}
/******************************************************/ /* 开机显示函数 /
/*****************************************************/ void display1(uint z) //用于开机动画的显示 {
uchari,j;
bit f=0;
for(i=0;i for(j=0;j<4;j++) //依次从左至右显示‘-’ { switch(j) { case 0: wei2=1; wei3=1; wei4=1; wei1=0; break; P0=temperature3[2];//第一个数码管显示 case 1: wei1=1; wei3=1; wei4=1; wei2=0;break; } P0=temperature3[2];//第二个数码管显示 case 2: wei1=1; wei2=1; wei4=1; wei3=0;break; P0=temperature3[2];//第三个数码管显示 case 3: wei1=1; wei2=1; wei3=1; wei4=0;break; P0=temperature3[2];//第四个数码管显示 } display_delay(400); //每个数码管显示200ms左右 } } #endif 六、参考文献 (1).郭天祥.51单片机c语言教程.电子工业出版社.2009.12 (2).李群芳.单片微型计算机与接口技术.电子工业出版社.2012.12