数字电压表课程设计doc.docx

上传人:b****1 文档编号:209965 上传时间:2023-04-28 格式:DOCX 页数:29 大小:232.09KB
下载 相关 举报
数字电压表课程设计doc.docx_第1页
第1页 / 共29页
数字电压表课程设计doc.docx_第2页
第2页 / 共29页
数字电压表课程设计doc.docx_第3页
第3页 / 共29页
数字电压表课程设计doc.docx_第4页
第4页 / 共29页
数字电压表课程设计doc.docx_第5页
第5页 / 共29页
数字电压表课程设计doc.docx_第6页
第6页 / 共29页
数字电压表课程设计doc.docx_第7页
第7页 / 共29页
数字电压表课程设计doc.docx_第8页
第8页 / 共29页
数字电压表课程设计doc.docx_第9页
第9页 / 共29页
数字电压表课程设计doc.docx_第10页
第10页 / 共29页
数字电压表课程设计doc.docx_第11页
第11页 / 共29页
数字电压表课程设计doc.docx_第12页
第12页 / 共29页
数字电压表课程设计doc.docx_第13页
第13页 / 共29页
数字电压表课程设计doc.docx_第14页
第14页 / 共29页
数字电压表课程设计doc.docx_第15页
第15页 / 共29页
数字电压表课程设计doc.docx_第16页
第16页 / 共29页
数字电压表课程设计doc.docx_第17页
第17页 / 共29页
数字电压表课程设计doc.docx_第18页
第18页 / 共29页
数字电压表课程设计doc.docx_第19页
第19页 / 共29页
数字电压表课程设计doc.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数字电压表课程设计doc.docx

《数字电压表课程设计doc.docx》由会员分享,可在线阅读,更多相关《数字电压表课程设计doc.docx(29页珍藏版)》请在冰点文库上搜索。

数字电压表课程设计doc.docx

数字电压表课程设计doc

课程设计

课程名称单片机原理与应用

课题名称简易数字电压表

专业自动化

班级0904

学号

姓名

指导教师林国汉、王迎旭、李晓秀、汪超、李世军

2012年6月18日

湖南工程学院

课程设计任务书

 

课程名称单片机原理及应用

课题简易数字电压表

 

专业班级自动化0904

学生姓名

学号

指导老师林国汉

审批

 

任务书下达日期2012年6月18日

任务完成日期2012年6月30日

设计内容与设计要求

设计内容:

设计一个简易数字电压表,设计内容包括:

(1)使用51单片机,A/D转换芯片,LED或者LCD显示器

(2)能测量0-5V的直流电压

(3)能连续、稳定显示所测电压

(4)测量误差<0.02V)

(5)多路电压轮流/选择显示*(可选)

(6)其它功能*(可选)

设计要求:

1)确定系统设计方案;

2)进行系统的硬件设计

3)完成必要的参数计算与元器件选择;

4)完成应用程序设计;

5)进行软硬件调试;

主要设计条件

1单片机开发板

2PC机

3PROTEL软件

4PROTEUS软件

说明书格式

1.课程设计任务书

2.目录

3.系统总体方案选择与说明

4.系统结构框图与工作原理

5.各单元硬件设计说明及计算方法

6.软件设计与说明(包括流程图)

7.调试结果与必要的调试说明

8.使用说明

9.程序清单

10、总结

11、参考文献

附录

附录A系统原理图

附录B程序清单

进度安排

设计时间为两周

第一周

星期一、上午:

布置课题任务,讲课及课题介绍

下午:

借阅有关资料,总体方案讨论

星期二、确定总体设计方案

星期三、硬件模块方案设计

星期四、软件模块方案设计

星期五、各硬件模块设计

第二周

星期一、各硬件模块设计

星期二、各软件模块设计

星期三、各软件模块设计

星期四、写说明书

星期五、上午:

写说明书,整理资料

下午:

交设计资料,答辩

参考文献

