基于51单片机课程设计报告 - 图文 下载本文

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