基于单片机的直流电压检测系统设计-课程设计说明书(共28页).doc
精选优质文档-倾情为你奉上山东建筑大学课 程 设 计 说 明 书题 目: 基于单片机的直流电压检测系统设计课 程: 单片机原理及应用B课程设计院 (部): 信息与电气工程学院专 业: 班 级: 学生姓名: 学 号: 指导教师: 完成日期: 2013年6月专心-专注-专业摘 要随着电子科学技术的发展,电子测量成为广大电子工作者必须掌握的手段。对测量的精度和功能的要求也越来越高,而电压的测量甚为突出,因为电压的测量最为普遍。本设计在查阅了大量前人设计的数字电压表的基础上,利用单片机技术结合A/D转换芯片ADC0832构建了一个直流数字电压表。本文首先简要介绍了单片机系统的优势,然后详细介绍了直流数字电压表的设计流程,以及硬件系统和软件系统的设计。本文介绍了基于89S51单片机的电压测量系统设计,介绍1602LCD液晶的功能和ADC0832的转换原理。该电路设计简单,方便。该设计可以测量05V的电压值,并在1602LCD液晶上显示出来。本系统主要包括三大模块:主程序模块、显示模块、A/D转换模块,绘制点哭原理图与工作流程图,并进行调试,最终设计完成了该系统的硬件电路,在软件编程上,采用了c语言进行编程,开发了显示模块程序,A/D转换程序。关键词:89S51单片机;1602LCD液晶;ADC08321 设计目的电压是属于电子测量中的一个重要组成部分。了解,测出各种电压的值,有助于让我们更加安全、方便的使用电压。因为研究电压的测量值具有重要价值。传统的指针式电压表功能单一、精度低,已经满足不了现在时代的需求,而采用单片机的数字电压表,精度高、抗干扰能力强,可扩张性强、集成方便,还可与PC实行实时通信,目前,由各种单片机和A/D转换器构成的数字电压表,已被广泛用于电子及电工测量、工业自动化仪表、自动测试系统等智能化测量领域。基于单片机的电压检测系统设计,控制系统采用89S51单片机,A/D转换器采用ADC0832为主要硬件,实现数字电压表的硬件电路与软件设计。数字电压表可以测量05V的输入电压值,并在1602LCD液晶模块上显示。2 设计要求1根据已知参数对输入信号特征进行分析、需求分析,选择确定单片机型号、各种外围芯片型号,完成系统硬件设计。2基本教学要求:每人一台计算机,计算机安装Keil、Protel等软件。3. (利用单片机设计并制作简易的直流数字电压表,能够测出05V的直流电压,电路组成框图如图所示。 (1)测量精度0.02V。 (2)利用数码管或者液晶显示器显示电压值。(3)测量范围05V。3 设计内容3.1 单片机电压测量系统的总体设计 本设计从各个角度分析了由单片机组成的数字电压表的设计过程及各部分电路的组成及其原理。框图如下:本设计主要分为两部分:硬件电路及软件程序。而硬件电路又大体可分为单片机小系统电路、A/D转换电路、液晶显示电路,各部分电路的设计及原理将会在硬件电路设计部分详细介绍;程序的设计使用C语言编程。电压是检测中最基本的测量值,主要过程是模拟信号经过输入电路调理,在经过放大电路,变换成合适范围的信号幅度,接着该信号,经过A/D转换电路转化成数字信号,数字信号既可以直接经过单片机的处理、保存,再由液晶显示器显示出来。总体设计的内容:被测电压经过运算放大电路,可以被AD接收的电压范围,然后该信号经过ADC0832芯片A/D转换电路转化成数字信号,再经过89S51单片机的处理、保存,由1602LCD液晶模块显示出来。该电压表可达到如下程度: (1) 电压表量程范围0V5V; (2) 能用液晶显示电压值; (3) 测量精度可达到0.02mV。3.1.1 硬件选择选择89S51作为单片机芯片,选用1602LCD液晶屏来实现电压显示,由于ADC0832的基准电压由它内部本身提供,所以为了方便,我就利用ADC0832作为数模转换芯片,利用P0至P4的各个串口来进行不同设备间的连接,计算机进行汇编,H51/L仿真器,单片机多功能实验箱。3.1.2 软件选择 本设计是硬件电路和软件编程相结合的设计方案,选择合适的编程语言是一个重要的环节。在单片机的应用系统程序设计时,常用的是汇编语言和C语言。汇编语言的特点是占用内存单元少,执行效率高。执行速度快。但它依赖于计算机硬件,程序可读性和可移植性比较差。而C语言虽然执行效率没有汇编语言高,但语言简洁,使用方便,灵活,运算丰富,表达化类型多样化,数据结构类型丰富,具有结构化的控制语句,程序设计自由度大,有很好的可重用性,可移植性等特点。由于现在单片机的发展已经达到了很高的水平,内部的各种资源相当的丰富,CPU的处理速度非常的快。用C语言来控制单片机无疑是一个理想的选择。所以在本设计中采用C语言编写软件程序。3.2 硬件电路的设计3.2.1 输入电路模块设计电压测量原理如图所示,电压输入到LM358的正相端。最高输入电压可到5V ,使输入电压处于AD量程范围。LM358 构成一个电压跟随器,起到隔离前后通道的作用,其较低的输出电阻还可以提高带负载能力,输出端 接入ADC。 由于该设计精度要达到0.01mV左右,所以我们加入了LM358的放大器,来放大较小的被测电压,输入到AD转换器中,再经过单片机处理从液晶上显示出来。如图所示,是由LM358放大器组成的,LM358 内部包括有两个独立的、高增益、内部频率补偿的,适合于电源电压范围很宽的单电源使用,也适用于双电源工作模式,在推荐的工作条件下,电源电流与电源电压无关。它的使用范围包括传感放大器、直流增益模块和其他所有可用单电源供电的使用运算放大器的场合。电容C5是阻容滤波,为了使得信号更稳定。3.2.2 LM7805稳压电源电路介绍用lm78/lm79系列三端稳压IC来组成稳压电源所需的外围元件很少,电路内部有过流、过热和调整管的保护电路,使用方便、可靠,而且价格低廉。该系列集成稳压IC型号中的lm78或lm79后面的数字代表此三端集成稳压电路的输出电压。因为三端固定集成稳压电路的使用方便,电子制作中经常采用。 这是一个输出正5V直流电压的稳压电源电路。IC采集成稳压器lm7805,C4为输出端滤波电容,D1为输入反向保护。3.2.3 显示模块电路设计显示模块的选择关系到整个系统设计的功能多少,我们只需要显示最后电压的数字值和电压的单位,根据各种显示器件的特点:数码管只能显示数字,不能显示单位字符,不符合本设计的要求。而点阵显示器件驱动显示软件程序编写麻烦,占用的引脚相对也较多。也不是理想的显示器件。所以在本设计中,我们考虑用液晶显示器件,虽然12864液晶比1602液晶的功能强,不过在价格方面却贵了好多。而1602液晶也足够满足本设计的需要。因此,在本设计实验我们选择1602液晶显示器件。1602LCD分为带背光和不带背光两种,带背光的比不带背光的厚,是否带背光在应用中并无差别,1602液晶模块内部的字符发生存储器有存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号等,每一个字符都有一个固定的代码,比如大写的阿拉伯数字“8”的代码是B(38H),显示时模块把地址38H中的点阵字符图形显示出来,我们就能看到数字“8”。LCD1602与单片机接口如图所示。 GND为电源地,VCC接5V电源正极,V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时则会产生“鬼影”,使用时则可以通过一个10K的电位器调整对比度)。 通过RW的高电平时读取输入电压的数字信号,再经过RW的低电平进行写操作,在LCD上显示出来。RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。E(或EN)端为使能(enable)端。D0D7与单片机的P0端口相接。3.2.4 A/D转换设计3.2.4.1 A/D电路的介绍和选择在该设计中,模数(A/D)转换模块是一个非常重要的模块,它关系到最后数字电压表电压值的精确度。所以,A/D芯片的选择是设计过程中一个很重要的环节。模数转换器即A/D转换器,或简称ADC,通常是指一个将模拟信号转变为数字信号的电子元件。通常的模数转换器是将一个输入模拟电压信号转换为一个输出的数字信号。模数转换器最重要的参数是转换的精度,通常用输出的数字信号的位数的多少表示。转换器能够准确输出的数字信号的位数越多,表示转换器能够分辨输入信号的能力越强,转换器的性能也就越好。A/D转换一般要经过采样,保持,量化及编码4个过程。在实际电路中,有些过程是合并进行的,如采样和保持,量化和编码在转换过程中是同时实现的。ADC0832是8脚双列直插式双通道A/D转换器,能分别对两路模拟信号实现模数转换,可以用在单端输入方式和差分方式下工作。ADC0832采用串行通信方式,通过DI 数据输入端进行通道选择、数据采集及数据传送。8位的分辨率(最高分辨可达256级),可以适应一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在05V之间。具有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。ADC0832是8位精度,在本设计中,为了减少数字电压表的误差率,在同类比的AD转换器中,ADC0832性价比较高,于是我就选择了ADC0832作为这次设计的AD转换器。3.2.4.2 ADC0832与单片机的接口电路 CH0、CH1,是ADC0832的两个通道,在ADC0832的工作时,被测的电压进行通道选择进入CH0或者CH1通道,ADC0832采用串行通信方式,通过DI 数据输入端进行通道选择、数据采集及数据传送。CS,CLK,DI,DO四个是与单片机P3接口相连,只有在使能端CS为低电平时,ADC0832才开始工作,此时处理器向AD传送时钟信号,而根据DI和DO来选择需要通道的信号,传入单片机处理和保存。在第一个时钟脉冲的下降之前DI端必须是高电平,表示开始信号。在第二、三个脉冲下将之前DI端应输入两个数据用于选择通道功能。 通道地址通道工作方式说明SGL/DIFODD/SIGN0100+-差分方式01-+10+单端输入方式11+当此两个数据为“1”、“0”时,只对CH0 进行单通道转换。当两个数据为“1”、“1”时,只对CH1进行单通道转换。当两个数据为“0”、“0”时,将CH0作为正输入端IN+,CH1作为负输入端IN-进行输入。当两位数据为“0”、“1”时,将CH0作为负输入端IN-,CH1 作为正输入端IN+进行输入。到第三个脉冲的下降之后DI端的输入电平就失去输入作用,此后DO/DI端则开始利用数据输出DO进行转换数据的读取。从第4个脉冲下降沿开始由DO端输出转换数据最高位Data7,随后每一个脉冲的下降沿DO端输出下一个数据。直到第11个脉冲时发出最低位数据Data0,一个字节的数据输出就完成了。也正是从此位开始输出下一个相反字节的数据,即从第11个字节的下降沿输出Data0。随后输出8位数据,到第19 个脉冲时数据输出完成,也标志着一次A/D转换的结束。最后将CS置高电平停用芯片,直接将转换后的数据进行处理就可以了。作为单通道模拟信号输入时ADC0832的输入电压是05V且8位分辨率时的电压精度为19.53mV,即(5/256)V。如果作为由IN+与IN-输入的输入时,可是将电压值设定在某一个较大范围之内,从而提高转换的宽度。但值得注意的是,在进行IN+与IN-的输入时,如果IN-的电压大于IN+的电压则转换后的数据结果始终为00H。3.2.5 单片机模块的简介单片机是指一个集成在一块芯片上的完整计算机系统,具有一个完整计算机所需要的大部分部件:CPU,内存,总线系统等。而目前常用的单片机的8位有51系列单片机,AVR单片机,PIC单片机。应用最广的8位单片机还是intel的51系列单片机。51系列单片机的特点是:硬件结构合理,指令系统规范,加之生产历史悠久,世界有许多芯片公司都买了51的芯片核心专利技术,并在其基础上扩充其性能,使得芯片的运行速度变得更快,性价比更高。我们在本次设计中选择了89S51芯片,正因为具有功能强、体积小、成本低、功耗小等特点,所以它可单独地完成现代工业控制所要求的智能化控制功能,能在软件的控制下准确、迅速、高效地完成程序设计者事先规定的任务。89S51是一种带4K字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51 指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的89S51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。3.2.5.1 单片机小系统 单片机最小系统包括晶振电路,电源。在此模块中,单片机的晶振是12MHZ。P1端口与AD转换器连接,RS、RW、EN和P0端口与1602LCD连接。被测电压被AD转换后从P1端口输入,由单片机进行数据的采集然后保存在RAM中。再经过单片机系统的软件程序编写,适合1602LCD的输入,则通过P1端口输出,在1602LCD上显示出来被测的电压。3.2.5.2 89S51单片机的基本组成(1)一个8位的微处理器(CPU)。(2)片内256字节数据存储器RAM/SFR,用以存放可以读/写的数据,如运算的中间结果、最终结果以及欲显示的数据等。(3)片内4KB程序存储器Flash ROM,用以存放程序、一些原始数据和表格。(4)4个8位并行I/O端口P0-P3,每个端口既可以用作输入,也可以用作输出。(5)两个16位的定时器/计数器,每个定时器/计数器都可以设置成计数方式。(6)具有5个中断源、两个中断优先级的中断控制系统。(7)一个全双工UART的串行I/O口,用于实现单片机之间或单片机与PC机之间的串行通信。(8)片内振荡器和时钟产生电路,但石英晶体和微调电容需要外接。(9)具有节电工作方式,即休闲方式和掉电方式。以上各个部分通过片内八位数据总线相连接。3.2.5.3 89S51引脚及其功能 (1)XTAL1(19脚):振荡器反相放大器及内部时钟发生器的输入端。(2)XTAL2(18脚):振荡器反相放大器的输出端。(3)RST(9脚):复位输入,当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。(4)P0口(3932脚):P0口是一个漏极开路的8位准双向I/O端口。作为漏极开路的输出端口,每位能驱动8个LS型TTL负载。当P0口作为输入口使用时,应先向口锁存器写入全1,此时P0口的全部引脚浮空,可作为高阻抗输入。(5)P3口(1017脚):P3口是一组带有内部上拉电阻的8位双向I/O多功能口。P3口输出缓冲器可驱动4个TTL逻辑门电路。对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口,此时,被外部拉低的P3口将用上拉电阻输出电流。当CPU不对P3口进行SFR寻址访问时,即用作第二功能输出/输入线时,由内部硬件使锁存器Q置1。整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处低电平10ms来完成。在芯片擦除操作中,代码陈列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。此外,89S51设有稳态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。 3.3系统软件的设计本设计是硬件电路和软件编程相结合的设计方案,选择合适的编程语言是一个重要的环节。在单片机的应用系统程序设计时,常用的是汇编语言和C语言。汇编语言的特点是占用内存单元少,执行效率高。执行速度快。但它依赖于计算机硬件,程序可读性和可移植性比较差。而C语言虽然执行效率没有汇编语言高,但语言简洁,使用方便,灵活,运算丰富,表达化类型多样化,数据结构类型丰富,具有结构化的控制语句,程序设计自由度大,有很好的可重用性,可移植性等特点。由于现在单片机的发展已经达到了很高的水平,内部的各种资源相当的丰富,CPU的处理速度非常的快。用C语言来控制单片机无疑是一个理想的选择。所以在本设计中采用C语言编写软件程序。3.3.1主程序的设计 初始化中,主要针对89S51、ADC0832的管脚和1602LCD液晶的位选进行初始化的设置。利用公式VOT=(unsigned int)(unsigned long)val*5000/255);得出数据显示在液晶显示器上的第一行;利用VAL= GetVal0832(1);得出的数据显示在液晶显示器上的第二行。 主程序:void main()uchar val;init();while(1)val = GetVal0832(1);Vot = (unsigned int)(unsigned long)val*5000/255);/显示电压WriteChar(0,0,'V');WriteChar(1,0,'O');WriteChar(2,0,'T');WriteChar(3,0,':');WriteChar(4,0,(Vot%10000)/1000+0x30);WriteChar(5,0,'.');WriteChar(6,0,(Vot%1000)/100+0x30);WriteChar(7,0,(Vot%100)/10+0x30);WriteChar(8,0,(Vot%10)+0x30);WriteChar(0,1,'V');WriteChar(1,1,'A');WriteChar(2,1,'L');WriteChar(3,1,':');WriteChar(4,1,val/1000+0x30);WriteChar(5,1,(val%1000)/100+0x30);WriteChar(6,1,(val%100)/10+0x30);WriteChar(7,1,(val%10)+0x30);delay(10);3.3.2 各子程序的设计3.3.2.1 A/D程序的流程图 为了高速有效的实现通信,我们采用汇编语言编写接口程序。由于ADC0832的数据转换时间仅为32S,所以A/D转换的数据采样频率可以很快,从而也保证的某些场合对A/D转换数据实时性的要求。数据读取程序以子程序调用的形式出现,方便了程序的移植。程序占用资源有累加器A,工作寄存器R7,通用寄存器B和特殊寄存器CY。通道功能寄存器和转换值共用寄存器B。在使用转换子程序之前必须确定通道功能寄存器B的值,其赋值语句为“MOV B,#data”(00H03H)。运行转换子程序后的转换数据值被放入B中。子程序退出后即可以对B中数据处理。3.3.2.2显示程序的流程图LCD进行初始化,从通电开始延时,先经过判忙后再进行功能设置,过一段时间后可以设置显示状态再经过延时清屏后才可以设置输入方式,具体实现过程如下图所示: LCD显示程序的设计一般先要确定LCD的初始化、光标定位、确定显示字符后,显示程序流程图如下: 总结与致谢目前电子测量设备在性能、测试功能、工艺结构等各方面都取得了巨大的发展,其研制和生产正向着系统化、数字化、高性能、多功能、快速、小型等方面发展。更不用说电压的测量。拥有先进的科学实验手段,这是科学技术现代化的一个重要标志,而一个国家电子测量水平的高低,往往是反映这个国家科技水平的重要方面。所以,我们必须努力提高我们的电子测量技术,争取早日达到国际先进水平4。传统的指针式电压表功能单一、精度低,已经满足不了现在时代的需求,而本次设计设计的系统具有精度高、速度快、读数方便、抗干扰能力强、可扩展性强、集成方便,还可与PC进行实时通信等优点,但同时存在一些不足,比如采样缓慢,难以操作等缺点。单片机的应用如今已经是在工业,电子等方面展示出了它的优越性,利用单片机在设计电路逐渐成了趋势,它与外围电路再加上软件程序就可以构建任意的产品,使得本设计成为现实。随着单片机的日益发展,它必将在未来显示出更大的活力,为电子设计更多精彩。对于数字电压表而言,功能将会越来越强大,以后一定要加强单片机知识的学习。通过本次课程设计,使我对单片机及数模电等知识的掌握和理解有了进一步加深,巩固了我在单片机原理及应用B课程中所学的基本理论知识和实验技能,使我对单片机原理及应用B课程有了更深入的了解,同时对数字电子技术、模拟电子技术等课程加深了理解,进一步激发了我对所学专业学习的兴趣;提高了我的认识和理解以及实践能力。在设计的过程和设计说明书的撰写过程中,高老师给予了我热心的帮助和大力的支持,给我提了诸多的宝贵意见,拓宽了我的思路。在此我向老师致以崇高的敬意和衷心的感谢!在我的学习过程中,张老师,胡老师等其它老师也给了我耐心的指导和帮助。我在此对各位老师表示诚挚的感谢!参考文献1 王珊,萨师煊.数据库系统概论M.北京:高等教育出版社.2006.2 蒋焕文,孙续编著.电子测量.第二版M.北京:中国计量出版社,1988. 3 杨吉祥,詹宏英编著.电子测量技术基础M.南京:东南大学出版社,1999. 4 陈杰美,古天祥编.电子仪器M.北京:国防工业出版社,1986. 5 张乃国编,电子测量技术M.北京:人民邮电出版社,1985. 6 刘君华编著.现代检测技术与测试系统设计M.西安:西安交通大学出版,19997 李广第 单片机基础M北京:北京航空航天大学出版社,1999. 8徐惠民、安德宁 单片微型计算机原理接口与应用.M 北京:北京邮电大学出版社,19969何立民.中一片机高级教程M.北京:北京航空航天大学出版社.2000.10徐江海.中一片机实用教程M北京:机械工业出版社,2006.11康华光,陈大钦.电子技术基础(模拟部分) M北京:i等教育出版社,1999.12孟庆浩,翟振铎,孙冰A/ D转换器MC 14433实际应用中若干问题的探讨J.天津理工学院学报,1996.附录一 系统整体电路图附录二 A/D转换电路的程序#include<reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int/定义液晶接口sbit rs=P20;sbit lcden=P22;sbit rw = P21;/ADC0832连接端口sbit ADC0832_CLK = P13;sbit ADC0832_DO= P15;sbit ADC0832_DI= P14;sbit ADC0832_CS = P12;uint Vot = 0;/ 读ADC0832指定通道AD转换数值uchar GetVal0832(uchar channel)uchar i,dat=0; / 读到的数据,MSB FIRST DATAbit SGL_DIF,ODD_SIGN; / 通道选择信号 switch(channel) case 1:SGL_DIF=1;ODD_SIGN=0;break; / 选单通道 case 2:SGL_DIF=1;ODD_SIGN=1;break; / 选单通道 case 3:SGL_DIF=0;ODD_SIGN=0;break; / CH0为+,CH1为- case 4:SGL_DIF=0;ODD_SIGN=1;break; / CH0为-,CH1为+ default:break; / 通道选择错误 ADC0832_CS=1; / 片选无效 / 一个无效时钟周期 ADC0832_CLK=1; _nop_(); ADC0832_CLK=0; _nop_(); ADC0832_CS=0; / 片选有效,开始AD转换/ 传START BIT 信号 ADC0832_CLK=0; _nop_(); ADC0832_DI=1; / START BIT ADC0832_CLK=1; /上升沿锁住START BIT信号 _nop_(); / 传通道选择信号 ADC0832_CLK=0; _nop_(); ADC0832_DI=SGL_DIF; ADC0832_CLK=1; / 上升沿锁住SGL/DIF信号 _nop_();ADC0832_CLK=0; _nop_(); ADC0832_DI=ODD_SIGN; ADC0832_CLK=1; / 上升沿锁住ODD_SIGN信号 _nop_(); ADC0832_CLK=0; / 此下降沿开始转换,开始读取数值 _nop_();/ 读取AD转换数值for(i=0;i<8;i+) ADC0832_CLK=1; / CLK为1时,DO肯定保持在稳定态 _nop_(); / 故此时可读出数据 if(ADC0832_DO)dat+; dat=dat<<1; ADC0832_CLK=0; _nop_(); /释放总线 ADC0832_CLK=1; _nop_(); ADC0832_CLK=0; _nop_(); ADC0832_CS=1; /读取完毕,片选无效 return dat;附录三 1602LCD显示模块的程序void delay(uint x)uint a,b;for(a=x;a>0;a-)for(b=10;b>0;b-); /LCD1602写命令void write_com(uchar com)P0=com;rs=0;rw=0;lcden=0;delay(10);lcden=1;delay(10);lcden=0;/LCD1602写数据void write_date(uchar date)P0=date;rs=1;rw = 0;lcden=0;delay(10);lcden=1;delay(10);lcden=0;/LCD1602初始化void init()delay(200);write_com(0x38);delay(20);write_com(0x38);delay(20);write_com(0x38);delay(20);write_com(0x0c);delay(20);write_com(0x06);delay(20);write_com(0x01);delay(20);/LCD1602指定位置显示字符void WriteChar(uchar pox_x,uchar pox_y,uchar chr)uchar addr=0;if( pox_y=0 )addr = pox_x + 0x80;elseaddr = pox_x + 0xC0;write_com(addr);delay(10);write_date(chr);delay(10);/LCD1602指定位置显示数值void WriteNum(uchar pox_x,uchar pox_y,uint dat,uchar zero)uchar b4;uchar i,j=0;if(dat<10000)b0 = (dat%10000)/1000;b1 = (dat%1000)/100;b2 = (dat%100)/10;b3 = dat%10;elseb0 = dat/10000;b1 = (dat%10000)/1000;b2 = (dat%1000)/100;b3 = (dat%100)/10;for(i=0;i<4;i+)if(bi=0)if(zero=0)WriteChar(pox_x+j,pox_y,bi+0x30);j+;elseWriteChar(pox_x+j,pox_y,bi+0x30);j+;