当前位置:首页 > GPS液晶显示定位系统(单片机论文)
第一章 硬件设计
系统硬件部分电路大致上可以分成稳压电源、单片机小系统及外围电路和LCD显示屏电路五部分。
2.1 整版设计 设计原理图:
电源 GPS模块 串行口 51单片机 LCD1602
以单片机为核心将GPS数据发送模块,LCD1602显示模块系统的结合在一起形成一个整体,实现特定功能。
2.2 电源模块设计
各个模块的电源供电电压均为5V,所以只需要设计5V单电源供电即可。 设计采用稳压芯片LM7805做电源稳压核心。电路图如下所示,输入电压为220v交流电,经过变压器降压为9V交流电,再运用二极管的单向导电性对9V交流电整流,使用二级管连接成整流槽,使电压负电压整流成正电压。电容C1为滤波电容,让电压波纹幅度减小,然后由LM7805集成稳压芯片将输入电压整流为5V稳压源。小电容C3,、C4为高频信号滤除电容,改善负载的瞬态响应。
2.3 显示模块设计
由与本设计显示需要显示相应的数据信息,包括相应的西文字符,所以不采用数码管显示,采用带西文字库的LCD1602做显示器,显示电路如
5
电路中的可变电阻RV2最大阻值为1K,其作用为调节VEE输入引脚的电压,实现对LCD1602对比度的调节。
LCD的数据端口的工作方式有两种,一种为8数据线工作方式,另一种为4数据线工作方式。为了节余端口,本设计采用4数据线工作方式。每次向LCD写8为数据分两次写,先高位后低位。
2.4 GPS数据模块
GPS数据模块不需要自己设计,采用成品电路模块做数据传送。我们只需要设计GPS数据通行部分即可。GPGGA数据格式:
$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*xx
$GPGGA:起始引导符及语句格式说明(本句为GPS定位数据); <1> :UTC时间,格式为hhmmss.sss;
<2> :纬度,格式为ddmm.mmmm(第一位是零也将传送); <3> :纬度半球,N或S(北纬或南纬)
<4> :经度,格式为dddmm.mmmm(第一位零也将传送); <5> :经度半球,E或W(东经或西经)
<6> :定位质量指示,0=定位无效,1=定位有效; <7> :使用卫星数量,从00到12(第一个零也将传送) <8> :水平精确度,0.5到99.9
<9> :天线离海平面的高度,-9999.9到9999.9米 M :指单位米
<10>:大地水准面高度,-9999.9到9999.9米 M :指单位米
<11>:差分GPS数据期限(RTCM SC-104),最后设立RTCM传送的秒数量 <12>:差分参考基站标号,从0000到1023(首位0也将传送)。 * : 语句结束标志符
xx : 从$开始到*之间的所有ASCII码的异或校验和
GPS数据通信为232串口通信,在通信过程中就需要数据电平转换,应用到232通信电平转换芯片MAX232,电路如下:
6
第二章 软件设计
本设计的主要功能是接收GPS模块传送的数据,并显示出相应的数据信息,包括当地时间、纬度、经度以及高度。
数据接收部分,采用串行口中断接收数据。显示部分就采用一个I/O口控制LCD1602显示相应的信息。
3.1 主程序设计
系统主程序的总体结构如图所示。系统的主程序开始以后,首先是对系统环境初始化,包括设置串口、定时器、中断,LCD1602初始化;然后LCD显示屏进入开机状态,显示开机信息(LCD_log),转入正常的显示,并接收数据,每次显示两串字符。接着由于单片机没有停机指令,所以可以设置系统程序不断地循环执行数据信息显示。
系统程序结构属中断方式,绝大多数功能在中断服务子程序中完成。根据总体结构,可将程序划分为几个功能化模块:串行口中断服务程序、显示子程序、扫描程序。各个模块可进行独立设计、调试和查错,最终再连接成一个整体。 进入中
清除接收中断标志
1 标志位 0
开 始 数据格式判断
符合 系统初始化 置标志位 不符合 数据接收 显示开机信息 N
数据接收完毕 Y 显示数据信息 清除标志 退出中断 图3-2 数据接收程序流程图 图3-1 系统主程序的总体结构 3.2 显示驱动程序 void LCD_check_busy(void); //忙检查 void LCD_cls(void); //清屏
void LCD_write_data(unsigned char); //写数据
void LCD_write_instruction(unsigned char); //写指令 void LCD_set_position(unsigned char); //设置光标位置
7
void LCD_initial(void); //LCD1602初始化
void LCD_printc(unsigned char); //输出单个字符 void LCD_prints(unsigned char *);//输出字符串 void LCD_log(void);//开机信息显示 void LCD_show(void);//信息显示 void delay(unsigned char);//延时
3.3 硬件连接设置
#define LCD_DATA P2 //LCD的数据口
#define LCD_BUSY LCD_DATA^7; //LCD忙信号位 sbit LCD_RS=P2^0; //LCD寄存器选择 sbit LCD_RW=P2^1; //LCD读写控制 sbit LCD_EN=P2^2; //LCD使能信号
1寄存器选择位RS,当RS=1时选择数据寄存器DDRAM。 ○
当RS=0时选择指令寄存器CDRAM。
2读写选择位RW,当RS=1时读数据寄存器。 ○
当RS=0时写数据或指令到寄存器。
3读写使能信号E,当E=1时读取数据。 ○
当E为下降沿是为写数据或指令。
检测LCD是否在处理其它数据而处于忙状态时,则读取忙状态信号位,当RS=0,RW=1,E=1时,LCD会输出八位数据,其中最高位DB7为忙状态位(LCD_busy_flag),若为1,表示LCD处于忙状态,为0表示LCD空闲。
3.4 LCD显示工作方式
/******* 初始化LCD ********/
void LCD_initial(void)
{ LCD_write_instruction(LCD_DISPLAY_DOUBLE_LINE); //单行显示,4数据线
LCD_write_instruction(LCD_AC_AUTO_INCREMENT | LCD_MOVE_DISENABLE);
//光标自动+1,关闭自动移动显示
LCD_write_instruction(LCD_DISPLAY_ON | LCD_CURSOR_OFF | LCD_CURSOR_BLINK_OFF); //显示开、光标显示关、光标闪烁关 LCD_cls( );//清屏 }
3.5 系统主程序
/************************************/
void main()
{
TMOD=0x20;//初始化串口 TL1 =0xfa;
TH1 =0xfa;//4800波特率
SCON=0x50;//工作方式1:八位异步通信,允许接收 PCON=0x00;//波特率加倍关
IE=0x90;//打开总中断EA,和串行口中断ES TR1=1;//开启启动定时器1
8
共分享92篇相关文档