资源描述
目 录
摘 要 I
前言 II
1主要元器件的介绍和本系统的选择 1
1.1常用单片机的特点比较及本设计单片机的选择 1
1.5 LCD1602使用说明 4
1.6 常用的A/D芯片简介 7
1.7 ADC0809引脚结构功能说明 7
2 总体设计及硬件电路模块功能简介 8
2.1 技术要求: 8
2.2 设计方案: 8
2.3 系统硬件电路的设计 9
2.4 单片机系统 9
2.5 数模转换系统 9
2.6 时钟电路 9
2.7 复位电路 9
2..8 显示电路设计 10
3电压表系统电路的制做 10
3.1 绘制电路板 10
3.2 铜板的转印、腐蚀、钻孔、焊接 10
3.3 焊接好后的电压表系统 11
3.4 动手制作心得 12
4 系统的调试 13
4.1 硬件调试 13
4.2 软件件调试 13
4.3 软硬联调 13
5 数据结果分析 14
5.1 系统调试和校准 14
5.2 测试数据 14
总 结 15
致 谢 16
参考文献 17
附件一(系统电路原理图) 18
附件二(电压表系统程序) 19
24
基于ADC0809液晶显示的数字电压表设计
谭小品
摘 要
单片机是一种集成电路芯片,采用超大规模技术把具有数据处理能力(的微处理器(CPU)。随着单片机技术的飞速发展,各种单片机蜂拥而至,单片机技术已成为一个国家现代化科技水平的重要标志。
单片机可单独地完成现代工业控制所要求的智能化控制功能,这是单片机最大的特征。单片机控制系统能够取代以前利用复杂电子线路或数字电路构成的控制系统,可以软件控制来实现,并能够实现智能化。现在单片机控制范畴无所不在,例如通信产品、家用电器、智能仪器仪表、过程控制和专用控制装置等等,单片机的应用领域越来越广泛。
本毕业设计的课题是“数字电压表的设计”。主要考核我们对单片机技术,编程能力等方面的情况。观察独立分析、设计单片机的能力,以及实际编程技能。
本课题主要解决A/D转换、数据处理及显示控制等三个模块。控制系统采用AT单片机,A/D转换采用ADC0809。
关键词:AT89S52 ADC0809 lcd1602 数字电压表
前言
数字电压表出现在50年代初,60年代末发起来的电压测量仪表,简称DVM,它采用的是数字化测量技术,把连续的模拟量,也就是连续的电压值转变为不连续的数字量,加以数字处理然后再通过显示器件显示。这种电子测量的仪表之所以出现,一方面是由于电子计算机的应用逐渐推广到系统的自动控制信实验研究的领域,提出了将各种被观察量或被控制量转换成数码的要求,即为了实时控制及数据处理的需要;另一方面,也是电子计算机的发展,带动了脉冲数字电路技术的进步,为数字化仪表的出现提供了条件。所以,数字化测理仪表的产生与发展与电子计算机的发展是密切相关的;同时,为革新电子测量中的烦锁和陈旧方式也催促了它的飞速发展,如今,它又成为向智能化仪表发展的必要桥梁。
如今,数字电压表已绝大部分已取代了传统的模拟指针式电压表。因为传统的模拟指针式电压表功能单一,精度低,读数的时候也非常不方便,很容易出错。而采用单片机的数字电压表由于测量精度高,速度快,读数时也非常的方便,抗干扰能力强,可扩展性强等优点已被广泛的应用于电子及电工的测量,工业自动化仪表,自动测试系统等智能化测量领域。显示出强大的生命力。
数字电压表最初是伺服步进电子管比较式,其优点是准确度比较高,但是采样速度慢,重量达几十公斤,体积大。继之出现了斜波式电压表,它的速度方面稍有提高,但是准确度低,稳定性差,再后来出现了比较式仪表改进逐次渐近式结构,它不仅保持了比较式准确度高的优点,而且速度也有了很大的提高,但它有一缺点是抗干扰能力差,很容易受到外界各种因素的影响。随后,在斜波式的基础上双引伸出阶梯波式,它的唯一的进步是成本降低了,可是准确宽,速以及抗干扰能力都未能提高。而现在,数字电压表的发展已经是非常的成熟,就原理来讲,它从原来的一,二种已发展到多种,在功能上讲,则从测单一参数发展到能测多种参数;从制作元件来看,发展到了集成电路,准确度已经有了很大的提高,精度高达1NV;读数每秒几万次,而相对以前,它的价格也有了降低了很多。
目前实现电压数字化测量的方法仍然模-数(A/D)转换的方法。而数字电压表种类繁多,型号新异,目前国际仍未有统一的分类方法。
在电量的测量中,电压、电流和频率是最基本的三个被测量。其中,电压量的测量最为经常。而且随着电子技术的发展,更是经常需要测量高精度的电压,所以数字电压表就成为一种必不可少的测量仪器。另外,由于数字式仪器具有读数准确方便、精度高、误差小、灵敏度高和分辨率高、测量速度快等特点而倍受用户青睐,数字式电压表就是基于这种需求而发展起来的.
1主要元器件的介绍和本系统的选择
1.1常用单片机的特点比较及本设计单片机的选择
单片机是指一个集成在一块芯片上的完整计算机系统,具有一个完整计算机所需要的大部分部件:CPU,内存,总线系统等。而目前常用的单片机的8位有51系列单片机,AVR单片机,PIC单片机。
应用最广的8位单片机还是intel的51系列单片机。51系列单片机的特点是:硬件结构合理,指令系统规范,加之生产历史悠久,世界有许多芯片公司都买了51的芯片核心专利技术,并在其基础上扩充其性能,使得芯片的运行速度变得更快,性价比更高。
AVR单片机是atmel公司推出较新的单片机,它的显著特点是:高性能,低功能,高速度,指令单周期为主,但性格方面比51单片机要高。有专门的I/O方向寄存器。虽然有转强的驱动电压,但I/O口使用不比51单片机方便。
PIC单片机系列是美国微芯公司的产品,也是市面上增长最快的单片机之一,属精简指令集单片机,其特点是:高速度,高性能,但在性格方面比51单片机要高,也有专门的I/O方向寄存器,I/O口使用不比51单片机方便。
综合以上各种单片机的基本性能及本设计的满足需要,我们将选择51系列单片机。
1.2 AT89S52单片机性能简介
单片机采用MCS-51系列单片机。由ATMEL公司生产的AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。在单芯片上,拥有灵巧的8 位CPU 和在线系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、有效的解决方案。AT89S52具有以下标准功能: 8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。而且,它还具有一个看门狗(WDT)定时/计数器,如果程序没有正常工作,就会强制整个系统复位,还可以在程序陷入死循环的时候,让单片机复位而不用整个系统断电,从而保护你的硬件电路。
AT89S52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,片上Flash允许程序存储器在系统可编程,亦适于常规编程器。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。其芯片外观及引脚图如下:
1.3 单片机管脚说明
VCC:供电电压。
GND:接地。
P0口:P0口为一个8位漏级开路双向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口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89S52的一些特殊功能口,如下表所示:
表2.1 AT89S52 引脚功能表
管脚
备选功能
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口同时为闪烁编程和编程校验接收一些控制信号。
RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:来自反向振荡器的输出。
1.4 常用显示器件简介
本次设计中有显示模块,而常用的显示器件比较多,有数码管,LED点阵,1602液晶,12864液晶等。
1602液晶是工业字符型液晶,能够同时显示16*2即32个字符。1602液晶模块内部的字符发生存储器已经存储了160个不同的点阵字符图形,这些字这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码。使用时直接编写软件程序按一定的时序驱动即可。它的特点是显示字迹清楚,价格相对便宜。
1.5 LCD1602使用说明
图2.4.1.1 1601引脚图
1602液晶模块引脚说明
引脚
符号
功能说明
1
GND
接地
2
Vcc
+5V
3
VL
驱动LCD,一般将此脚接地
4
RS
寄存器选择 0:指令寄存器(WRITE)Busy flag,位址计数器(READ) 1:数据寄存器(WRITE,READ)
5
R/W
READ/WRITE选择 1:READ 0:WTITE
6
E
读写使能(下降沿使能)
7
DB0
低4位三态、双向数据总线
8
DB1
9
DB2
10
DB3
11
DB4
高4位三态、双向数据总线
另外DB7也是一个Busy flag
12
DB5
13
DB6
14
DB7
表2.4.1.1 LCD1601液晶模块的引脚
寄存器选择,如表所示:
表2.4.1.2 寄存器选择控制线操作
RS
R/W
操作说明
0
0
写入指令寄存器(清除屏幕…等)
0
1
读Busy flag(DB7),以及读取位址计数器(DB0~DB6)值
1
0
写入数据寄存器(显示各字型等)
1
1
从数据寄存器读取数据
Busy flag(DB7):在此位未被清除为“0”时,LCD将无法再处理其他指令要求。
(1)显示地址:内部地址计数器的计数地址:SB7=0(DB0~DB6)第一行00、01、02… …等,第二行40、41、42… …等,可配合检测DB7=1 (RS=0,R/W=1)读取目前显示字的地址,判断是否需要换行。
表2.4.1.3 LCD1601 16×1 显示字的地址
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
00
01
02
03
04
05
06
07
40
41
42
43
44
45
46
47
(2)外部地址:DB7=1,亦即80H+内部计数地址,可以用此方式将字显示在某一位置。
LCD各地址列举如下表:
表2.4.1.4 LCD1601 16×1 显示字的外部地址
16×1 16字1行 1601
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
80
81
82
83
84
85
86
87
C0
C1
C2
C3
C4
C5
C6
C7
表2.4.1.5 LCD1601 的指令组
指 令
说 明
设置码
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
清除显示幕
0
0
0
0
0
0
0
0
0
*
光标回到原点
0
0
0
0
0
0
0
0
1
*
进入模式设定
0
0
0
0
0
0
0
1
I/D
S
显示幕ON/OFF
0
0
0
0
0
0
1
D
C
B
移位
0
0
0
0
0
1
S/C
R/L
*
*
功能设定
0
0
0
0
1
DL
N
F
*
*
字发生器地址设定
0
0
0
1
AGC
设置显示地址
0
0
0
1
ADD
忙碌标志位BF
0
0
1
BF
显示数据
1
0
写入数据
读取数据
1
1
读取数据
I/D I/D=1 表示加1, I/D=0 表示减1
S S=1 表示显示幕ON S=0表示OFF
D D=1 表示显示屏幕ON D=0表示显示屏幕OFF
C C=1 表示光标ON C=0表示光标OFF
B B=1 表示闪烁ON B=0表示显示闪烁OFF
S/C S/C=1表示显示屏幕移位 S/C=0光标移位
R/L R/L=1表示右移 R/L=0表示左移
DL DL=1表示8位 DL=0表示4位
F F=1表示5×10点矩阵 F=0表示5×7点矩阵
N N=1表示2行显示行 N=0表示1行显示行
BF BF=1:内部正在动作 BF=0:可接收指令或数据码
1.6 常用的A/D芯片简介
常用的A/D芯片有AD0809,AD0832,TLC2543C等几种。下面简单介绍一下这三种芯片。
AD0809是8位逐次逼近型A/D转换器,它是由一个8路的模拟开关、一个地址锁存译码器、一个A/D 转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道,允许8 路模拟量分时输入,共用A/D 转换器进行转换。些A/D转换器是的特点是8位精度,属于并行口,如果输入的模拟量变化大快,必须在输入之前增加采样电路。
1.7 ADC0809引脚结构功能说明
1~5、26~28,IN0~IN7:8路模拟量输入端。
14~15、8、17~21,D0~D7:8位数字量输出端。
23~25,ADDA、ADDB、ADDC:3位地址输入线,用于选通8路模拟输入中的一路
22,ALE:地址锁存允许信号,输入,高电平有效,对应ALE上跳沿,A、B、C地址状态送入地址锁存器中。
6,START:A/D转换启动信号,输入高电平有效,START上升沿时,复位ADC0809;START下降沿时启动芯片,开始进行A/D转换;在A/D转换期间,START应保持 低电平。本信号有时简写为ST.
7,EOC:A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。
9,OE:数据输出允许信号,输入,高电平有效。当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量,用于控制三态输出锁存器向单片机输出转换得到的数据。OE=0,输出数据线呈高阻;OE=1,输出转换得到的数据。
10,CLK:时钟脉冲输入端。要求时钟频率不高于640KHZ,EOC=0,正在进行转换;EOC=1,转换结束。使用中该状态信号即可作为查询的状态标志,又可作为中断请求信号使用。
12、16,REF(+)、REF(-):基准电压。
11,Vcc:电源,单一+5V。
13,GND:地。
2 总体设计及硬件电路模块功能简介
2.1 技术要求:
基本功能:电压测量范围0~5V;能用数码管显示电压值;采集电压的大小(保留小数点后3位);整个电压采集显示过程通过两个按键控制启动和停止;系统具有复位功能。
2.2 设计方案:
根据上述,我们选择单片机与A/D转换芯片结合的方法实现本设计。使用的基本元器件是:AT89C52单片机,AD0809模数转换芯片,lcd显示器,滑动变阻器,按键,电容,电阻,晶振,标准电源等等。
A/D转换模块
1602显示模块
单片机系统模块
输入电路模块
按键模块
设计的基本框图
2.3 系统硬件电路的设计
数字电压测量电路由A/D转换、数据处理及显示控制等组成。A/D转换由集成电路0809完成。0809具有8路拟输入端口,地址线(23~- 25脚)可决定对哪一路模拟输入作A/D换。22脚为地址锁存控制,当输入为高电平时,对地址信号进行锁存。6脚为测试控制,当输入一个2uS宽高电平脉冲时,就开始A/D转换。7脚为A/D转换结束标志,当A/D转换结束时,7脚输出高电平。9脚为A/D转换数据输出允许控制,当OE脚为高电平时,A/D转换数据从该端口输出。10脚为0809的时钟输入端,利用单片机30脚的六分频晶振频率再通过14024二分频得到1MHz时钟。单片机的P1.5~P1.7、P3端口作1602液晶显示控制。P2端口作A/D转换数据读入用,P0端口用作0809的A/D转换控制。(具体电路参照附件1)
2.4 单片机系统
单片机最小系统包括晶振电路,复位电路,电源。此模块中,单片机的晶振是12MHZ,C1和C2的电容是22UF,C3可选10UF。R1电阻为1K。
2.5 数模转换系统
此设计中选择的是A/D转换芯片的通道0,A/D芯片的数据输入口连接单片机的P0.5口,数据输出口连接单片机的P0.6口,芯片使能端连接单片机的P0.3口,脉冲端连接单片机的P0.7口。模块连接如下图所示。
2.6 时钟电路
就单片机内部每个部件要想协调一致地工作,必须在统一口令——时钟信号的控制下工作。单片机工作所需要的时钟信号有两种产生方式,即内部时钟方式和外部时钟方式。图6.3是内部时钟方式:单片机内部有一个构成振荡器的增益反相放大器,引脚XTAL1和XTAL2分别是此放大器的输入端和输入端,这个放大器与作为反馈元件的片外晶振一起构成自激振荡器。在该图中,电容C1和C2取30pf,晶体的振荡频率取12Mhz,晶体振荡频率高,则系统的时钟频率也高,单片机运行速度也就快。实际连接如图6.3所示
2.7 复位电路
用AT89S51的复位电路如图6.4所示。当单片机一上电,立即复位。电容C和电阻R1实现上电自动复位。复位也是使单片机退出低功耗工作方式而进入正常状态的一种操作。
2..8 显示电路设计
用89S52的P3口作为数据线,用P1.7、P1.6、P1.5分别作为LCD的E、R/W、RS。其中E是下降沿触发的片选信号,R/W是读写信号,RS是寄存器选择信号本模块设计要点如下:显示模块初始化:首先清屏,再设置接口数据位为8位,显示行数为1行,字型为5×7点阵,然后设置为整体显示,取消光标和字体闪烁,最后设置为正向增量方式且不移位。向LCD的显示缓冲区中送字符,程序中采用2个字符数组,一个显示字符,另一个显示电压数据,要显示的字符或数据被送到相应的数组中,完成后再统一显示.首先取一个要显示的字符或数据送到LCD的显示缓冲区,程序延时2.5ms,判断是否够显示的个数,不够则地址加一取下一个要显示的字符或数据。
3电压表系统电路的制做
3.1 绘制电路板
我使用AD10软件绘制原理图,,然后生成PCB图。特附以下图片
3.2 铜板的转印、腐蚀、钻孔、焊接
铜板的转印、腐蚀有司新生老师的指导下,在PCB实验室完成制作。钻孔过程有司新生老师提供的小台钻在宿舍完成。元器件的安装焊接在宿舍内完成。
3.3 焊接好后的电压表系统
3.4 动手制作心得
在此我说一下我的制作心得,该系统我修改重新印制总共4次,前三次都是考虑欠佳,第一只把思维停留在理想情况下,对于原件的封装大小,空间等因素掌握的不好,造成元件没法安装;
第二对于线路的布设:需要考虑到走线的美观、均匀,不能交叉,尽可能的减少交叉所产生的跳线,焊盘要尽可能的大,以方便后面的焊接,如有可能建议对电路板覆铜,以提高电路板在以后使用过程中的稳定性。
第三腐蚀好后的电路板要进行出碳、涂抹松香以防电路的氧化。电路板钻孔时候一定要稳住看清再下钻,千万不能看到钻头对着焊空最后却打到线上就麻烦了。要尽可能的用和管脚大小接近的钻头。
第四焊接时,首先要确认元件安装到正确位置,焊接时要先加热焊盘,再上锡,不能上锡过多,容易引起短路,尤其是覆铜板,要特别注意。
4 系统的调试
完成了系统的硬件设计,制作和软件编程之后,要使系统能够按设计意图正常运行,必须进行系硬件和软件全面调试。
4.1 硬件调试
硬件调试的主要任务是排除硬件故障,其中包括设计的错误和工艺性故障等。
1.检查所设计的硬件电路板所有的器件和引脚是否正确,尤其是电源的连接是否正确;检查各总线是否有短路的故障。检查开关/按键是否正常,是否连接正确,为了保护芯片,应先对各IC座电位进行检查,确认无误后再插入芯片。
2.将40芯片的仿真插头插入单片机插座进行调试,检查各接口是否满足设计的要求,有正常的程序测试硬件电路的好坏。
4.2 软件件调试
软件调试的任务是利用开发工具进行在线仿真调试,发现和纠正程序的错误,同时也能发现硬件的故障。软件调试是一个模块一个模块进行的。首先单独调试各子程序是否能够按照预期的功能,接口电路的控制是否正常。最后调试整个程序。尤其注意的是各模块间能否正确的传递参数。
1)检查 LCD显示模块程序。观察在LCD上是否能够显示相应的字符。
2)检查按键模块程序。
3)检查A/D转换模块程序。可以在硬件电路的输入端输入已知的几个电压,分别观察LCD上是否显示相应的电压值。
4)检查数据的转换模块程序。
4.3 软硬联调
该系统存在软件和硬件的紧密联系。软硬件都调试通过后,整个系统连接仍会存在很多麻烦。首先检查 A/D 部分,然后是单片机,最后是液晶,依次排除障碍。
总调试。当相应的各模块环节都正确后,可程序下载到单片机。接上电源运行。再检查所有功能,观察是否能预期的一样。如果一样,说明设计成功完成
5 数据结果分析
5.1 系统调试和校准
设计完成之后,我们要对数据进行调试。调试过程可以利用对部分给定电压的测量结果分析来完成。首先要校对零点:将A/D转换器的模拟输入端口接地,即让电压为0V,此时可以调整R2的值,直至显示电压为0V时为止。校准零点之后,就可以进行测试了。
5.2 测试数据
调试完后,对电路进行精确、准确进行调试,为了保证精确度,要多测几个点,除了零点和满度值外,再选两个中间值进行比较,测试结果如下表所示:
输入值(V)
测量值(V)
0
00000
1
0.976
2
1.895
3
2.901
4
3.857
5
4.886
以上数据符合要求,测试成功。
总 结
由于本设计使用的是高效的51系列单片机作为核心的测量系统,以及高精度,高速度,高抗干扰的A/D转换器。使得本直流电压表具体精度高,灵敏度强,性能可靠,电路简单,成本低的特点。因为平时所需要测量的被测电压的电压值不是一个定值,多多少少都有一些微小的变化。因此本设计为之增加了可测5秒内平均电压的电压值。大大的提高了测量的准确性。使直流电压表有着较高的智能水平。
此设计是单片机应用系统的开发性实验。通过此设计可知在单片机系统开发过程应注意以下事项。
1)硬件的选择。选择适合设计目地的元器件是一个重要的方设计环节。不能以元器件是否是最高性能作为选择元器件的标准。往往高性能器件的价格也是较高的。应根据项目设计的需要选择元器件,能够满足设计需要作为标准选择元器件。
2)因为单片机系统设计是硬件和软件相结合的设计,所以系统和硬件和软件必须紧密配合,协调一致。应不断调整硬软件设计,以提高系统工作效率。
单片机的应用如今已经是在工业,电子等方面展示出了它的优越性,利用单片机在设计电路逐渐成了趋势,它与外围电路再加上软件程序就可以构建任意的产品,使得本设计成为现实。随着单片机的日益发展,它必将在未来显示出更大的活力,为电子设计更多精彩。对于数字电压表而言,功能将会越来越强大。
致 谢
通过这一阶段的努力,我的毕业论文《数字电压表》终于完成了,这意味着大学生活即将结束。在大学阶段,我在学习上和思想上都受益非浅,这除了自身的努力外,与各位老师、同学和朋友的关心、支持和鼓励是分不开的。
在本论文的写作过程中,我的指导老师司新生老师倾注了大量的心血,从选题到开题报告,从写作提纲,都一遍又一遍地指出每稿中的具体问题,严格把关,循循善诱,在此我表示衷心感谢。同时我还要感谢在我学习期间给我极大关心和支持的各位老师以及关心我的同学和朋友。
写作毕业论文是一次再系统学习的过程,毕业论文的完成,同样也意味着新的学习生活的开始。我将铭记我曾是一名鹤壁职业技术学院机电工程学院的学子,在今后的工作中把“穷究于理 成就于工”的优良传统发扬光大。
签名:
2011年10月19日
参考文献
[1] 陈洪中.数字电压表。水利电力出版社,1989
[2] 周立功.单片机实验与实践.北京:北京航空航天大学出版社
[3] 吴国经.单片机应用技术.北京:中国电力出版社,2003.
[4] 阎石.数字电子技术基础.北京:高等教育出版社,2006
[5] 谭浩强.C程序设计.北京:清华大学出版社,2005年.
[6] 侯振鹏.嵌入式C语言程序设计.北京:人民邮电出版社,2006.
[7] 李光飞 李良儿.单片机C程序设计.北京:北京航空航天大学出版社,2005
[8] 王港元.电工电子实践指导.江西:江西科学技术出版社,2005年
附件一(系统电路原理图)
附件二(电压表系统程序)
/*电压表主程序*/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
void result(uchar);
uchar value=0;
#include"adc0809.h"
#include"lcd1602.h"
uchar str[5] ;
uchar volt[7];
uchar a=0+0x30;
uchar str1[11]="tanxiaopin" ;
sbit CLK=P0^7;
uint n;
void main()
{ //uint i;
ADC0809_init();
lcd_init();
while(1)
{
lcd_zifu(str1,0x01);
value=AD();//原值
str[0]=value/100+0x30;
str[1]=value%100/10+0x30;
str[2]=value%10+0x30;
result(value);
lcd_data(str,0x40);
lcd_data(volt,0x46);
}
while(1);
}
void result(uchar v)//转换成电压值
{
float a;
a=(v/255.0)*500.0;
volt[0]=((int)a)/100+0x30;
volt[1]='.';
volt[2]=((int)a)%100/10+0x30;
volt[3]=((int)a)%10+0x30;
volt[4]=' ';
volt[5]='V';
}
void t1(void) interrupt 3
{
CLK=~CLK;
}
/**ADC0809模数转换模块封装函数(头文件)**/
void ADC0809_init();
uchar AD();
/**ADC0809模数转换模块程序**/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit ST=P0^4;
sbit EOC=P0^5;
sbit OE=P0^6;
//sbit CLK=P0^7;
sbit ADDA=P0^0;
sbit ADDB=P0^1;
sbit ADDC=P0^2;
sbit ALE=P0^3;
uchar v;//保存IN0和经AD转换后的数据
/*非精确演示函数*/
void delay(ms)
{
uint i,j;
for(i=ms;i>0;i--)
for(j=125;j>0;j--);
}
void ADC0809_init()
{
TMOD=0x20;
TH1=(255-250);
TL1=(255-250);
EA=1;//开总中断
ET1=1; //开定时器1中断
TR1=1; //启动定时器1
ST=0;
OE=0;
ALE=0;
}
/*用中断做一个500K HZ的时钟信号*/
/******AD转换函数*******/
uchar AD()
{
uchar temp=0;
ST=0;
//EOC=1;
// ALE=1;
ADDA=0;
ADDB=0;
ADDC=0;
ST=0;
ALE=1;
ST=1;
ALE=0;
ST=0;
delay(2);
while(EOC==0);
OE=1;
temp=P2;
delay(2);
OE=0;
return temp;
}
/**液晶显示模块封装函数(头文件)**/
void lcd_init();
void lcd_zifu(uchar *p,uchar wei);
void lcd_data(uchar *p,uchar wei);
/**液晶显示模块**/
#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit rs=P1^5;
sbit rw=P1^6;
sbit en=P1^7;
void lcd_1602(uchar comm);
void lcd_write(uchar dat);
bit lcd_busy();
extern void delay(uint);
void lcd_1602(uchar comm);
void lcd_write(uchar dat);
bit lcd_busy();
sbit busy=P3^7;
extern void delay(uint);
/*****************************
1602液晶写命令函数
参数:
返回值:无
******************************/
void lcd_1602(uchar comm)
{
while(lcd_busy());//查忙
rs = 0;
rw = 0;
en = 0;
_nop_();
P3 = comm;
_nop_();
en = 1;
_nop_();
_nop_();
en = 0;
}
/*****************************
1602液晶写数据函数
参数:
返回值:无
******************************/
void lcd_write(uchar dat)
{
while(lcd_busy());//查忙
rs = 1;
rw = 0;
en = 0;
_nop_();
P3 = dat;
_nop_();
_nop_();
en = 1;
_nop_();
_nop_();
e
展开阅读全文