数字电压表修改1.docx
- 文档编号:12631996
- 上传时间:2023-06-06
- 格式:DOCX
- 页数:18
- 大小:274.54KB
数字电压表修改1.docx
《数字电压表修改1.docx》由会员分享,可在线阅读,更多相关《数字电压表修改1.docx(18页珍藏版)》请在冰点文库上搜索。
数字电压表修改1
数字电压表设计报告
设计题目:
基于单片机的数字电压表设计
专业:
电气工程及其自动化
班级:
电气105
学生:
胡淦滔苟俊杰胡银银杨境媛文少博
指导教师:
李娜
完成日期:
2012年06月13日
一.项目成员及分工3
二.概述3
三.总体设计3
3.1陈述功能及技术指标3
3.2主要设备及元件类型3
3.2.1ADC0809引脚及功能介绍3
3.2.2AT89S52单片机简介5
3.2.374HC74功能介绍6
3.2.4数码管7
本次设计采用四位共阳数码管。
7
四.系统原理8
4.1单片机8
4.2A/D转换8
4.3数码管9
4.4复位电路10
4.5晶振电路11
4.6电源电路11
4.7锁存器部分12
4.874HC74二分频部分12
4.9protel原理图13
五、程序14
5.1流程图14
5.2源程序14
六.出现问题与解决16
七.元件清单16
八.参考文献17
一.项目成员及分工
胡淦滔:
苟俊杰:
胡银银:
杨境媛:
文少博:
二.概述
本系统主要包括四大模块:
数据采集模块、控制模块、显示模块、A/D转换模块。
绘制电路原理图与工作流程图,并进行调试,最终设计完成了该系统的硬件电路。
在软件编程上,采用了C语言进行编程。
控制系统采用AT89S52单片机,A/D转换器采用ADC0809为主要硬件,实现数字电压表的硬件电路与软件设计。
三.总体设计
3.1陈述功能及技术指标
系统采用A/D转换芯片ADC0809采集0~5V连续可变的模拟电压信号,转换为8位数字信号后,送给AT89S52单片机处理,并在四位数码管上显示出0.00~5.00V。
0~5V的模拟电压信号通过调节滑动的变阻器分压获得。
该系统具有线路简单、成本低廉、可靠性高、使用安全方便等优点。
3.2主要设备及元件类型
3.2.1ADC0809引脚及功能介绍
ADC0809是CMOS单片型逐次逼近式A/D转换器,它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型A/D转换器、逐次逼近寄存器、逻辑控制和定时电路组成。
单个+5V电源供电,模拟输入电压范围0~+5V,转换时间为100μs左右,低功耗,约15mW。
芯片模型如下图所示。
ADC0809芯片模型
(1)、IN0~IN7:
8路模拟量输入端。
(2)、2-1~2-8:
8位数字量输出端。
(3)、ADDA、ADDB、ADDC:
3位地址输入线,用于选通8路模拟输入中的一路
(4)、ALE:
地址锁存允许信号,输入,高电平有效。
(5)、START:
A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动A/D转换)。
(6)、EOC:
A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。
(7)、OE:
数据输出允许信号,输入,高电平有效。
当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。
(8)、CLK:
时钟脉冲输入端。
要求时钟频率不高于640KHZ。
(9)、REF(+)、REF(-):
基准电压。
(10)、Vcc:
电源,单一+5V。
(11)、GND:
地。
3.2.2AT89S52单片机简介
AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52在众多嵌入式控制应用系统中得到广泛应用。
芯片模型如下图所示。
AT89S52芯片模型
(1)、与MCS-51单片机产品兼容;
(2)、8K字节在系统可编程Flash存储器;
(3)、1000次擦写周期;
(4)、全静态操作:
0Hz-33MHz;
(5)、三级加密程序存储器;
(6)、32个可编程I/O口线;
(7)、三个16位定时器/计数器;
(8)、六个中断源;
(9)、全双工UART串行通道;
(10)、低功耗空闲和掉电模式;
(11)、掉电后中断可唤醒;
(12)、看门狗定时器;
(13)、双数据指针;
(14)、掉电标识符。
3.2.374HC74功能介绍
74HC74为单输入端的双D触发器。
一个片子里封装着两个相同的D触发器,每个触发器只有一个D端,它们都带有直接置0端RD和直接置1端SD,为低电平有效。
CP上升沿触发。
74HC74芯片模型
74HC74功能表
(1)、1CP、2CP:
时钟输入端;
(2)、1D、2D:
数据输入端;
(3)、1Q、2Q、1Q、2Q:
输出端;
(4)、CLR1、CLR2:
直接复位端(低电平有效);
(5)、PR1、PR2:
直接置位端(低电平有效)。
3.2.4数码管
本次设计采用四位共阳数码管。
数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按能显示多少个“8”可分为1位、2位、4位等数码管。
按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。
共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管,共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮,当某一字段的阴极为高电平时,相应字段就不亮。
图2引脚定义,每一笔划都是对应一个字母表示,DP是小数点.
图2:
LED数码管引脚
四.系统原理
4.1单片机
本系统采用P0与P2口与数码管连接,P1口与A/D的数据及控制端连接。
/EA/VP端接5V电源,X1,X2接晶振电路,RESET端接复位电路,其余INT1,INT0,T1,T0,/RD,/WR,端置空。
由于P0口的驱动能力较弱,为准I/O口,故每个引脚接上拉电阻10k欧。
4.2A/D转换
ADC0809A/D芯片与AT89S52单片机的接口:
本设计中,ADC0809的IN-0引脚接测量电压电路,IN-1至IN-7置空,REF+接+5V电压,REF-接地,ALE和START接在一起连接到单片机10引脚,ENABLE端接单片机11引脚,CLOCK端接74HC74的Q2,ADD-AADD-BADD-C接地,EOC端接单片机12引脚。
ADC0809的时序分析:
ADC0809启动方式为脉冲启动方式,启动信号START启动后开始转换。
初始化时ST,OE信号全为低电平。
EOC信号在START下降沿10us后才变为无效的低电平。
转换完成后,EOC输出高电平,再由OE变为高电平来输出转换数据。
是否转换完毕根据EOC信号来判断。
当EOC变为高电平,这时给OE高电平,转换的数据就输出给单片机了。
4.3数码管
此设计中选择共阳极数码管,将公共极接到+5V。
某一字段发光二极管阴极为低电平时,相应字段就会点亮,为高电平则不亮。
段选端串510欧电阻接入P0口起限流作用。
4.4复位电路
89C51单片机的复位是由外部的复位电路来实现的。
最简单的上电自动复位电路,是通过外部复位电路的电容充电来实现的。
只要Vcc的上升时间不超过1ms,就可以实现自动上电复位。
当时钟频率选用6MHz时,C取22uF,R取1K。
除上电复位外,有时还需要按键手动复位。
按键手动复位有电平方式和脉冲方式两种。
其中电平复位是通过REST端经电阻和电源Vcc接通而实现的,按键手动电平复位电路如图。
当时钟频率选用1MHz时,C选取10uF,R选择10k欧。
4.5晶振电路
本设计采用12MHz晶振,并联两个30pF电容构成晶振电路。
晶振借助于时钟电路产生振荡信号,从而使单片机工作。
4.6电源电路
本设计选择USB电源接口和滤波电容构成直流稳压电路。
C1104电容用来实现频率补偿,防止稳压器产生高频自激振荡和意志电路引入高频干扰,C4是电解电容,以减小稳压电源输出端由输入电源引入的低频干扰。
4.7锁存器部分
OE端接地,LE接单片机P2.7引脚,信号由1D-4D输入,1Q-4Q输出。
当LE为高电平时,锁存器打开,位选信号输入锁存器,出入完成后LE变为低电平,输入端关闭,使输出端信号保持,从而达到锁存的作用。
4.874HC74二分频部分
两D触发器的直接复位端(CLR1、CLR2)、直接置位端(PR1、PR2)置高电平;1号D触发器时钟接口(CLK1)接ALE;2号D触发器时钟接口(CLK2)接1号触发器输出端Q1,输出端Q2’接2号触发器数据输入端D2,输出端Q2接CLK。
设初始状态Q1=Q2=0,则有D触发器特性可得:
CLK1
D1
Q1’
Q1
CLK2
D2
Q2’
Q2
0
1
1
0
0
1
1
0
1
0
0
1
1
0
0
1
0
0
0
1
1
1
1
0
1
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
1
0
0
1
1
0
0
1
0
0
0
1
1
1
1
0
1
1
1
0
0
1
1
0
0
1
1
0
0
1
1
0
由上表可得:
Q2的频率为CLK1的一半,即输出频率CLK为输入频率ALE的一半。
4.9protel原理图
数字电压表Protel原理图
五、程序
5.1流程图
5.2源程序
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitst=P3^0;//申明p3.0口
sbitoe=P3^1;//申明p3.1口
sbiteoc=P3^2;//申明p3.2口
sbitLE=P2^7;//申明p2.7口
ucharcodetab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//共阳数码管显示段码
uintad_0809,ad_data1,ad_data2,ad_data3;
ucharx[1];
voiddelay(uintx)//延时函数
{uinti,j;
for(i=x;i>0;i--)
for(j=110;j>0;j--);
}
voiddisplay()//数码管显示函数
{
uchari;
ad_data1=(ad_0809*49/25)/100;
ad_data2=((ad_0809*49/25)%100)/10;
ad_data3=(((ad_0809*49/25)%100)%10);
LE=1;//打开锁存器
P2=0x81;//输入位选信号
LE=0;//关闭锁存器
P0=tab[ad_data1];//输入段选信号
for(i=0;i<100;i++);//延迟
P0=0xff;//消影
LE=1;
P2=0x82;
LE=0;
P0=0x7f;
for(i=0;i<100;i++);//delay
P0=0xff;
LE=1;
P2=0x84;
LE=0;
P0=tab[ad_data2];
for(i=0;i<100;i++);//delay
P0=0xff;
LE=1;
P2=0x88;
LE=0;
P0=tab[ad_data3];
for(i=0;i<100;i++);//delay
P0=0xff;
}
voidad0809()//ad转换函数
{
oe=0;//启动0809
st=0;//启动0809
st=1;//启动0809
st=0;
delay
(1);
while(!
eoc);//等待转换结束
{oe=1;//取出读的数据
x[1]=P1;//数字量赋值与数组
}
}
main()//主函数
{
while
(1)
{
ad0809();//调用ad转换函数
ad_0809=x[1];//把数字量赋值给变量ad_0809
display();//调用数码管显示函数
}
}
六.出现问题与解决
在调试过程中无法显示连续的电压值,原因是因为在数码管显示程序中错误的多加了个while循环。
导致程序一直在显示这个子函数运行跳不出这段代码。
删除这个while循环就可以了。
七.元件清单
序号
名称
规格
型号
单位
数量
1
52单片机
DIP40
AT89S52
个
2
2
模数转换器
直插
ADC0809
个
2
3
排阻
10K*8
SIP9
个
4
4
数码管
四位一体
个
2
5
复位按键
直插
个
2
6
分频器
直插
7474
个
2
7
USB接口
A口
个
2
8
下载口
IDC10
个
2
9
晶振
XTAL1,直插
12M
个
2
10
锁存器
直插
74HC573
个
3
11
光敏电阻
直插
个
2
12
底座
DIP40DIP28,DIP20,DIP14
个
2,2,2,2
八.参考文献
《例说51单片机》郭天祥著
《电路设计与制板:
Protel99SE入门与提高》老虎工作室编
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字 电压表 修改