Lcd_WriteCmd(0x30); //基本指令操作 delay(5);
Lcd_WriteCmd(0x01); //清屏 delay(5); }
void Lcd_WriteCmd(uchar cmd) { LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; _nop_(); _nop_(); P0 = cmd; DelayNOP(); LCD_EN = 1; DelayNOP(); LCD_EN = 0;
}
void Lcd_WriteDat(uchar dat) { LCD_RS = 1; LCD_RW = 0; LCD_EN = 0; P0 = dat; DelayNOP();
LCD_EN = 1;
27
}
DelayNOP(); LCD_EN = 0;
void Lcd_Init(void) { }
void Lcd_SetPos(uchar X,uchar Y) { uchar pos; if (X==0) {X=0x80;} else if (X==1) {X=0x90;} else if (X==2) {X=0x88;} else if (X==3)
LCD_PSB = 1; //并口方式 Lcd_WriteCmd(0x34); //扩充指令操作 delay(5);
Lcd_WriteCmd(0x30); //基本指令操作 delay(5);
Lcd_WriteCmd(0x0C); //显示开,关光标 delay(5);
Lcd_WriteCmd(0x01); //清除LCD的显示内容 delay(5);
28
{X=0x98;} pos = X+Y ;
Lcd_WriteCmd(pos); //显示地址 }
void Lcd_DispLine(uchar line, uchar pos, uchar *str) { }
4.4.2 GPS数据接收模块
首先要对GPS接收模块是否有信号发送给单片机进行识别,而且由于GPS接收模块发送出来的数据不是我们全部需要的,所以有必要再对语句进行识别,然后取入我们所需要的语句GPRMC。其识别程序如下: if (GPS_RMC_Parse(rev_buf, &GPS)) //解析GPRMC
int i = 0;
Lcd_SetPos(line, pos); while (str[i] != '\\0') { }
Lcd_WriteDat(str[i]); i++;
{ } else
29
RMC_YES;
GPS_DisplayOne(); //显示GPS信息 error_num = 0; gps_flag = 0; rev_stop = 0;
{ error_num++;
if (error_num >= 20) //如果数据无效超过20次 { RMC_NO; error_num = 20;
GPS_Init();
}
gps_flag = 0; rev_stop = 0; REV_NO;
}
程序代码详见附录。 //返回初始化
30
第五章 系统调试与实验结果
完成了系统的硬件设计、制作和软件编程之后,要使系统能够按照设计意图正常运行,必须进行硬件和软件系统调试。
5.1 硬件调试
硬件调试的主要任务是排除硬件故障,其中包括设计的错误和工艺性故障等。 (1) 检查所设计的硬件电路板所有的器件和引脚是否正确。
第一步,我用数字万用表进行了逐一对点的检查,检查各导线间是否有短路与开路的故障。
第二步测输入5V电源(0V地)线是否与电路中的对应点的电源(地)线相连接是否正确;及检查开关是否正常,是否连接正确。
测芯片管座与芯片管座之间用导线连接起来的对应脚是否导通和截止。 (2) 将仿真插头插入单片机插座进行调试,检查各接口是否满足设计的要求。 (3) 将程序代码经过Keil软件仿真生成的(.hex)文件,用编程器将生成的文件导入单片机STC89C52中。
(4) 将写入程序的单片机插入硬件电路单片机管座,查看液晶显示器12864显示结果是否符合设计要求。
5.2 软件调试
软件调试的任务是利用开发工具进行在线仿真调试,发现和纠正程序的错误,同时也能发现硬件的故障。软件调试是一个模块一个模块进行的,首先单独调试各子程序是否能够按照预期的功能,接口电路的控制是否正常,最后调试整个程序,尤其注意的是各模块间能否正确的传递参数。
(1) 检查12864液晶显示模块程序,观察在液晶显示器上是否能够显示相应的字符。 (2) 检查GPS模块程序,通过观察12864液晶显示情况理解GPS信号接收状况。 (3) 通过GPS模块程序和12864液晶显示模块程序的结合,观察12864液晶显示器上的GPS显示信息。
31