1、《单片机原理及应用》李建忠编西安电子科技大学出版社

2、《单片微型计算机原理与接口技术》高峰编电子工业出版社

3、《单片机应用新技术教程》邹逢兴编高等教育出版社

4、《16位微型计算机原理接口及其应用》朱宇光编电子工业出版社

5、《微型计算机原理与接口技术》吴秀清编中国科学技术出版社

6、《微型计算机接口技术》邓亚平编清华大学出版社

7、《单片机原理及及应用》王迎旭编机械工业出版社

 

第1章概述…………………………………………………………………1

第2章总体设计方案…………………………………………………………2

2.1设计要求………………………………………………………………2

2.2设计思路………………………………………………………………3

2.3总框图…………………………………………………………………3

第3章硬件系统设计………………………………………………………4

3.1AT89C52的功能介绍…………………………………………………4

3.2ADC0808的引脚和功能介绍…………………………………………5

3.3晶振电路介绍…………………………………………………………6

3.4复位电路介绍…………………………………………………………7

3.5LCD的控制显示………………………………………………………8

第4章软件系统设计………………………………………………………9

4.1主程序…………………………………………………………………9

4.2A/D转换子程序………………………………………………………10

4.3LCD显示控制程序……………………………………………………11

第5章仿真与调试…………………………………………………………12心得体会……………………………………………………………………17

参考文献……………………………………………………………………18

附录…………………………………………………………………………19

 

第1章概述

单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的计算机系统。

数字电压表是采用数字化测量技术,把连续的模拟量(直流出入电压)转换成不连续的、离散的数字形式并加以显示的仪表。

与此同时,由DVM扩展而成的各种通用及专用数字仪器仪表,也把电量及非电量测量技术提高到了崭新的水平。

现在,由各种单片A/D转换器构成的数字电压表,已经被广泛用于电子及电工测量、工业自动化各个领域。

本设计重点介绍了基于单片机原理下的数字电压表的工作原理。

 

 

第2章总体设计方案

2.1设计要求

要求简易数字电压表能对0~5v范围内的8路信号进行检测,能将所测量的电压在LCD显示器上显示(0.00~5.00),键盘操作有:

复位、显示通道+、显示通道+、循环显示、停止、功能

2.2设计思路

本系统由以下几个模块构成:

AT89C52、ADC0808、LCD液晶显示。

由于ADC0808在进行A/D转换时需要CLK信号,本系统中ADC0808的CLK直接由外部电源提供为600Hz的方波。

ADC0808的参考电压是VRFF=VCC,所以转换之后的数据要经过数据处理,在液晶管上显示电压值。

简易数字电压表测量电路由A/D转换、数据处理及显示控制等组成。

A/D转换由集成电路0808完成。

0808具有8路模拟输入端口,地址(23-25)脚可决定对哪路模拟输入作A/D转换,22脚为地址锁存脚,当输入为高电平时,对地址信号进行锁存。

6脚为测试控制,当输入一个2us宽高电平脉冲时,就开始进行A/D转换。

7脚为A/D转换结束标志,当A/D转换结束时7脚输出高电平。

9脚为A/D转换数据输出允许控制,当OE脚为高电平时,A/D转换数据从该端口输出。

10脚为0808的时钟输入端,由外部信号源提供。

单片机的P0端口作为LCD1602显示控制。

P3.7端口作为通道循环。

P1端口作A/D转换数据读入用,P2端口用作0808的A/D转换控制。

 

2.3设计总框图

 

图2.1总框图

 

第3章硬件系统设计

3.1AT89C52功能介绍

AT89S52为ATMEL所生产的一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。

图3.1AT89C52引脚图

AT89S52主要功能列举如下:

1、拥有灵巧的8位CPU和在系统可编程Flash

2、晶片内部具时钟振荡器(传统最高工作频率可至12MHz)

3、内部程序存储器(ROM)为8KB

4、内部数据存储器(RAM)为256字节

5、32个可编程I/O口线

