1、摘要GPS技术在军事、通讯、气象、勘探、导航、遥感、大地测量、地球动力以及天文等众多学科领域得到极其广泛的应用,推动了科学技术的迅猛发展,也丰富了人类的科学文化生活。现在,GPS的外型设计已经转向便携式发展,逐步踏入寻常百姓的生活中。所以,对GPS的研究具有十分重要的意义。 论文主要研究GPS的定位原理与技术,单片机的编程及其应用,液晶屏的功能及其实现方法。制作了一套设计方案,以软、硬件相结合的方式完成整个GPS数据接收和显示的过程。完成了一台液晶显示的手持式GPS定位接收设备,并依次显示实时时间及所在地的经纬度。该定位系统完成后,定位精度能达到15m,所以该装置在测控领域的应用开发中具有一定
2、的实用价值和借鉴价值。 SUBTRACTION Global Positioning System technology get extremely comprehensive application at military,communications,meterology,exploration,navigation,remote sensing,earth survey, earth mover ,astronomy and other numerous subject field;let technology rapide development,also it makes human
3、 science culture life plentiful. Now, Assistant Global Positioning System exterior design already change of direction to portable type,step by step enter comman peoples daily life. Therefore, researching Assistant Global Positioning System has very important meaning.Paper main research GPS position
4、theory and technique,program and application of singlechip,the function and implement way.Make a set of design proposal,with soft to link hardware accomplish whole GPS information acceptance and evincive process.Accomplish one handheld GPS position receiving machine with Liquid crystal display,and d
5、isplay real time period and the location of latitude and longitude one by one.With the position system complete,the position precision can reach fifteen meters, so the system in measurement and control field application development have some practical worth and reference worth. 【关键词】 AT89S52单片机, GPS
6、,串口通信,波特率。 目录摘要2第一章 硬件设计62.1 整版设计62.2 电源模块设计62.3 显示模块设计62.4 GPS数据模块7第二章 软件设计83.1 主程序设计83.3 硬件连接设置93.4 LCD显示工作方式93.5 系统主程序93.6 数据接收程序10第三章 调试及性能分析124.1软件调试124.2硬件调试12结束语13参考文献14附录一(电路图)15附录二(程序列表)16 前言GPS前景由于GPS技术所具有的全天候、高精度和自动测量的特点,作为先进的测量手段和新的生产力,已经融入了国民经济建设、国防建设和社会发展的各个应用领域。 随着冷战结束和全球经济的蓬勃发展,美国政府宣
7、布2000年至2006年期间,在保证美国国家安全不受威胁的前提下,取消SA政策,GPS民用信号精度在全球范围内得到改善,利用C/A码进行单点定位的精度由100米提高到20米,这将进一步推动GPS技术的应用,提高生产力、作业效率、科学水平以及人们的生活质量,刺激GPS市场的增长。据有关专家预测,在美国,单单是汽车GPS导航系统,2000年后的市场将达到30亿美元,而在我国,汽车导航的市场也将达到50亿元人民币。可见,GPS技术市场的应用前景非常可观。GPS概述广义的GPS,包括美国GPS、欧洲伽利略、俄罗斯GLONASS、中国北斗等全球卫星定位系统,也称GNSS。狭义的GPS,即指美国的全球定位
8、系统Global Positioning System,简称GPS。公众常称的GPS,通常是指GPS系统的接收设备,如手持式GPS、汽车导航仪等。即全球定位系统(Global Positioning System)。简单地说,这是一个由覆盖全球的24颗卫星组成的卫星系统。这个系统可以保证在任意时刻,地球上任意一点都可以同时观测到4颗卫星,以保证卫星可以采集到该观测点的经纬度和高度,以便实现导航、定位、授时等功能。这项技术可以用来引导飞机、船舶、车辆以及个人,安全、准确地沿着选定的路线,准时到达目的地。全球定位系统(GPS)是20世纪70年代由美国陆海空三军联合研制的新一代空间卫星导航定位系统
9、。其主要目的是为陆、海、空三大领域提供实时、 全天候和全球性的导航服务,并用于情报收集、核爆监测和应急通讯等一些军事目的,是美国独霸全球战略的重要组成。经过20余年的研究实验,耗资300亿美元,到1994年3月,全球覆盖率高达98%的24颗GPS卫星星座己布设完成。 GPS全球卫星定位系统由三部分组成:空间部分GPS星座;地面控制部分地面监控系统;用户设备部分GPS 信号接收机。GPS定位技术具有高精度、高效率和低成本的优点,使其在各类大地测量控制网的加强改造和建立以及在公路工程测量和大型构造物的变形测量中得到了较为广泛的应用。绪论本设计是一个LCD1602电子液晶显示屏显示动画的设计。整机以
10、ATMEL 公司生产的40脚单片机AT89S52为核心,介绍了以它为控制系统的LCD电子液晶显示屏的动态设计和开发过程。该电子显示屏内部自带了ASCII码识别显示控制电路部分,如果需要显示一个西文字符,只需要让单片机给他输入这个西文字符的ASCII码即可。文中详细介绍了LCD显示的硬件设计思路、硬件电路各个部分的功能及原理、相应软件的程序设计。控制任务,本设计采用AT89s52单片机为核心控制芯片,控制任务包括两个部分:数据接受控制和显示控制。:数据接收控制:51单片机内部集成了串行口通信电路,本设计应用这个电路接收外部数据,其数据格式为八位数据+1位停止位。把接收到的数据存储到数据缓冲区。:
11、显示控制:利用51单片机的I/O端口控制LCD1602液晶显示器显示相应信息;显示之前先从缓冲区取出数据,经过CPU处理过后,送到LCD1620显示需要信息。 数据采集方案,为了减少接收出错的问题,采集数据时使用串行口中断数据接收方式。方案:直接接收,不论接收到的数据是什么,先把串行口发送过来的数据接收到数据缓冲区过后,再对数据进行处理。GPS模块为一种智能模块,它每秒钟会发出几种数据,包括:$GPGGA、$GPRMC、$PGRMV、$PGRMO、$PGRMC等数据格式。每个数据为1536个字节数据,如果把每个数据都接收到单片机的缓冲区,那么单片机就需要很大的数据存储器RAM,这样单片机内部的
12、RAM是不够用的,更何况还有程序处理。所以这种数据采集的方案是不行的。方案:选择接收,先判断接收到的数据的格式,然后选择需要的格式中的一些数据进行存储。这样就大大的节余了RAM,解决RAM不够用的问题。例如:接收$GPGGA格式数据的时间:前五次数据接收的时候先判断数句格式(依次判断接收到的数据是否先后为$、G、P、G、G、A),如果是,然后判断接下来的逗号(,)是第几个逗号。如果是第一个,说明接下来的数据是时间,如果是第二个,说明接下来的数据是纬度,依此类推。本设计采用这种方案接收数据。方案比较:前者数据接收的方案虽然接收的方法简单,接收程序编写很容易,但是学要很大的RAM空间,设计时需要外
13、加存储器,程序编写时就得多写上数据存储处理程序。这样就大大的增加了开发的诸多问题,包括成本,开发时间,试调难度等。后者数据接收方案比起前者来说节约了不少的RAM,而且再数据接收前只需要先简单判断接收到的数据格式即可;而且减少了中断处理的时间,让给其它进程工作。减少了开发的成本和开发时间,以及电路的复杂程度。所以本设计采用第二种数据接收的方案。第一章 硬件设计系统硬件部分电路大致上可以分成稳压电源、单片机小系统及外围电路和LCD显示屏电路五部分。2.1 整版设计设计原理图:电源串行口51单片机GPS模块LCD1602以单片机为核心将GPS数据发送模块,LCD1602显示模块系统的结合在一起形成一
14、个整体,实现特定功能。2.2 电源模块设计各个模块的电源供电电压均为5V,所以只需要设计5V单电源供电即可。设计采用稳压芯片LM7805做电源稳压核心。电路图如下所示,输入电压为220v交流电,经过变压器降压为9V交流电,再运用二极管的单向导电性对9V交流电整流,使用二级管连接成整流槽,使电压负电压整流成正电压。电容C1为滤波电容,让电压波纹幅度减小,然后由LM7805集成稳压芯片将输入电压整流为5V稳压源。小电容C3,、C4为高频信号滤除电容,改善负载的瞬态响应。2.3 显示模块设计由与本设计显示需要显示相应的数据信息,包括相应的西文字符,所以不采用数码管显示,采用带西文字库的LCD1602
15、做显示器,显示电路如电路中的可变电阻RV2最大阻值为1K,其作用为调节VEE输入引脚的电压,实现对LCD1602对比度的调节。LCD的数据端口的工作方式有两种,一种为8数据线工作方式,另一种为4数据线工作方式。为了节余端口,本设计采用4数据线工作方式。每次向LCD写8为数据分两次写,先高位后低位。2.4 GPS数据模块GPS数据模块不需要自己设计,采用成品电路模块做数据传送。我们只需要设计GPS数据通行部分即可。GPGGA数据格式:$GPGGA,M,M,*xx$GPGGA:起始引导符及语句格式说明(本句为GPS定位数据); :UTC时间,格式为hhmmss.sss; :纬度,格式为ddmm.m
16、mmm(第一位是零也将传送); :纬度半球,N或S(北纬或南纬) :经度,格式为dddmm.mmmm(第一位零也将传送); :经度半球,E或W(东经或西经) :定位质量指示,0=定位无效,1=定位有效; :使用卫星数量,从00到12(第一个零也将传送) :水平精确度,0.5到99.9 :天线离海平面的高度,-9999.9到9999.9米 M :指单位米:大地水准面高度,-9999.9到9999.9米 M :指单位米:差分GPS数据期限(RTCM SC-104),最后设立RTCM传送的秒数量:差分参考基站标号,从0000到1023(首位0也将传送)。 * : 语句结束标志符 xx : 从$开始到
17、*之间的所有ASCII码的异或校验和: 回车: 换行GPS数据通信为232串口通信,在通信过程中就需要数据电平转换,应用到232通信电平转换芯片MAX232,电路如下:第二章 软件设计本设计的主要功能是接收GPS模块传送的数据,并显示出相应的数据信息,包括当地时间、纬度、经度以及高度。数据接收部分,采用串行口中断接收数据。显示部分就采用一个I/O口控制LCD1602显示相应的信息。3.1 主程序设计系统主程序的总体结构如图所示。系统的主程序开始以后,首先是对系统环境初始化,包括设置串口、定时器、中断,LCD1602初始化;然后LCD显示屏进入开机状态,显示开机信息(LCD_log),转入正常的
18、显示,并接收数据,每次显示两串字符。接着由于单片机没有停机指令,所以可以设置系统程序不断地循环执行数据信息显示。NY图3-2 数据接收程序流程图进入中断清除接收中断标志位退出中断数据格式判断不符合置标志位符合数据接收标志位01数据接收完毕清除标志系统程序结构属中断方式,绝大多数功能在中断服务子程序中完成。根据总体结构,可将程序划分为几个功能化模块:串行口中断服务程序、显示子程序、扫描程序。各个模块可进行独立设计、调试和查错,最终再连接成一个整体。图3-1 系统主程序的总体结构开 始系统初始化显示开机信息显示数据信息3.2 显示驱动程序void LCD_check_busy(void); /忙检
19、查void LCD_cls(void); /清屏void LCD_write_data(unsigned char); /写数据void LCD_write_instruction(unsigned char); /写指令void LCD_set_position(unsigned char); /设置光标位置void LCD_initial(void); /LCD1602初始化void LCD_printc(unsigned char); /输出单个字符void LCD_prints(unsigned char *);/输出字符串void LCD_log(void);/开机信息显示void
20、LCD_show(void);/信息显示 void delay(unsigned char);/延时3.3 硬件连接设置#define LCD_DATA P2 /LCD的数据口#define LCD_BUSY LCD_DATA7; /LCD忙信号位sbit LCD_RS=P20; /LCD寄存器选择sbit LCD_RW=P21; /LCD读写控制sbit LCD_EN=P22; /LCD使能信号寄存器选择位RS,当RS=1时选择数据寄存器DDRAM。 当RS=0时选择指令寄存器CDRAM。读写选择位RW,当RS=1时读数据寄存器。 当RS=0时写数据或指令到寄存器。读写使能信号E,当E=1时
21、读取数据。当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_DISENA
22、BLE); /光标自动+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,和串行口中断ESTR1=1;/开启启动定时器1LCD_initial( );/
23、LCD1602初始化LCD_log( );/显示开机信息while(1) LCD_show( );/除了数据接收状态,一直处理显示在串口通信中需要设置串口通信的数据传输速度,及波特率,设置定时器的溢出率即可,晶振为11.0592MHz,当TL1 =0xfa;,TH1 =0xfa时为4800kbps波特率。计算公式为:T0初值X=2TMOD特殊功能寄存器为定时器计数器工作方式寄存器,前四位控制定时器1,后四位控制定时器0;本设计采用定时器1,工作方式2(八位自动重装载,N=8),SCON为串行口数据通信控制特殊寄存器,高三位为工作方式控制位,本设计采用工作方式1,8位数据异步通信。D4位为接收允
24、许控制位,本设计要采用串行口中断接收GPGGA数据,所以该为置1。IE为中断允许控制特殊寄存器,本设计要打开串行口中断和总中断。3.6 数据接收程序/*串行口中断子程序*/RI=0;/软件清除中断标志位,串行口中断需要软件清零,去除中断标志进入中断过后要先判断接收数据的格式,否则会出现乱接收数据,出现接收到的数据不对的问题,先判断是否接收到GPGGA格式语句的第一个字符“$”,其ASCII码为0x24,收到后,继续判断格式是不是为GPGGA,分五次中断判断,如果是,开始记录数据并设置记录标志(read_start),否则退出数据接收中断,程序设计如下:if(SBUF=$)/判断是不是$符号fl
25、ag1=1;/接收到$,起始字符igps=0;/记录纬度数据字符数量的变量Num_comma=0;/记录逗号数量的变量else flag1=0;if(SBUF=G)&(flag1=1)flag2=1;else flag2=0;if(SBUF=P)&(flag2=1)flag3=1;else flag3=0;if(SBUF=G)&(flag3=1)flag4=1; else flag4=0;if(SBUF=G)&(flag4=1)flag5=1;else flag5=0;if(SBUF=A)&(flag5=1)read_start=1;/开始接收数据 else read_start=0通过上述格
26、式判断后,说明接下来的数据就是所需要的GPGGA格式数据,然后选择所需要的数据接收并存到缓存区,每个数据都是以逗号隔开的,我们只需要判断该逗号是第几个逗号就可以知道后面来的数据是表示说明含义。程序设计如下if(read_start=1)/开始接收GPGGA中的数据信息,if(SBUF=,)/利用GPRMC数据中的逗号间隔,区分接收到/的数据表示的信息Num_comma+;/记录逗号个数,标志数据的意义if(Num_comma=1)/接收时间,时分秒格式data_tempigps=SBUF;igps+;/接收到的数据个数加1if(Num_comma=2)/接收接收纬度,ddmm.mmmm格式da
27、ta_tempigps=SBUF;igps+;if(Num_comma=4)/接收经度,ddmm.mmmm格式data_tempigps=SBUF;igps+;if(Num_comma=10)/海拔高度:0-99999.9if(SBUF!=M)/为节约RAM空间,不接收M字符data_tempigps=SBUF;igps+;判断这一帧数据是否接收完毕,每一个数据格式都是以 * 符号结束的,当接收到 * 号时表示这一帧数据已经发送完毕。程序设计如下: if(SBUF=*)/判断是否收到GPRMC格式语句的字符“*”,/如果是,则表示接收完毕,开始处理for(i=0;iigps;i+)data_t
28、empigps=dis_tempigps;/数据放到显示缓冲区/返回初值;标识结束一次接收完毕read_start=0;Num_comma=0;igps=0;第三章 调试及性能分析一个单片机系统经过总体设计,在允许的条件下,根据本设计系统的需求性首先采用在PC机上用模拟开发软件进行检测和调试,再进行硬件的组装与调试。4.1软件调试软件调试采用Proteus 7.1、操作系统Windows xp,在PC机上对目标电路原理图和程序进行检测和调试。一 目标程序纠错软件仿真结果: 程序正确无误。二 子程序功能调试程序设计通常采用模块程序设计,调试时可对一个个子程序分别进行调试,设置好入口条件,然后采用
29、单步运行或断点运行方式,检查系统CPU现场、RAM和I/O口状态,看程序执行结果符合设计要求。三 整体程序综合调试即把各子程序整体连起来进入到综合电路调试,能实现预计的功能显示用软件仿真调试和修改完毕,下一步焊接硬件进行硬调试。4.2硬件调试焊接硬件,检查线路连接正确无误。硬件调试环境,电源输入220V交流电,输出4.98V直流电,给电路板接通4.98V直流电源。结束语以上仅对LCD显示屏的结构和驱动、显示电路原理作一详细介绍和分析。由于自己知识水平的局限和时间的仓促,设计中或还存在着一些不足,我真诚的接受老师们的批评和指正.。从课题选择、方案论证到具体设计,每一步对我来说无疑是巨大的尝试和挑
30、战,我不断地给自己提出新的问题,然后去论证、推翻,在这个往复的过程中,我这篇稚嫩的设计日趋完善。每一次改进我都收获良多,虽然我的设计作品不是很成熟,而且借鉴了前人的很多资料,但我仍然心里有一种莫大的幸福感,因为我实实在在地走过了一个完整的设计所应该走的每一个过程,并且享受了每一个过程,更重要的是这个设计中我加入了自己鲜活的思想。在做这次毕业设计过程中使我学到了很多,加深了对单片机、集成模块、LCD液晶显示屏和C语言的理解,验证了所学理论知识,提高了基本的解决实际问题的能力,并增加了对电子设计方面的兴趣。希望这次的经历能让我在以后的工作和生活中不断成长与进步。 就此作结!参考文献1. 求是科技
31、编著 单片机典型模块设计实例导航 人民邮电出版社 2004年第一版2. 求是科技 编著 单片机典型外围器件及其应用实例 人民邮电出版社2006年第二版3. 高峰 编著 单片机应用系统设计及使用技术 机械工业出版社2004年第一版4. 赖麒文 编著 8051单片机C语言彻底应用 科学出版社2002年第一版5. 李光飞 娄然苗 胡佳文 谢象佐 编著单片机课程设计实例指 北京航空航天大学出版社 2004年第一版6. 周靖武 周灵彬 编著 单片机系统的Proteus设计与仿真 电子工业出版社 2007年第一版7. 张毅刚 主编 单片机原理及应用 高等教育出版社 2003年第一版8. 张志良 主编 单片
32、机原理及控制技术(第2版) 北京机械工业出版社,20059. 李全利 编著 :单片机原理及接口技术(第2版) 北京:高等教育出版社,200410. 徐仁贵 主编 :微型计算机接口技术及应用 北京:机械工业出版社,1998附录一(电路图)系统电路图附录二(程序列表)程序清单:程序文件一:GPSrecive.c#includeunsigned char Num_comma=0;/逗号纪录数bit read_start=0;/开始接收数据标志位unsigned char *data_temp= ;/数据缓存区unsigned char *dis_temp=0139250056.25680014.25
33、6901203.5;/显示数据unsigned char i,igps=0;/igps纪录接收次数,用于表示存储在数组中的位置bit flag1=0,flag2=0,flag3=0,flag4=0,flag5=0;/接收标志位:GPGGA#define START$/字符串开始#define END*/字符串结束void LCD_show( )unsigned char i;LCD_set_position(0);LCD_prints(Time- );for(i=0;i2;i+) LCD_printc(dis_tempi);LCD_printc(:);for(i=2;i4;i+) LCD_pr
34、intc(dis_tempi);LCD_printc(:);for(i=4;i6;i+) LCD_printc(dis_tempi);LCD_set_position(0x40);LCD_prints(Latit:);for(i=6;i15;i+) LCD_printc(dis_tempi);LCD_printc(*);delay(200);delay(200);LCD_cls();LCD_set_position(0);LCD_prints(Longi:);for(i=15;i24;i+) LCD_printc(dis_tempi);LCD_printc(*);LCD_set_positio
35、n(0x40);LCD_prints(High : );for(i=24;i31;i+) LCD_printc(dis_tempi);LCD_prints(M);delay(255);delay(200);/*串行口中断子程序*/void serial() interrupt 4RI=0;/软件清除中断标志位/判断是否接收到字符“$”,ASCII码为0x24,收到后开始继续数据并置标志record=1;if(SBUF=$)/判断是不是$符号flag1=1;/开始接收数据,计数变量初始化(清零);igps=0;/记录纬度数据字符数量的变量Num_comma=0;/记录逗号数量的变量else fl
36、ag1=0; /判断读取格式是不是GPGGA格式if(SBUF=G)&(flag1=1)flag2=1; else flag2=0;if(SBUF=P)&(flag2=1)flag3=1; else flag3=0;if(SBUF=G)&(flag3=1)flag4=1; else flag4=0;if(SBUF=G)&(flag4=1)flag5=1; else flag5=0;if(SBUF=A)&(flag5=1)read_start=1; else read_start=0;if(read_start=1)/开始处理GPRMC中的数据信息,if(SBUF=,)/利用GPGGA数据中的逗
37、号间隔,判断数据信息Num_comma+;/记录逗号个数,标志数据的意义if(Num_comma=1)/接收时间,时分秒格式data_tempigps=SBUF;/将字符放入字符串“data_temp”中igps+;if(Num_comma=2)/接收接收纬度,ddmm.mmmm格式data_tempigps=SBUF;igps+;if(Num_comma=4)/接收精度,ddmm.mmmm格式data_tempigps=SBUF;igps+;if(Num_comma=10)/海拔高度:0-99999.9if(SBUF!=M)/不接受M单位数据,节省资源data_tempigps=SBUF;i
38、gps+;if(SBUF=*)/判断是否收到字符“*”,是,则结束接收,开始处理for(i=0;iigps;i+)data_tempigps=dis_tempigps;/返回初值;标识结束一次接收完毕Num_comma=0;read_start=0;igps=0;/*/void main()TMOD=0x20;/初始化串口TL1 =0xfd;TH1 =0xfd;/4800波特率SCON=0x50;/工作方式1:八位异步通信,允许接收PCON=0x00;/波特率加倍关IE=0x90;/打开总中断EA,和串行口中断ESTR1=1;/开启启动定时器1LCD_initial();LCD_log();/
39、开机显示信息while(1)LCD_show();程序文件二:LCD1602.c#include header.hvoid LCD_check_busy(void) UCHAR DH;/高字节 do /分两次写,每次写四位,先高位后低位 LCD_RS=0; LCD_RW=1; LCD_EN=0; LCD_EN=1; _nop_(); _nop_(); DH = LCD_DATA & 0xF0; LCD_EN=0; LCD_RW=0; LCD_RW=1; LCD_EN=1; _nop_(); _nop_(); LCD_EN=0; while (DH & 0x80);void LCD_write_
40、instruction(unsigned char LCD_instruction) LCD_DATA&= 0x0F; LCD_DATA|= (LCD_instruction & 0xF0);LCD_RS=0; LCD_RW=0; LCD_EN=0;LCD_EN=1;_nop_();_nop_();LCD_EN=0; LCD_DATA&= 0x0F; LCD_DATA|= (LCD_instruction 4);LCD_EN=1;_nop_();_nop_();LCD_EN=0;LCD_check_busy();/* 输出一个字节数据到LCD */void LCD_write_data(uns
41、igned char LCD_data) LCD_DATA&= 0x0F; LCD_DATA|= (LCD_data & 0xF0);/ Get the most significant nibble first. LCD_RS=1;LCD_RW=0; LCD_EN=0; / Specify a data1 write operation. LCD_EN=1; _nop_();_nop_();LCD_EN=0; LCD_DATA&= 0x0F; LCD_DATA|= (LCD_data 4); / Repeat for least significant nibble. LCD_EN=0; LCD_EN=1;_nop_();_nop_();LCD_EN=0; LCD_check_busy(); /* LCD清屏 *