黄楠楠单片机课程设计数字电压表.doc

上传人:飞****2 文档编号:66767715 上传时间:2022-12-21 格式:DOC 页数:12 大小:254KB
返回 下载 相关 举报
黄楠楠单片机课程设计数字电压表.doc_第1页
第1页 / 共12页
黄楠楠单片机课程设计数字电压表.doc_第2页
第2页 / 共12页
点击查看更多>>
资源描述

《黄楠楠单片机课程设计数字电压表.doc》由会员分享,可在线阅读,更多相关《黄楠楠单片机课程设计数字电压表.doc(12页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、河南科技大学课 程 设 计 说 明 书课程名称 单片机原理题 目 数字电压表设计院 系 电子信息工程学院班 级 自动化085班学生姓名 黄楠楠指导教师 叶宇程日 期 2011年5月20日课程设计名称 单片机原理 学生姓名 黄楠楠 专业班级 自动化085 设计题目 数字电压表设计 一、 课程设计目的1、 培养学生文献检索的能力,如何利用Internet检索需要的文献资料。2、 培养学生综合分析问题、发现问题和解决问题的能力。3、 培养学生综合运用知识的能力和工程设计的能力。4、 培养学生理论联系实际的能力。5、 提高学生课程设计报告撰写水平。二、 设计内容和设计要求1、设计内容利用51单片机与A

2、DC0808或ADC0809设计一个数字电压表,能够测量05V之间的直流电压值,四位数码显示或LM1602液晶显示,但要求使用的元器件数目最少。(1)使用ADC0808或ADC0809芯片做为电压输入的AD模块;(2)使用外部按键控制方式读取电压信号;(3) 使用4位共阴极动态LED数码管或LM1602液晶显示屏作为输出显示部分;(4)软件可用C语言或汇编语言,硬件可用实验箱或Protues仿真软件实现功完整的能演示。2、设计要求(1)设计单片机最小系统(包括复位按钮、晶振电路等);(2)共阴极LED数码管或LM1602液晶显示。(3)用定时器中断方式定时刷新或按键控制读取方式显示,使用按键控

3、制时要求使用外部中断方式。(4)绘制实现本设计内容的硬件电路(原理图),系统的组成框图。(5)给出ADC0808或ADC0809的功能说明与使用方法;(6)编写本课程设计内容的软件设计(包含程序流程图和对程序注释)。三、硬件设计原理模数转换原理: 试验中,我们选用ADC0809作为模数转换的芯片,其为逐次逼近式AD转换式芯片,其工作时需要一个稳定的时钟输入,根据查找资料,得到ADC0809的时钟频率在10khz1200khz,我们选择典型值640khz。课题要求测量电压范围是0到5V,又ADC0809的要求:Vref+=GND,故我们取Vref+=+5V,Vref-=0V。由于ADC0809有

4、8个输入通道可供选择,我们选择IN6通道,直接使ADC0809的A接地,B、C接高电平可以了,在当ADC0809启动时ALE引脚电平正跳变时变可以锁存A、B、C上的地址信息。ADC0809可以将从IN6得到的模拟数据转换为相应的二进制数,由于ADC0809输出为8位的二进制数,转换时将0到5V分为255等分,所以我们可以得到转换公式为x/255*5化简为:x/51,x为得到的模拟数据量,也就是直接得到的电压量。在AD转换完成后,ADC0809将在EOC引脚上产生一个8倍于自身时钟周期的正脉冲,以此来作为转换结束的标志。然后当OE引脚上产生高电平时,ADC0809将允许转换完的二进制数据输出。数

5、据处理原理: 由ADC0809的转换原理可以知道我们从其得到数据还只是二进制数据,我们还需要进一步处理来的到x的十进制数,并且对其进行精度处理,也就是课题要求的的精确到小数点后两位,在这里我们用51单片机对数据进行处理。我们处理数据的思路是:首先将得到的二进制数直接除以十进制数51,然后取整为x的整数部分,然后就是将得到的余数乘以10,然后再除以51,再取整为x的十分位,最后将得到的余数除以5得到x的百分位。硬件原理图:系统框图:时钟电路 复位电路A/D转换电路测量电压输入显示系统AT89C51 P1 P2 P2 P0 四、主要器件介绍1、AT89C51AT89C51芯片模型AT89C51芯片

6、的各引脚功能为:P0口:8位,漏极开路的双向I/O口。这组引脚共有8条,P0.0为最低位。这8个引脚有两种不同的功能,分别适用于不同的情况。 P1口:8位,准双向I/O口,具有内部上拉电阻。这8个引脚和P0口的8个引脚类似,P1.7为最高位,P1.0为最低位,当P1口作为通用I/O口使用时,P1.0-P1.7的功能和P0口的第一功能相同,也用于传送用户的输入和输出数据。P2口:这组引脚的第一功能与上述两组引脚的第一功能相同即它可以作为通用I/O口使用,它的第一功能和P0口引脚的第二功能相配合,用于输出片外存储器的高8位地址,共同选中片外存储器单元,但并不是像P0口那样传送存储器的读/写数据。P

7、3口:这组引脚的第一功能和其余三个端口的第一功能相同,第二功能为控制功能,每个引脚并不完全相同,如下表2所示:ALE/PROG:地址锁存允许信号,输出。配合P0口的第二功能使用,在访问外部存储器时,89C51的CPU在P0.0-P0.7引脚线去传送随后而来的片外存储器读/写数据。在不访问片外存储器时,89C51自动在ALE线上输出频率为1/6震荡器频率的脉冲序列。该脉冲序列可以作为外部时钟源或定时脉冲使用。/EA:片外存储器访问允许信号,低电平有效。可以控制89C51使用片内ROM或使用片外ROM,若/EA=1,则允许使用片内ROM, 若/EA=0,则只使用片外ROM。/PSEN:片外ROM的

8、选通信号低电平有效。在访问片外ROM时,89C51自动在/PSEN线上产生一个负脉冲,作为片外ROM芯片的读选通信号。RST:复位线,可以使89C51处于复位(即初始化)工作状态。通常89C51复位有自动上电复位和人工按键复位两种。XTAL1和XTAL2:片内震荡电路输入线,这两个端子用来外接石英晶体和微调电容,即用来连接89C51片内OSC(震荡器)的定时反馈回路。2、ADC0808的功能说明与使用方法ADC0808是一种典型的A/D转换器。它是由8位A/D转换器,一个8路模拟量开关;8位模拟量地址锁存译码器和一个三态数据输出锁存器组成;+5V单电源供电,转化时间在100us左右;内部没有时

9、钟电路,故需外部提供时钟信号。芯片模型如下图所示:ADC0808芯片模型功能说明:(1) IN0IN7:8路模拟量输入端。(2) D0D7:8位数字量输出端口。(3) START:A/D转换启动信号输入端。(4) ALE:地址锁存允许信号,高电平有效。(5) EOC:输出允许控制信号,高电平有效。(6) OE: 输出允许控制信号,高电平有效。(7) CLK:时钟信号输入端。(8)ADDA、ADDB、ADDC:转换通道地址,控制8路模拟通道的切换。ADDA、ADDB、ADDC分别与地址线或数据线相连,三位编码对应8个通道地址端口,ADDA、ADDB、ADDC=000111分别对应IN0IN7通道

10、的地址端口。使用方法:ADC0808采用逐次比较的方法完成A/D转换,由单一的+5V电源供电。片内带有锁存功能的8路选1的模拟开关,由ADDA、ADDB、ADDC的编码来决定所选的通道。ADC0808完成一次转换需100s左右,它具有输出TTL三态锁存缓冲器,可直接连接到AT89C51的数据总线上。通过适当的外接电路,ADC0808可对05V的模拟信号进行转换。五、部分电路介绍1、晶振电路 本设计系统采用内部时钟方式,利用单片机内部的高增益反相放大器,外部电路简,只需要一个晶振和 2个电容即可,如下图所示。晶振电路电路中的器件选择可以通过计算和实验确定,也可以参考一些典型电路。参数,电路中,电

11、容器C1和C2对震荡频率有微调作用,通常的取值范围是3010pF,在这个系统中选择了33pF;石英晶振选择范围最高可选24MHz,它决定了单片机电路产生的时钟信号震荡频率,在本系统中选择的是12MHz,因而时钟信号的震荡频率为12MHz。2、复位电路单片机在启动运行时都需要复位,使CPU和系统中的其他部件都处于一个确定的初始状态,并从这个状态开始工作。MCS-51单片机有一个复位引脚RST,采用施密特触发输入。当震荡器起振后,只要该引脚上出现2个机器周期以上的高电平即可确保时器件复位。复位完成后,如果RST端继续保持高电平,MCS-51就一直处于复位状态,只要RST恢复低电平后,单片机才能进入

12、其他工作状态。 复位电路3、模拟输入电路通过可变电阻一端接电源+5v,一端接地GND,通过改变电阻的阻值,从而改变所测电压值,实现电压的模拟信号输入。模拟输入电路六、软件设计程序流程图:开始初始化调用A/D转换子程序调用显示子程序结束主程序流程图启动转换A/D转换结束?输出转换结果数值转换显示结束开始A/D转换流程图源程序:/*程序功能:实现数模转换,并将结果在*数码管上显示出来。 */#include #include#define LED_Data P2#define A 10#define U 11sbit LED1=P30;sbit LED2=P31;sbit LED3=P32;sbi

13、t LED4=P33;sbit dp=P35;#define LED_slect P3#define uchar unsigned char#define uint unsigned intstatic uchar dispdata4;unsigned char code num=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x3e; /数字编码/AD0809#define XBYTE (unsigned char volatile xdata *) 0) #define adin XBYTE0x7ff9 /0809的外部地址v

14、oid delayus(uint us) while(us-);uchar ad_action(uchar ch)/0255代表05V,所以V=out*5.0/255 uchar read_data; adin=ch; /ch:通道号 delayus(6); read_data=adin; /? return read_data; /0809的输出,数字量/* LCALL ad_action(C:0463)MOV DPTR,#0x7FFFMOV A,R7MOVX DPTR,AMOV R7,#0x06MOV R6,#0x00LCALL delayus(C:02D3)MOVX A,DPTRMOV

15、R7,ARET */ /数码管显示控制void decodenum(float adv,uchar ch) /ch: AD通道号 uint temp; temp=(uint)(adv*1000);/若显示3位: temp=(uint)(adv*100) dispdata0=temp/1000; dispdata1=temp/100%10; dispdata2=temp/10%10; dispdata3=temp%10; dispdata3=ch;/可在最后1位显示通道号void select(uchar LED) switch(LED) case 0:LED1=0;break; case 1:

16、LED2=0;break; case 2:LED3=0;break; case 3:LED4=0;break; default: LED_slect=0xff; void dispone(uchar LED,bit ifpoint,uchar number) /,number 0-9 select(LED);if(ifpoint) dp=1; else dp=0; LED_Data=numnumber|0x80; delayus(200); LED_slect=0xff; void disp() uchar i; bit point; for(i=0;i4;i+) if(i=0) point=

17、1; else point=0; dispone(i,point,dispdatai); #define addo (5.0/255.0)#define zero 0.005 /用于校准AD的误差 void main() uint cnt=0;/ad_action(0); while(1) switch(cnt+) case 0: decodenum(ad_action(0)*addo+zero,0);break; /* case 0: decodenum(ad_action(0)*addo+zero,0);break; case 70: decodenum(ad_action(1)*addo

18、+zero,1);break; case 140: decodenum(ad_action(2)*addo+zero,2);break; case 210: decodenum(ad_action(3)*addo+zero,3);break; case 280: decodenum(ad_action(4)*addo+zero,4);break; case 350: decodenum(ad_action(5)*addo+zero,5);break; case 420: decodenum(ad_action(6)*addo+zero,6);break; case 490: decodenum