6、8个中断向量源

7、三个16位定时器/计数器

8、三级加密程序存储器

9、全双工UART串行通道

3.2ADC0808的引脚和功能介绍

ADC0808是采样分辨率为8位的、以逐次逼近原理进行模/数转换的器件。

其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选通8路模拟输入信号中的一个进行A/D转换。

ADC0808是ADC0809的简化版本,功能基本相同。

一般在硬件仿真时采用ADC0808进行A/D转换,实际使用时采用ADC0809进行A/D转换。

图3.2ADC0808管脚图

3.2.1内部结构

ADC0808是CMOS单片型逐次逼近式A/D转换器,它有8路模拟开关、地址锁存与译码器、比较器、8位开关树型A/D转换器。

3.2.2引脚功能(外部特性)

ADC0808芯片有28条引脚,采用双列直插式封装,如右图所示。

各引脚功能如下:

1~5和26~28(IN0~IN7):

8路模拟量输入端。

8、14、15和17~21:

8位数字量输出端。

22(ALE):

地址锁存允许信号,输入,高电平有效。

6(START):

A/D转换启动脉冲输入端,输入一个正脉冲(至少100ns宽)使其启动(脉冲上升沿使0809复位,下降沿启动A/D转换)。

7(EOC):

A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。

9(OE):

数据输出允许信号,输入,高电平有效。

当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。

10(CLK):

时钟脉冲输入端。

要求时钟频率不高于640KHZ。

12(VREF(+))和16(VREF(-)):

参考电压输入端11(Vcc):

主电源输入端。

13(GND):

地。

23~25(ADDA、ADDB、ADDC):

3位地址输入线,用于选通8路模拟输入中的一路。

3.3晶振电路介绍

图3.3晶振电路

晶振用一种能把电能和机械能相互转化的晶体在共振的状态下工作,以提供稳定,精确的单频振荡。

在通常工作条件下,普通的晶振频率绝对精度可达百万分之五十。

高级的精度更高。

有些晶振还可以由外加电压在一定范围内调整频率,称为压控振荡器(VCO)。

 

3.4复位电路介绍

图3.4复位电路

复位电路是为确保微机系统中电路稳定可靠工作必不可少的一部分,复位电路的第一功能是上电复位。

一般微机电路正常工作需要供电电源为5V±5%,即4.75~5.25V。

由于微机电路是时序数字电路,它需要稳定的时钟信号,因此在电源上电时,只有当VCC超过4.75V低于5.25V以及晶体振荡器稳定工作时,复位信号才被撤除,微机电路开始正常工作。

 

3.5LCD的控制显示

图3.5LCD液晶显示管模型

LCD1602的8位双向数据端接AT89C52的P0端口,RS(寄存器选择)接P2.4,RW(读写信号线)接P2.5,E(使能端)接P2.6。

 

第4章软件系统设计

4.1主程序

根据我们的设计,把程序分为初始化块,A/D转换子程序,显示子程序,按键子程序。

运行程序后,进入初始化,然后调用A/D转化子程序,同时判断是否有键闭合,如果没有闭合,则命令显示子程序延时等待,若有键闭合,则调用显示子程序,最后完成显示电压值的任务。

主程序流程图如图4.1所示。

图4.1数字电压表主程序流程图

 

4.2A/D转换子程序

A/D转换子程序用于对ADC0808的4路输入模拟电压进行A/D转换,并将转换的数值存入4个相应的存储单元中。

图4.2A/D转换流程图

 

4.3LCD显示子程序

LCD1602通过D0~D7的8位数据端传输数据和指令。

显示模式设置:

(初始化)

  00110000[0x38]设置16×2显示,5×7点阵,8位数据接口;

图4.3LCD显示流程图

 

第5章仿真与调试

5.1软件调试

软件调试的主要任务是排查错误,错误主要包括逻辑和功能错误,这些错误有些是显性的,而有些是隐形的,可以通过仿真开发系统发现逐步改正。

