楼主,有问题请教啊,最近我也在做这个,用的stc15系列,晶振30MHZ。不知道为何总是显示001。我用的是NOKIA5110。
我的部分程序,求助啊,谢谢啦:sbit RX=P0^1;
sbit TX=P0^2;
unsigned int time=0;
unsigned long S=0;
bit flag =0;
unsigned char disbuff[4] ={ 2,2,2,2,};
/*--------------------------------------------------------------*/
void delay1s(void) //误差 -0.00000000006us
{
unsigned char a,b,c,n;
for(c=165;c>0;c--)
for(b=218;b>0;b--)
for(a=207;a>0;a--);
for(n=8;n>0;n--);
_nop_(); //if Keil,require use intrins.h
}
/*--------------------------------------------------------------*/
/********************************************************/
/********************************************************/
void Conut(void) //计算
{
int i,w;
time=TH0*256+TL0;
TH0=0;
TL0=0;
S=((time*1.7)/100)+1; //算出来是CM
if((S>=450)||flag==1) //超出测量范围显示“-”
{
flag=0;
/* disbuff[0]=9; //“-”
disbuff[1]=8; //“-”
disbuff[2]=7; //“-”
for(i=0;i<3;i++)
{
w=disbuff[i];
switch(w)
{
case 0:{LCD_prints(i+3,2,"0");}break;
case 1:{LCD_prints(i+3,2,"1");}break;
case 2:{LCD_prints(i+3,2,"2");}break;
case 3:{LCD_prints(i+3,2,"3");}break;
case 4:{LCD_prints(i+3,2,"4");}break;
case 5:{LCD_prints(i+3,2,"5");}break;
case 6:{LCD_prints(i+3,2,"6");}break;
case 7:{LCD_prints(i+3,2,"7");}break;
case 8:{LCD_prints(i+3,2,"8");}break;
case 9:{LCD_prints(i+3,2,"9");}break;
default : break;
}
} */
}
else
{
disbuff[0]=S%1000/100;
disbuff[1]=S%1000%100/10;
disbuff[2]=(S%1000%10 %10);
for(i=0;i<3;i++)
{
w=disbuff[i];
switch(w)
{
case 0:{LCD_prints(i+3,2,"0");}break;
case 1:{LCD_prints(i+3,2,"1");}break;
case 2:{LCD_prints(i+3,2,"2");}break;
case 3:{LCD_prints(i+3,2,"3");}break;
case 4:{LCD_prints(i+3,2,"4");}break;
case 5:{LCD_prints(i+3,2,"5");}break;
case 6:{LCD_prints(i+3,2,"6");}break;
case 7:{LCD_prints(i+3,2,"7");}break;
case 8:{LCD_prints(i+3,2,"8");}break;
case 9:{LCD_prints(i+3,2,"9");}break;
default : break;
}
}
delay1s();delay1s();
}
}
/********************************************************/
void zd0() interrupt 1 //T0中断用来计数器溢出,超过测距范围
{
flag=1; //中断溢出标志
}
/********************************************************/
void stmo()
{
unsigned char a,b,c;
TX=1; //400MS 启动一次模块 从TX=1到TX=0有20us时间。
for(c=1;c>0;c--)
for(b=118;b>0;b--)
for(a=1;a>0;a--);
_nop_();
TX=0;
}
/*********************************************************/
//主函数
void main(void)
{
unsigned char LCD_contrast = 0xc8; //此值对比度合适
LCD5510_Init();
LCD_write_cmd(0x21);//工作模式, 水平寻址, 扩展指令
LCD_write_cmd(0xbe);//对比度调节
LCD_write_cmd(0x20);//工作模式, 水平寻址, 常规指令
while(1)
{
TMOD=0x01; //设T0为方式1
TH0=0;
TL0=0;
ET0=1; //允许T0中断
EA=1; //开启总中断
LCD_prints(0,0,"Distant");
stmo(); //使能
while(!RX); //当RX为零时等待
TR0=1; //开启计数0
while(RX); //当RX为1计数并等待
TR0=0; //关闭计数
Conut(); //计算
}
} |