数字电压表课程设计.docx
- 文档编号:11816788
- 上传时间:2023-04-03
- 格式:DOCX
- 页数:16
- 大小:264.95KB
数字电压表课程设计.docx
《数字电压表课程设计.docx》由会员分享,可在线阅读,更多相关《数字电压表课程设计.docx(16页珍藏版)》请在冰豆网上搜索。
数字电压表课程设计
课程设计(论文)
题目名称数字电压表
课程名称课程设计
学生姓名
学号
系、专业
指导教师
年月日
摘要
在电路设计中我们时常会用到电压表,过去大部分电压表还是模拟的,虽然精度较高但模拟电压表用指针式,里面是磁电或电磁式结构,所以较慢基于tmel51单片机开发平台和自动控制原理的基础上实现的一种数字电压表系统。
该系统采用tmel89C51单片机作为控制核心,以为数据采样系统,实现被测电压的数据采样;使用系列比较器检测输入电压的范围,并通过继电器阵列实现了输入量程的自动转换。
本课题是利用单片机设计一个数字电压表,能够测量0-15V之间的直流电压值,四位数码显示,使用的元器件数目较少。
首先,外界电压模拟量输入到A/D转换部分的输入端,通过A/D转换变为数字信号,输送给单片机。
然后由单片机给LED数字信号,控制其发光,从而显示数字。
本电路还有两个发光二极管用来指示数字电压表的工作状态。
另外,本电路还接有一个音频放大电路,也可用来指示电路的工作状态。
关键词:
单片机;数字电压表;A/D转换
目录
摘要......................................................................................................................I
第1章课程设计的总体方案…………………………………………………..3
1.1课程设计的目的……………………………………………..………3
1.2课程设计的要求……………………………………………..………3
1.3课程设计的思路……………………………………………..………3
1.4课程设计的方案………………………………………………..……3
第2章系统方案硬件设计…………………………………………………….4
2.1单片机方案……………………………………………………..……4
2.2A/D转换器方案…………………………………………..……….5
2.3时钟、复位电路………………………………………………………6
第3章系统软件设计……………………………………………………………7
3.1程序设计总方案……………………………………………..………7
3.2系统子程序设计……………………………………………………..7
3.3A/D转换转换子程序………………………………………………..7
3.4显示子程序…………………………………………………………8
第4章系统仿真………………………………………………………………9
4.1Proteus简介…………………………………………………………9
4.2系统仿真图………………………………………………….….…9
第5章实习总结………………………………………………………………10
参考文献……………………………………………………………………….11
附录…………………………………………………………………………….12
第1章课程设计的总体方案
1.1课程设计的目的
1.了解A/D芯片PCF8591转换性能及其编程方法。
2.掌握A/D转换器与单片机的接口方法
3.学会使用A/D转换器进行电压信号采集
1.2课程设计的要求
1.利用A/D芯片PCF8591及1602液晶显示屏组成。
2.采用4路模拟量输入。
3.尽量使用较少的元器件。
1.3课程设计的思路
1.根据设计要求,选择AT89C51单片机为核心控制器件。
2.A/D转换采用PCF8591实现,利用PCF8591将模拟电压转换为数字量。
3.经单片机将数字量转换成对应电压值,电压显示采用4位一体的LED数码管。
1.4课程设计的方案
硬件电路设计由6个部分组成;A/D转换电路,AT89C51单片机系统,LCD显示系统、时钟电路、复位电路以及测量电压输入电路。
硬件电路设计框图如图1.1所示。
图1.1数字电压表系统硬件设计框图
第2章系统方案硬件设计
2.1单片机方案
AT89C51是一个低功耗,高性能CMOS8位单片机,片内含4k字节Flash可擦写存储器(PEROM)。
AT89C51器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,AT89C51的片内Flash允许程序存储器通过传统编程器反复编程。
由于芯片内集成了通用8位中央处理器和Flash存储单元,功能强大的微处理器ATMELAT89C51可为许多嵌入式控制应用系统提供高度灵活、高性价比的解决方案。
AT89C51具有如下特点:
4kBytesFlash存储器、128bytes的RAM以及32个I/O口、2个16位定时/计数器,5个中断优先级2层中断嵌套中断、1个全双工串行通信口、片内时钟振荡器。
AT89C51芯片,如图2.1所示,各引脚功能如下:
VCC:
供电电压。
GND:
接地。
P0口:
为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
P1口:
是个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
图2.1AT89C51设计
P2口:
为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高。
P3口:
管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
P3口也可作为AT89C51的一些特殊功能口,如所示:
P3.0RXD(串行输入口)P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
2.2A/D转换器方案
PCF8591的功能包括多路模拟输入、内置跟踪保持、8-bit模数转换和8-bit数模转换。
PCF8591的最大转化速率由I²C总线的最大速率决定。
1、主要技术指标和特性
单独供电;PCF8591的操作电压范围2.5V-6V;低待机电流
通过I2C总线串行输入/输出;PCF8591通过3个硬件地址引脚寻址
PCF8591的采样率由I2C总线速率决定;
4个模拟输入可编程为单端型或差分输入频道选择自动增量;
PCF8591的模拟电压范围从Vss到VDD;
PCF8591内置跟踪保持电路;8-bit逐次逼近A/D转换器;
通过1路模拟输出实现DAC增益.图2.2PCF8591引脚图
2.3时钟、复位电路
2.3.1时钟电路
AT89S51的时钟电路如图所示,在单片机的XTAL1和XTAL2两个管脚接一个晶振及两个电容构成了时钟电路电路中电容C1和C2对振荡频率有微调作用,在设计时取30uF。
晶振为11.0592MHz,故选择12MHz即可。
图2.3时钟电路图2.4复位电路
2.3.2复位电路
AT89S51的复位电路如图所示。
当单片机一上电,立即复位;另外,如果在运行中,外界干扰等因素使单片机的程序陷入死循环状态,就可以通过按键手动使其复位。
复位也是使单片机退出低功耗工作方式而进入正常状态的一种操作。
电容C3和电阻R10实现上电自动复位。
增加按键开关S1和电阻R9又可实现按键手动复位功能。
R9的作用是在S1按下的时候,防止电容C3放电电流过大烧坏开关S1的触点。
第3章系统软件设计
3.1程序设计总方案
根据模块的划分原则,将该程序划分初始化模块,A/D转换子程序和显示子程序,这三个程序模块构成了整个系统软件的主程序,如图3.1所示。
图3.1数字式直流电压表主程序框图
3.2系统子程序设计
初始化程序:
所谓初始化,是对将要用到的MCS_51系列单片机内部部件或扩展芯片进行初始工作状态设定,初始化子程序的主要工作是设置定时器的工作模式,初值预置,开中断和打开定时器等
3.3A/D转换子程序
A/D转换子程序用来控制对输入的模块电压信号的采集测量,并将对应的数值存入相应的内存单元,其转换流程图如图3.2所示。
图3.2A/D转换流程图
3.4显示子程序
显示子程序采用动态扫描实现四位数码管的数值显示,在采用动态扫描显示方式时,要使得LED显示的比较均匀,又有足够的亮度,需要设置适当的扫描频率,当扫描频率在70HZ左右时,能够产生比较好的显示效果,一般可以采用间隔10ms对LED进行动态扫描一次,每一位LED的显示时间为1ms[10]。
在本设计中,为了简化硬件设计,主要采用软件定时的方式,即用定时器0溢出中断功能实现11μs定时,通过软件延时程序来实现5ms的延时。
第四章系统仿真
4.1proteus仿真
Proteus软件是英国Labcenterelectronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。
它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。
它是目前最好的仿真单片机及外围器件的工具。
虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。
4.2系统仿真图
第5章实习总结
经过两周的单片机课程设计,我有了很多的体会和感想。
通过本次对简易电压表的设计,我们对单片机这门课程有了更进一步的了解。
无论是在其硬件连接方面还是在软件编程方面,都取得了新的收获。
本次课程设计采用了AT89C51单片机芯片,与以往我们我们所熟悉的C51芯片有许多不同之处,通过本次实验及查阅相关资料,我们对其之间的区别有了一定的认识,在本课题设计报告的硬件介绍部分也对其作了详细的论述。
S51在C51的基础上增加了许多新的功能,使其功能更为完善,应用领域也更为广泛。
另外,在对单片机编程方面,我们又掌握了一些新的编程思想,使得程序更为简练、易懂,而且更为严谨,程序执行的稳定性得到了提高。
设计中我们还用到了模/数转换芯片PCF8591,以前在学单片机这门课程时只是对其理论知识有了初步的了解。
通过本次实验,我们对它的工作原理彻底理解了,对其启动设置、转换结束判断以及输出控制等都基本掌握。
电路连接方面,我们对其与单片机的连接也有了更为直观的认识,通过实验的摸索以及必要的理论知识,我们准确的实现了它于单片机的互连。
设计过程中,我遇到过许多次失败的考验,比如,自己对单片机编程时遇到了很多阻碍,想要放弃,然而,就在要放弃的那一刻,我明白了,原来结果并不那么重要,我们更应该注重的是这一整个过程。
于是,我坚持了下来。
我非常感激实习老师对我的的指导和帮助,没有老师的指导,我只能晕头转向的瞎忙。
通过这次设计,这也对我们今后的工作敲响了警钟:
要认真的看待每个需要处理的问题,不要认为事情过于简单,不能急于求成,但不要放弃。
要保持头脑清醒。
单片机是很重要的一门课程,老师和一些工作的朋友都曾说过,如果学好一门单片机,就凭这个技术这门手艺找一个好工作也不成问题。
尽管我们在课堂学到的内容很有限,但在以后的学习中单片机还需要好好的深入研究和学习。
最后感谢老师对我的精心指导和帮助,感谢同学们对我的帮助。
参考文献
[1]魏立峰王宝兴.单片机原理及应用技术.北京:
北京大学出版社,2006.
[2]张毅刚.MCS-51单片机应用与设计.哈尔滨:
哈尔滨工业大学出版社,2003.
[3]马忠梅单片机的C语言应用程序设计.北京:
北京航空航天大学出版社2003
[4]PCF8591使用说明书
附录:
#include
#include
#include
#defineAddWr0x90//写数据地址
#defineAddRd0x91//读数据地址
sbitSda=P1^1;//定义总线连接端口
sbitScl=P1^0;
bitADFlag;//定义AD采样标志位
dataunsignedcharDisplay[8];//定义临时存放数码管数值
voidmDelay(unsignedcharj)
{
unsignedinti;
for(;j>0;j--)
{
for(i=0;i<125;i++)
{;}
}
}
voidInit_Timer1(void)
{
TMOD|=0x10;
TH1=0xff;/*Initvalue*/
TL1=0x00;
EA=1;/*interuptenable*/
ET1=1;/*enabletimer1interrupt*/
TR1=1;
}
/*----------启动IIC总线----------*/
voidStart(void)
{
Sda=1;
_nop_();
Scl=1;
_nop_();
Sda=0;
_nop_();
Scl=0;
}
/*----------停止IIC总线----------*/
voidStop(void)
{
Sda=0;
_nop_();
Scl=1;
_nop_();
Sda=1;
_nop_();
Scl=0;
}
/*----------应答IIC总线----------*/
voidAck(void)
{
Sda=0;
_nop_();
Scl=1;
_nop_();
Scl=0;
_nop_();
}
/*----------非应答启动IIC总线----------*/
voidNoAck(void)
{
Sda=1;
_nop_();
Scl=1;
_nop_();
Scl=0;
_nop_();
}
/*----------发送一个字节----------*//
voidSend(unsignedcharData)
{
unsignedcharBitCounter=8;
unsignedchartemp;
do
{
temp=Data;
Scl=0;
_nop_();
if((temp&0x80)==0x80)
Sda=1;
else
Sda=0;
Scl=1;
temp=Data<<1;
Data=temp;
BitCounter--;
}
while(BitCounter);
Scl=0;
}
/*----------读入一个字节并返回----------*//
unsignedcharRead(void)
{
unsignedchartemp=0;
unsignedchartemp1=0;
unsignedcharBitCounter=8;
Sda=1;
do
{
Scl=0;
_nop_();
Scl=1;
_nop_();
if(Sda)
temp=temp|0x01;
else
temp=temp&0xfe;
if(BitCounter-1)
{
temp1=temp<<1;
temp=temp1;
}
BitCounter--;
}
while(BitCounter);
return(temp);
}
/*----------写入D/A数模转换值----------*/-*/
voidDAC(unsignedcharData)
{
Start();
Send(AddWr);//写入芯片地址
Ack();
Send(0x40);//写入控制位,使能DAC输出
Ack();
Send(Data);//写数据
Ack();
Stop();
}
/*--------------读取AD模数转换的值,有返回值-----------*/
unsignedintReadADC(unsignedcharChl)
{
unsignedintData;
Start();//写入芯片地址
Send(AddWr);
Ack();
Send(0x40|Chl);//写入选择的通道,本程序只用单端输入,差分部分需要自行添加
//Chl的值分别为0、1、2、3,分别代表1-4通道
Ack();
Start();
Send(AddRd);//读入地址
Ack();
Data=Read();//读数据
Data=Data*196;//还原电压值近似
Data=Data/33;
Scl=0;
NoAck();
Stop();
returnData;//返回值
}
voidmain()
{
unsignedcharnum;//DA数模输出变量
unsignedcharADtemp;//定义中间变量
InitLcd();
mDelay(20);
Init_Timer1();
while
(1)
{
DAC(num);//DA输出,可以用LED模拟电压变化
num++;//累加,到256后溢出变为0,往复循环。
显示在LED上亮度逐渐变化
mDelay(20);//延时用于清晰看出变化
if(ADFlag)//定时采集输入模拟量
{
ADFlag=
ADtemp=ReadADC(0);
TempData[0]=(ReadADC(0))/1000;//处理0通道电压显示
TempData[1]=(ReadADC(0))/100%10;
TempData[2]=((ReadADC(0))%100)/10;
TempData[3]=((ReadADC(0))%100)%10;
disp();
}
}
}
/*----------定时器中断程---------*/
voidTimer1_isr(void)interrupt3using1
{
staticunsignedintj;
TH1=0xfb;//重新赋值
TL1=0x00;
j++;
if(j==200)
{j=0;ADFlag=1;}//定时置位AD采样标志位
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字 电压表 课程设计