Proteus软件可以对基于微控制器的设计连同所有的周围电子器件一起仿真,用户甚至可以实时采用诸如LED/LCD、键盘、RS232终端等动态外设模型来对设计进行交互仿真。

Proteus支持的微处理芯片包括8051系列、AVR系列、PIC系列、HC11系列及Z80等等。

Proteus可以完成单片机系统原理图电路绘制、PCB设计,更为显著点的特点是可以与uVisions3IDE工具软件结合进行编程仿真调试[8]。

本系统的调试主要以软件为主,其中,系统电路图的绘制和仿真我采用的是Proteus软件,而程序方面,采用的是c语言,用Keil软件将程序写入单片机。

5.2显示结果及误差分析

5.2.1显示结果

1.当IN0口输入电压值为0V时,显示结果如图14所示,测量误差为0V。

图14输入电压为0V时,LED的显示结果

2.当IN0输入电压值为1.50V时,显示结果如图15所示。

测量误差为0.01V。

图15输入电压为1.50V时,LED的显示结果

3.当IN0口输入电压值为3.50V时,显示结果如图16。

测量误差为0.01V。

图16输入电压为3.50V时,LED的显示结果

5.2.2误差分析

通过以上仿真测量结果可得到简易数字电压表与“标准”数字电压表对比测试表,如下表4所示:

表4简易数字电压表与“标准”数字电压表对比测试表

标准电压值/V

简易电压表测量值/V

绝对误差/V

0.00

0.00

0.00

0.50

0.51

0.01

1.00

1.00

0.00

1.50

1.51

0.01

2.00

2.00

0.00

2.50

2.50

0.00

3.00

3.00

0.00

3.50

3.50

0.00

4.00

4.00

0.00

4.99

5.00

0.01

由于单片机AT89C51为8位处理器,当输入电压为5.00V时,ADC0808输出数据值为255(FFH),因此单片机最高的数值分辨率为0.0196V(5/255)。

这就决定了电压表的最高分辨率只能到0.0196V,从上表可看到,测试电压一般以0.01V的幅度变化。

从上表可以看出,简易数字电压表测得的值基本上比标准电压值偏大0-0.01V,这可以通过校正ADC0808的基准电压来解决。

因为该电压表设计时直接用5V的供电电源作为电压,所以电压可能有偏差。

当要测量大于5V的电压时,可在输入口使用分压电阻,而程序中只要将计算程序的除数进行调整就可以了。

 

心得体会

为期两周的课程设计转眼结束了,我所在的小组做的课题是简易数字电压表。

虽然说对于学习单片机的人们来说,这是个很简单的仿真,但是从这次课程设计中,我还是学到很多,也感悟了很多。

在这次难得的课程设计过程中我锻炼了自己的思考能力和动手能力。

在设计电路的过程中,加强了我们思考问题的完整性和实际生活联系的可行性。

在方案设计选择和芯片的选择上,培养了我们综合应用单片机的能力,对单片机AT89C52及ADC0808等的各个管脚的功能也有了进一步的认识。

还锻炼我们个人的查阅技术资料的能力,动手能力,发现问题,解决问题的能力。

这次做完课程设计我积累了以下几点学习经验:

(1)学习单片机没有捷径,别指望两三天就学会,要坚持不懈,重在积累。

(2)别崇拜高手,别相信天才,大部分人都不是天才,天才在于勤奋!

(3)单片机是一门应用性和实践性很强的学科,要多动手,多做实验。

(4)要学会参考别人的程序,减少自己琢磨的时间,迅速提高自己的编程能力。

(5)碰到问题可以借助网络来搜寻答案和对自己有帮助的问题,可以大大减少开发时间。

通过这次的课程设计作品的制作让我对单片机的理论有了更加深入的了解,而且由于单片机是很实用的一门技术,我们不得不考虑理论与现实的问题。

