1.显示界面功能
switch(mode)
{
case 0:
SMG[0]=10;
SMG[1]=1;
SMG[2]=16;
SMG[3]=16;
SMG[4]=16;
SMG[5]=16;
SMG[6]=(uchar)r_temperature/10%10;
SMG[7]=(uchar)r_temperature%10;
break;
case 1:
SMG[0]=11;
SMG[1]=2;
SMG[2]=16;
SMG[3]=16;
SMG[4]=16;
SMG[5]=distance/100%10;
SMG[6]=distance/10%10;
SMG[7]=distance%10;
break;
case 2:
SMG[0]=time_data[0]/10%10;
SMG[1]=time_data[0]%10;
SMG[2]=16;
SMG[3]=time_data[1]/10%10;
SMG[4]=time_data[1]%10;
SMG[5]=16;
SMG[6]=time_data[2]/10%10;
SMG[7]=time_data[2]%10;
break;
case 3:
SMG[0]=12;
SMG[1]=16;
SMG[2]=(uchar)Vol%10;
SMG[3]=(uint)(Vol*100)/10%10;
SMG[4]=(uint)(Vol*100)%10;
SMG[5]=light/100%10;
SMG[6]=light/10%10;
SMG[7]=light%10;
break;
case 4:
SMG[0]=13;
SMG[1]=16;
SMG[2]=16;
SMG[3]=Fre/10000%10;
SMG[4]=Fre/1000%10;
SMG[5]=Fre/100%10;
SMG[6]=Fre/10%10;
SMG[7]=Fre%10;
break;
(小编这里直接一点用switch更加简单一点)
界面切换功能如下
按键5按下,mode标志位切换四个界面
if(Key_down==5)
{
if(++mode==5)
mode=0;
}
2.超声波测距底层
sbit TX=P1^0;
sbit RX=P1^1;
uchar wave_send()
{
uchar temp,num=10;
TX=0;
CL=0xf3;
CH=0xff;
CR=1;
while(num--)
{
while(!CF);
TX^=1;
CL=0xf3;
CH=0xff;
CF=0;
}
CR=0;
CL=0;
CH=0;
CR=1;
while(RX && !CF);
CR=0;
if(CF)
{
CF=0;
temp=0;
}
else
{
temp=((CH<<8)|CL)*0.017;
}
return temp;
}
小编在用这套发现了点问题,就是有时候超声波的会有时候闪烁。小编以为是中断导致的时许问题,于是在开头和最后分别加了个EA=0和EA=1,但是发现还是存在这种问题,不知各位遇到过没有,小编是没有搞定,有没有人可以帮小编解决一下困惑。