19、(ad_action(7)*addo+zero,7);break;*/ case 560:cnt=0;break; disp(); 七、总结与体会经过一周的努力终于设计成功,LED的显示结果和直接用数字电压表测试模拟量输入所得结果几乎一致,误差完全在合理的范围之内。由于仪器误差,LED显示最大值只能是5.005V,离标准最大值5.0V已经不远,达到预期目的,设计成功。 本设计参考了教材上第十一章89C51与ADC0809转换的接口连线,设计出电路图的连线,从并中理解了许多基本的知识和接线方法,在程序的设计与电压表调试的过程中中遇到了很多的问题,刚开始时四个数码管根本不显示,后来发现用的是共阳极

20、的数码管,而设计是共阴极的,更换后数码管终于显示,但问题又出现了,单路显示和循环显示的开关不能控制电路的单路显示和循环显示,经过仔细地检查电路和修改程序,采用中断的方法,产生一次外部中断0,程序转移到单路显示,按一次单路显示开关,地址加一,转换的模拟通道相应的加一,如果按下循环按键就返回循环显示的程序,功夫不负有心人,最后终于调试成功。在此再次向带领我们这次课程设计的老师说声:谢谢! 八、参考文献1胡健.单片机原理及接口技术.北京:机械工业出版社,2004年10月2. 魏立峰.单片机原理及应用技术.北京大学出版社,2005年3. 何立民.单片机中级教程-原理与应用. 北京航空航天大学出版社4. 苗红霞.单片机实现数字电压表的软硬件设计J .河海大学常州分校学报,2002,(03)5. 陈明荧. 8051单片机课程设计实训教材M.清华大学出版社6. 宋凤娟,孙军,李国忠.基于89C51单片机的数字电压表设计J .工业控制计算机,2007,(04)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com