




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、摘 要摘 要 本课题是利用单片机设计一个数字电压表,能够测量05V之间的直流电压值,四位数码管显示,使用的元器件数目较少。外界电压模拟量输入到A/D转换部分的输入端,通过ADC0832转换变为数字信号,输送给单片机。然后由单片机给数码管数字信号,控制其发光,从而显示数字。此外,本文还讨论了设计过程中的所用的软件硬件环境,调试所出现的问题等。关键词:单片机; AT89C51;数字电压表; ADC0832,四位数码管。 Abstract This topic is the use of microcontroller design a digital voltmeter, capable of m
2、easuring between 0-5V DC voltage, four digital display, the use of fewer components. External analog voltage input to the A / D conversion part of the input of the conversion into a digital signal through the ADC0832, transmission to the microcontroller. And then by the microcontroller to the digita
3、l control digital signal, control the light, so the displayed number. In addition, the article also discusses the design process of software used in the hardware environment, debugging the problems and so on. Key words: SCM; AT89C51; digital voltmeter; ADC0832, four digital.37目录目 录第1章引言11.1 简介11.2 数
4、字电压表的功能3第2章电路系统设计42.1 数据采集42.1.1 A/D转换器42.1.2 ADC0832的工作方式62.2 数据处理72.2.1 AT89C5182.2.2 AT89C51单片机最小系统连接122.3 数据接收与数据处理电路132.4 显示设计132.4.1 LED显示的原理132.4.2 LED显示驱动14第3章程序设计163.1 主程序设计图框163.2 程序清单16第4章仿真过程274.1 Keil C软件的介绍274.2 Proteus软件简介284.3 Keil C与Proteus连接调试324.4 仿真结果图34参考文献35第1章 引言第1章 引言1.1 简介数字
5、电压表(简写为 DVM)就是在精密电测量技术、计算技术、自动化技术和电子技术的基础上产生和发展起来的。 数字式仪表是能把连续的被测量自动地变成断续的、用数字编码方式的、并以十进制数字自动显示测量结果的一种测量仪表。这是一种新型仪表,它把电子技术、计算技术、自动化技术的成果与精密电测量技术密切的结合在一起。成为仪器、仪表领域中独立而完整的一个分支。数字电压表是通用仪器中使用较广泛的一种测试仪器,很多电量或非电量经变化后都用可数字电压表完成测试。因此,数字电压表被广泛地应用于科研和生产测试中。本文将介绍一种以单片机为核心的电压测量仪表,它能够测量电压量,能够自动进行量程选择,并且测量结果能够通过数
6、码管显示,从而具有一定的智能性。回顾一下电压表的发展过程,大致可分为以下三个阶段: 数字化阶段。5060 年代中期,电压表的特点是运用各种原理实现模数(AD)转换即将模拟量转化成数字量,从而实现测量仪表的数字化。 高准确度阶段。由于精密电测量的需要,电压表开始向高准确度、高位数方向发展,出现了所谓复合型原理的仪表。 智能化阶段。60 年代末期,电子技术和工艺结构有了飞跃的发展,而大规模集成电路(LSI)与计算机技术相结合的产物是微处理器(简写为P)。1972 年,美国 Intel 公司首创微处理器,不久即研制出微处理器式数字电压表,实现了电压表数据处理自动化和可编程序。因为带有存贮器并使用软件
7、,所以可进行信息处理,可通过标准接口组成自动测试系统(简写为 ATS)。这些仪表除了完成原有电压表的各种功能外,还能够自校、自检,保证了自动测量的高准确度,实现了仪器、仪表的所谓“智能化”。当前,智能表发展十分迅速,而微处理式电压表在智能仪表中占的比重最大。智能化的电压表为实现各种物理量的动态测量提供了可能。 智能化数字电压表有以下几个突出的本领:可以程序控制利用事先编好的程序,可以让数字仪表自动按程序进行操作。在测量时可以按程序完成自动校准、自动调零、自选量程,然后进行自动测量。测量得到的数据又可以按程序进行自动计算、自动判断后进行自动调节和自动控制,并把数据按要求送往数据处理中心。在测量系
8、统发生故障时或者利用测量的间隙,它又有自动诊断、自动排除故障的能力。所有这些工作又都是严格地按规定好的程序自动进行,不需要人的干预。人在做测量工作时还可能因为精神因素引入各种人为的误差甚至造成重大失误,而这种自动测量却可以二十四小时不停地工作,且出错概率小。 有自校和自动修正误差的能力数字电压表的突出优点是准确度高,但为了取得高准确度,数字电压表也付出了很高的代价:不得不使用一些高精度、高稳定度的元器件和使用各种复杂的电路。数字电压表智能化以后,由于它有记忆、判断、运算和贮存数据的功能,因此它可以在测量的间隙中,自动对工作条件(如温度、湿度气压、频率等)的变化按给定的关系式进行计算,求出修正值
9、。再根据误差理论按编好的程序对测得的一系列数据自动进行计算并求出整个测量系统的误差,最后把它存进存贮器。在下一个测量周期内,智能电压表能从测得的结果中自动地扣除这个系统误差。这样,就可以不再使用那些复杂的电路和高精度、高稳定度的元器件而同样可以得到很高的测量准确度。再加上双积分电路可以集成化,于是使得智能化的数字电压表体积缩小、结构简化、成本降低,而质量仍很高,这对提高数字电压表的准确度和推动数字仪表的普及是极有利的。 自动变换数据由于智能化仪表有运算功能,因此它能测量一些简单的数据,通过推算的办法,求出一些复杂或难以测量的数据来。例如我们可以从测量的电容量 c或电感量 L 通过关系式求出 Q
10、 值、频率、周期、波形等等。这对简化测量方法是很有用的。 有自检、自我修复能力智能电压表可以按程序对仪表进行自检,如果发现了故障还可以立即转入自我修复程序,自动找出故障并修复。有些不允许停止控制的仪表(炼钢护、化工反应炉、飞行器等),可以把关键部分的备件放进仪表内,当自检时发现故障后,它会立即自动转换到备用电路上工作,保证控制不间断。由于智能仪表的这些优点,从上世纪七十年代末开始,各国的数字仪表已转向智能化仪表生产。进入八十年代后,除了普及型的数字电压表外,高档的数字电压表都已改为带微处理器的数字电压表。1.2 数字电压表的功能数字电压表(Digital VoIt Me-ter,DVM),以其
11、功能齐全、精度高、灵敏度高、显示直观等突出优点深受用户欢迎。特别是以AD转换器为代表的集成电路为支柱,使DVM向着多功能化、小型化、智能化方向发展。DVM应用单片机控制,智能仪表与计算机接口,组成自动测试系统。目前,DVM多为组成多功能式的,因此又称数字多用表(Digital Multi Meter,DMM)。数字电压表(Digital Voltmeter)简称DVM,它是采用数字化测量技术,把连续的模拟量(直流输入电压)转换成不连续、离散的数字形式并加以显示的仪表。传统的指针式电压表功能单一、精度低,不能满足数字化时代的需求,采用单片机的数字电压表,精度高、抗干扰能力强、可扩展性强、集成方便
12、,还可与PC进行实时通信。目前,由各种单片A/D 转换器构成的数字电压表,已被广泛用于电子及电工测量、工业自动化仪表、自动测试系统等智能化测量领域,示出强大的生命力。与此同时,由DVM扩展而成的各种通用及专用数字仪器仪表,也把电量及非电量测量技术提高到崭新水平。这里重点介绍单片A/D 转换器以及由它们构成的基于单片机的数字电压表的工作原理。第2章 电路系统设计第2章 电路系统设计数字电压表由A/D转换、数据处理及显示控制等组成,测量05.0V范围内的输入电压值,由两个3位共阴7段数码管扫描显示,最大分辨率0.1V,误差±0.05V。以AT89C51和ADC0832为核心内件。ADC0
13、832实现模数转换。单片机AT89C51是整个系统的核心,实现输入端的分路选择(量程转换),模数转换后数据的处理及在数码管上数据的显示,提供ADC0832芯片的工作频率等功能。2.1 数据采集2.1.1 A/D转换器模拟量转换成数字量(A/D转换)和数字量转换成模拟量(D/A)是计算机与外部环境进行联系的主要形式。当计算机用于工程控制,实时数据采集等方面时候,现场检测的模拟信号必须通过A/D转换变成数字量,送入计算机处理,计算机的输出信号又必须通过D/A转换成模拟信号送到现场去驱动机械或电气设备动作。计算机控制过程如图2-1:D/A转换计算机A/D转换现场检测信号 现场电气设备 图2-1计算机
14、控制过程示意图A/D转换的种类很多,主要的有逐次比较式、双积分式、并行式。逐次比较式主要特点是转换速度快,精度高,但抗干扰能力不强,价格适中。本次使用的ADC0832就是逐次比较式A/D转换器。逐次比较式A/D转换器是以A/D转换器为基础,加上比较器、逐次比较式寄存器、置数选择逻辑电路以及时钟等组成,如图2-2。其转换的基本原理如下:在启动信号控制下,首先置数选择逻辑电路给逐次比较式寄存器最高位置“1”,经D/A转换成模拟量与输入的模拟量V1进行比较,电压比较器给出比较结果。如果输入量大于或等于经D/A转换器输出的量,则比较器输出为“1”,否则为“0”,置数选择逻辑电路根据比较器输出的结果,修
15、改逐次比较式寄存器中的内容,使其D/A转换后的模拟量逐次比较输入的模拟量。经过若干次修改后的数字量,就是A/D转换的结果。D/A转换器 V1Vref 逐次比较式寄存器比较 数字量输出 置数选择逻辑 启动控制信号时钟信号图2-2 逐次比较式A/D转换器结构ADC0832是用CMOS集成工艺制成的逐次比较型模数转换芯片。分辨率8位,转换时间100s,输入电压范围为05V,增加某些外部电路后,输入模拟电压可为 5V。该芯片内有输出数据锁存器,当与计算机连接时,转换电路的输出可以直接连接在CPU数据总线上,无须附加逻辑接口电路。ADC0832芯片外引脚图如图2-3下所示: 图2-3ADC0832引脚图
16、其特点如下: · 8位分辨率; · 双通道A/D转换; · 输入输出电平与TTL/CMOS相兼容; · 5V电源供电时输入电压在05V之间; · 工作频率为250KHZ,转换时间为32S; · 一般功耗仅为15mW; · 工作电压:5V · 输出为三态结构2.1.2 ADC0832的工作方式(1)转换时序 ADC0832控制信号的时序图如图2-4所示,由图可见各控制信号时序关系为:当CS与WR同时为低电平A/D转换器被启动,且在WR上升延后100 模数完成转换,转换结果存入数据锁存器,同时,
17、INTR自动变为低电平,表示本次转换已结束。如CS、RD同时来低电平,则数据锁存器三态门打开,数字信号由DB0-DB7送出,而在RD高电平到来后三态门处于高阻状态,为交互式控制方式。(2)零点和满刻度调节ADC0832的零点无须调整。满刻度调整时,先给输入端加入电压 ,使满刻度所对应的电压值是输入电压的最大值。当输入电压最大值与输出电压最小值相当时,调整端电压值的输出码为FEH或FFH。(3)参考电压的调节在使用A/D转换器时,为保证其转换精度,要求输入电压满量程使用。如输入电压动态范围较小,则可调节参考电压 ,以保证小信号输入时ADC0832芯片8位的转换精度。(4)接地 模数、数模转换电路
18、中要特别注意到地线的正确连接,否则干扰很严重,以至影响转换结果的准确性。A/D、D/A及取样保持芯片上都提供了独立的模拟地(AGND)和数字地(DGND)的引脚。在线路设计中,必须将所有的器件的模拟地和数字地分别连接,然后将模拟地与数字地仅在一点上相连。图2-4ADC0832控制信号时序图2.2 数据处理数字电压表的核心为AT89C51单片机和ADC0832A/D转换集成芯片。ADC0832是CMOS的连续比较式A/D转换器,采用差动式模拟电压输入,三态门数字输出。CS端接地,由单片机选择控制模拟信号输入,给WR选择信号一个负脉冲,开始A/D模数转换,当A/D转换结束后,INTR端输出低电平,
19、单片机开始读取A/D转换后的数据。单片机进行数据处理,由AT89C51的P2口读出,将单片机的P2口与数码管的ag及h相连,高电平的位对应的发光二极管亮,这样,由P2口输出不同的代码,就可以控制数码管显示不同的电压值。可通过调节输入端的电位器,实现更大范围的电压测量,但精度会相应降低,误差也会相应增加。2.2.1 AT89C51 图2-5 AT89C51引脚图AT89C51(图2-5)是一个低功耗,高性能CMOS8位单片机,片内含4kBytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技
20、术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89C51可为许多嵌入式控制应用系统提供高性价比的解决方案。 AT89C51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。 此外,AT89C51设计和配置了振荡频率可为0Hz,并可通过软件设置省电模式。空闲模式下,CPU暂停
21、工作,而RAM定时计数器,串行口,外中断系统可继续工作,省电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。 (1)主要特性: 与MCS-51完全兼容 4K字节可编程FLASH存储器(寿命:1000写/擦循环) 全静态工作:0Hz-33MHz 三级程序存储器保密锁定 128*8位内部RAM 32条可编程I/O线 两个16位定时器/计数器 6个中断源 可编程串行通道 低功耗的闲置和掉电模式 片内振荡器和时钟电路 (2)管脚说明: VCC:供电电压。 GND:接地。 P0口:P0口为一个8
22、位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收
23、,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3
24、口将输出电流(ILL)这是由于上拉的缘故。 P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入) P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通) P3口同时为闪烁编程和编程校验接收一些控制信号。 I/O口作为输入口时有两种工作方式,即所谓的读端口与读引脚。读端口时实际上并不从外部读入数据,而是把端口锁存器的内容读入到内部总线,经过某种运算或变换后再写回到端口锁存器。只有读端口时才真正地把外部的数据读入到内部
25、总线。上面图中的两个三角形表示的就是输入缓冲器CPU将根据不同的指令分别发出读端口或读引脚信号以完成不同的操作。这是由硬件自动完成的,不需要我们操心,然后再实行读引脚操作,否则就可能读入出错,为什么看上面的图,如果不对端口置1端口锁存器原来的状态有可能为0Q端为0Q为1加到场效应管栅极的信号为1,该场效应管就导通对地呈现低阻抗,此时即使引脚上输入的信号为1,也会因端口的低阻抗而使信号变低使得外加的1信号读入后不一定是1。若先执行置1操作,则可以使场效应管截止引脚信号直接加到三态缓冲器中实现正确的读入,由于在输入操作时还必须附加一个准备动作,所以这类I/O口被称为准双向口。89C51的P0/P1
26、/P2/P3口作为输入时都是准双向口。接下来让我们再看另一个问题,从图中可以看出这四个端口还有一个差别,除了P1口外P0P2P3口都还有其他的功能。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,
27、ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:反向振荡放大器的输入及
28、内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。 振荡器特性: XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。 整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE管脚处于低电平10ms 来完成。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被重复编程以前,该操作必须被执行。 此外,AT89C51设有稳态逻辑,
29、可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM,定时器,计数器,串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用其他芯片功能,直到下一个硬件复位为止。2.2.2 AT89C51单片机最小系统连接单片机最小系统的必备条件是:电源、EA引脚、晶体振荡电路,复位电路。(1)晶体振荡电路对于微处理器,其片内振荡器和时钟信号的产生是必不可少的,因为在执行指令时,必须按照一定的时钟节拍进行,此设计采用内部时钟方式,片内的高增益反相放大器通过XTAL1XTAL2外接作为反馈元件的片外晶体振荡器与电容组成的一个自激振荡器,向内
30、部时钟电路提供振荡时钟。(2)复位电路复位分为上电复位和外部复位两种方式,因为上电复位每次复位都必须断开电源,所以次设计采用外部复位方式通过按一下开关就可实现可靠复位.复位电路如图图2-6: 图2-6复位电路2.3 数据接收与数据处理电路如图2-7,ADC0832 数据输出线与AT89C51 的数据总线直接相连,AT89C51 的RD 、WR 和INT1直接连到ADC0832,由于用P3.4 线来产生片选信号,故无需外加地址译码器。当AT89C51 向ADC0832 发WR以启动0804;转换完成,0832送出一个低电平得INTR信号,请51单片机来提取数据;当51单片机要来提取之前,送一个低
31、电平的RD信号通知0832;51单片机读取总线得数据。RD (读取结果)信号时,只要虚拟一个系统不占用的数据存储器地址即可。图2-7接口电路图2.4 显示设计2.4.1 LED显示的原理 本设计中采用的是两个七段LED数码管来显示电压值。LED具有耗电低、亮度高、视角大、线路简单、耐震及寿命长等优点, 数码管是由8个发光二极管构成的显示器件,其外形如图2-8所示。ag和h为8个发光二极管。在数码管中,若将二极管的阳极连在一起,称为共阳极数码管;若将二极管的阴极接在一起,就称为共阴极数码管,如(图2-9)所示。当发光二极管导通时,它就会发光。每个二极管就是一个笔画,若干个二极管发光时,就构成了一
32、个显示字符。图2-8结构图2-9 共阳接法和共阴接法将单片机的I/O口与数码管的ag及h相连,高电平的位对应的发光二极管亮,这样,由I/O口输出不同的代码,就可以控制数码管显示不同的字符。例如:当I/O口输出的代码为0011 1111时,数码管显示的字符为0。这样形成的显示字符的代码称为显示代码或段选码。2.4.2 LED显示驱动在微型计算机控制系统中,常用的显示方法有动态显示和静态显示两种。在动态显示的方式下,各数码管的8个引脚(a-h)并联在一起。与单片机的一个I/O相连,每个数码管的共阴端(位选信号端)与单片机的另一I/O相连,控制数码管轮流被选中,轮流显示。LED的驱动问题是一个非常重
33、要的问题,因为一般I/O接口芯片的驱动能力是有限的,在LED显示器接口电路中,输出口所能提供驱动电流是够的,尤其在设计中需要用到多位LED,此时就需要增加驱动电路,驱动电路有多种,常用的是TTL或MOS集成电路驱动器,动态显示的一位数据的显示是由段和位选信号共同配合完成,因此必须考虑段和位的驱动能力,而且段的驱动能力决定位的驱动能力。本设计中对于LED的驱动,本设计中使用了单片机的P2口和数码管相连。P2口与数码管的ag及dp相连,高电平的位对应的发光二极管亮,ag高电平为显示字符,dp高电平时代表有小数点,这样,由P2口输出不同的代码。第3章 程序设计第3章 程序设计3.1 主程序设计图框整
34、个主程序就是在A/D转换,数据处理及显示程序循环执行。整个程序流程框图如图3-1所示。启动ADC0832对模拟量输入信号进行转换,通过查询INTR(P3.3引脚)来确定转换是否完成,若完成则把数据通过P1端口读入,经过数据处理后在数码管上显示。图3-1程序流程图框3.2 程序清单/基于ADC0832的数字电压表#include<reg51.h> /包含单片机寄存器的头文件#include<intrins.h> /包含_nop_()函数定义的头文件sbit CS=P34; /将CS位定义为P3.4引脚sbit CLK=P10; /将CLK位定义为P1.0引脚sbit DI
35、O=P11; /将DIO位定义为P1.1引脚/unsigned char code digit10="0123456789" /定义字符数组显示数字unsigned char code Str="Volt=" /说明显示的是电压/*以下是对液晶模块的操作程序*sbit RS=P20; /寄存器选择位,将RS位定义为P2.0引脚sbit RW=P21; /读写选择位,将RW位定义为P2.1引脚sbit E=P22; /使能信号位,将E位定义为P2.2引脚sbit BF=P07; /忙碌标志位,将BF位定义为P0.7引脚/*函数功能:延时1ms(3j+2)*
36、i=(3×33+2)×10=1010(微秒),可以认为是1毫秒*/void delay1ms() unsigned char i,j; for(i=0;i<10;i+) for(j=0;j<33;j+) ; /*函数功能:延时若干毫秒入口参数:n*/ void delaynms(unsigned char n) unsigned char i;for(i=0;i<n;i+) delay1ms(); /*函数功能:判断液晶模块的忙碌状态返回值:result。result=1,忙碌;result=0,不忙*/bit BusyTest(void) bit res
37、ult;RS=0; /根据规定,RS为低电平,RW为高电平时,可以读状态 RW=1; E=1; /E=1,才允许读写 _nop_(); /空操作 _nop_(); _nop_(); _nop_(); /空操作四个机器周期,给硬件反应时间 result=BF; /将忙碌标志电平赋给result E=0; /将E恢复低电平 return result; /*函数功能:将模式设置指令或显示地址写入液晶模块入口参数:dictate*/void WriteInstruction (unsigned char dictate) while(BusyTest()=1); /如果忙就等待 RS=0; /根据规
38、定,RS和R/W同时为低电平时,可以写入指令 RW=0; E=0; /E置低电平(根据表8-6,写指令时,E为高脉冲, / 就是让E从0到1发生正跳变,所以应先置"0" _nop_(); _nop_(); /空操作两个机器周期,给硬件反应时间 P0=dictate; /将数据送入P0口,即写入指令或地址 _nop_(); _nop_(); _nop_(); _nop_(); /空操作四个机器周期,给硬件反应时间 E=1; /E置高电平 _nop_(); _nop_(); _nop_(); _nop_(); /空操作四个机器周期,给硬件反应时间 E=0; /当E由高电平跳变成
39、低电平时,液晶模块开始执行命令 /*函数功能:指定字符显示的实际地址入口参数:x*/ void WriteAddress(unsigned char x) WriteInstruction(x|0x80); /显示位置的确定方法规定为"80H+地址码x" /*函数功能:将数据(字符的标准ASCII码)写入液晶模块入口参数:y(为字符常量)*/ void WriteData(unsigned char y) while(BusyTest()=1); RS=1; /RS为高电平,RW为低电平时,可以写入数据 RW=0; E=0; /E置低电平(根据表8-6,写指令时,E为高脉冲
40、, /就是让E从0到1发生正跳变,所以应先置"0" P0=y; /将数据送入P0口,即将数据写入液晶模块 _nop_(); _nop_(); _nop_(); _nop_(); /空操作四个机器周期,给硬件反应时间 E=1; /E置高电平 _nop_(); _nop_(); _nop_(); _nop_(); /空操作四个机器周期,给硬件反应时间 E=0; /当E由高电平跳变成低电平时,液晶模块开始执行命令 /*函数功能:对LCD的显示模式进行初始化设置*/void LcdInitiate(void) delaynms(15); /延时15ms,首次写指令时应给LCD一段较
41、长的反应时间 WriteInstruction(0x38); /显示模式设置:16×2显示,5×7点阵,8位数据接口delaynms(5); /延时5ms,给硬件一点反应时间 WriteInstruction(0x38);delaynms(5); /延时5ms,给硬件一点反应时间WriteInstruction(0x38); /连续三次,确保初始化成功delaynms(5); /延时5ms,给硬件一点反应时间WriteInstruction(0x0c); /显示模式设置:显示开,无光标,光标不闪烁delaynms(5); /延时5ms,给硬件一点反应时间WriteInstr
42、uction(0x06); /显示模式设置:光标右移,字符不移delaynms(5); /延时5ms,给硬件一点反应时间WriteInstruction(0x01); /清屏幕指令,将以前的显示内容清除delaynms(5); /延时5ms,给硬件一点反应时间 /*/以下是电压显示的说明*/*函数功能:显示电压符号*/ void display_volt(void) unsigned char i; WriteAddress(0x03); /写显示地址,将在第2行第1列开始显示 i = 0; /从第一个字符开始显示 while(Stri != '0') /只要没有写到结束标志,
43、就继续写 WriteData(Stri); /将字符常量写入LCD i+; /指向下一个字符/*/函数功能:显示电压的小数点*/ void display_dot(void) WriteAddress(0x09); /写显示地址,将在第1行第10列开始显示 WriteData('.'); /将小数点的字符常量写入LCD/*/函数功能:显示电压的单位(V)*/ void display_V(void) WriteAddress(0x0c); /写显示地址,将在第2行第13列开始显示 WriteData('V'); /将字符常量写入LCD/*函数功能:显示电压的整数
44、部分入口参数:x*/ void display1(unsigned char x)WriteAddress(0x08); /写显示地址,将在第2行第7列开始显示WriteData(digitx); /将百位数字的字符常量写入LCD /*函数功能:显示电压的小数数部分入口参数:x*/ void display2(unsigned char x) unsigned char i,j;i=x/10; /取十位(小数点后第一位)j=x%10; /取个位(小数点后第二位) WriteAddress(0x0a); /写显示地址,将在第1行第11列开始显示WriteData(digiti); /将小数部分的
45、第一位数字字符常量写入LCDWriteData(digitj); /将小数部分的第一位数字字符常量写入LCD/*/函数功能:将模拟信号转换成数字信号*/unsigned char A_D() unsigned char i,dat; CS=1; /一个转换周期开始 CLK=0; /为第一个脉冲作准备 CS=0; /CS置0,片选有效 DIO=1; /DIO置1,规定的起始信号 CLK=1; /第一个脉冲 CLK=0; /第一个脉冲的下降沿,此前DIO必须是高电平 DIO=1; /DIO置1, 通道选择信号 CLK=1; /第二个脉冲,第2、3个脉冲下沉之前,DI必须跟别输入两位数据用于选择通道
46、,这里选通道CH0 CLK=0; /第二个脉冲下降沿 DIO=0; /DI置0,选择通道0 CLK=1; /第三个脉冲 CLK=0; /第三个脉冲下降沿 DIO=1; /第三个脉冲下沉之后,输入端DIO失去作用,应置1 CLK=1; /第四个脉冲 for(i=0;i<8;i+) /高位在前 CLK=1; /第四个脉冲 CLK=0; dat<<=1; /将下面储存的低位数据向右移dat|=(unsigned char)DIO; /将输出数据DIO通过或运算储存在dat最低位 CS=1; /片选无效 return dat; /将读书的数据返回 /*函数功能:主函数*/main(void) unsigned int AD_val; /储存A/D转换后的值 unsigned char Int,Dec; /分别储存转换后的整数部分与小数部分 LcdInitiate(); /将液晶初始化 delaynms(5); /延时5ms给硬件一点反应时间display_volt(); /显示温度说明 display_dot(); /显示温度的小数点 display_V(); /显示温度的单位 while(1) AD_val= A_D(); /
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 银行行政考试题库及答案
- 银行消防试题及答案
- 河南旅游专业试题及答案
- 医学转专业试题及答案
- 销售专业试题及答案英语
- 印刷专业试题及答案
- 湖北省孝感市2025-2026学年高二上学期9月起点考试地理(B)试卷(含答案)
- 翼载荷和推重比的确定课件
- 河北省廊坊市2024-2025学年八年级上学期11月月考物理试卷(含答案)
- 坡道太高用什么施工方案
- 生产车间出勤管理制度
- 亲子观影活动方案
- 水利工程设计概估算编制规定工程部分
- 《销售经理技能提升》课件
- 培育战斗精神 砥砺血性胆气 -2024教育实践活动
- 小学生科普讲堂课件-彩虹的秘密
- 心理健康和生命教育
- 医院感染在眼科医疗中的预防与控制
- 园区废气与噪音综合治理管理制度
- 催收专业知识培训课件
- 增强现实技术文旅项目中应用
评论
0/150
提交评论