通过这次实践使我更深刻的体会到了理论联系实际的重要性,我们在今后的学习工作中会更加的注重实际,避免称为只会纸上谈兵的赵括。

最后,感谢李晓秀老师不辞劳累地为我们进行指导,我们的成功离不您的帮助。

课程设计时间虽然很短,但我学习了很多的东西,使我眼界打开,感受颇深。

参考文献

[1]胡健.单片机原理及接口技术.北京:

机械工业出版社,2004年10月

[2]王毓银.数字电路逻辑设计.高等教育出版社,2005年12月

[3]于殿泓、王新年.单片机原理与程序设计实验教程.西安电子科技大学出版社,2007年5月

[4]李广弟.单片机基础.北京航空航天大学出版社,2007年5月

[5]魏立峰.单片机原理及应用技术.北京大学出版社,2005年

 

附录1:

仿真原理图

 

附录2:

源程序代码

名称:

LCD1602

内容:

通过标准程序动态显示字符

------------------------------------------------*/

#include//包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

sbitRS=P2^4;//定义端口

sbitRW=P2^5;

sbitEN=P2^6;

#defineRS_CLRRS=0

#defineRS_SETRS=1

#defineRW_CLRRW=0

#defineRW_SETRW=1

#defineEN_CLREN=0

#defineEN_SETEN=1

#defineucharunsignedchar

#defineuintunsignedint

ucharcodeTable[]="0123456789";

/******************************************************************/

/*微秒延时函数*/

/******************************************************************/

voiddelay_us(unsignedintn)//延时如果需要高精度延时请嵌入汇编

{

if(n==0)

{

return;

}

while(--n);

}

/******************************************************************/

/*毫秒函数声明*/

/******************************************************************/

voiddelay_ms(unsignedchari)

{

unsignedchara,b;

for(a=1;a

{

for(b=1;b;b++)

{;}

}

}

/******************************************************************/

/*写入命令函数*/

/******************************************************************/

voidLCD_write_com(unsignedcharcom)

{

RS_CLR;

RW_CLR;

EN_SET;

P0=com;

delay_us(5);

EN_CLR;

}

/******************************************************************/

/*写入数据函数*/

/******************************************************************/

voidLCD_write_Data(unsignedcharData)

{

RS_SET;

RW_CLR;

EN_SET;

P0=Data;

delay_us(5);

EN_CLR;

}

/******************************************************************/

/*清屏函数*/

/******************************************************************/

voidLCD_clear(void)

{

LCD_write_com(0x01);

delay_ms(5);}

/******************************************************************/

/*写入字符串函数*/

/******************************************************************/

voidLCD_write_str(ucharx,uchary,ucharn,uchar*s)

{

uchari;

ucharSpace[16]="";

if(y==0)

{

LCD_write_com(0x80+x);

}

else

{

LCD_write_com(0xC0+x);

}

for(i=0;i

{

LCD_write_Data(*s++);

}

s=Space;

for(i=n;i<16;i++)

{

LCD_write_Data(*s++);

}

}

voidLCD_Printf(ucharx,uchary,unsignedlongintValue)

{uchari;unsignedlongk,j=1000000;

ucharstr[9]="mv";

for(i=0;i<6;i++)

{k=Value%j;j=j/10;k=k/j;str[i]=Table[k];

}

LCD_write_str(x,y,9,str);

}

/******************************************************************/

/*写入字节函数*/

/******************************************************************/

voidLCD_write_char(unsignedcharx,unsignedchary,unsignedcharData)

{

if(y==0)

{

LCD_write_com(0x80+x);

}

else

{

LCD_write_com(0xC0+x);

}

LCD_write_Data(Data);

}

/******************************************************************/

/*初始化函数*/

/******************************************************************/

voidLCD_init(void)

{

LCD_write_com(0x38);/*显示模式设置*/

delay_ms(5);

LCD_write_com(0x38);

delay_ms(5);

LCD_write_com(0x38);

delay_ms(5);

LCD_write_com(0x38

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2