电子信息工程论文修改稿----简易数字电压表的设计(版本3).docx

上传人:牧羊曲112 文档编号:2041991 上传时间:2023-01-03 格式:DOCX 页数:18 大小:104.85KB
返回 下载 相关 举报
电子信息工程论文修改稿----简易数字电压表的设计(版本3).docx_第1页
第1页 / 共18页
电子信息工程论文修改稿----简易数字电压表的设计(版本3).docx_第2页
第2页 / 共18页
电子信息工程论文修改稿----简易数字电压表的设计(版本3).docx_第3页
第3页 / 共18页
电子信息工程论文修改稿----简易数字电压表的设计(版本3).docx_第4页
第4页 / 共18页
电子信息工程论文修改稿----简易数字电压表的设计(版本3).docx_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《电子信息工程论文修改稿----简易数字电压表的设计(版本3).docx》由会员分享,可在线阅读,更多相关《电子信息工程论文修改稿----简易数字电压表的设计(版本3).docx(18页珍藏版)》请在三一办公上搜索。

1、基于单片机数字电压表的设计 基于单片机数字电压表的设计目录一 设计目的3二 设计要求3三 方案比较与论证33.1 单片机介绍33.2 电源方案63.3 显示方案63.4 AD采样方案73.5 键盘部分7四 方案设计84.1 硬件设计84.2 软件设计9五 性能测试105.1 电压测试105.2 电阻值测试115.3 短路测试115.4 高压报警测试115.5 串口功能测试115.6 时间功能测试115.7 交流峰峰、周期测试11结束语11参考文献13附录14摘要本报告介绍了基于AT89S52单片机为核心的、以AD0809数模转换芯片采样、以1602液晶屏显示的具有电压测量功能的具有一定精度的数

2、字电压表。在实现基础功能要求之上扩展了串口通讯、时钟功能、高压报警、短路测试、电阻测量、交流电压峰峰值和周期测试等功能,使系统达到了良好的设计效果和要求。关键词:AT89S52单片机 模数转换 液晶显示 扩展功能ABSTRACT:The report describes the AT89S52 based on the microcontroller as the core, AD0809 digital-to-analog converter chip sampling, to 1602 LCD display with voltage measurement function with a

3、 certain precision of digital voltage meter. In achieving functional requirements based upon the expansion of serial communications, high-pressure alarm, short circuit, electrical resistivity measurement, AC voltage and the peak of cycle testing and other functions, allowing the system to achieve go

4、od results and the design requirements.Keywords : AT89S52 SCM analog-to-digital conversion functions LCD expansion 一 设计目的自动化专业的专业实践课程。本课程的任务是使学生通过“简易数字电压表的设计”的设计过程,结合所学课程,掌握目前自动化仪表的一般设计过程,锻炼学生的动手能力和分析,解决问题的能力;积累经验,培养按部就班、一丝不苟的工作和对所学知识的综合应用能力。 二 设计要求 1、 可以测量0-5V的8路输入电压值;2、 可在四位LED数码管上轮流显示或单路选择显示或液晶显示

5、;3、 测量最小分辨率为0.019V;4、 测量误差约为+0.02V;5、 带有一定的扩展功能;6、三 方案比较与论证3.1 单片机介绍单片机采用AT89S52,它是一个低功耗,高性能CMOS 8位单片机,片内含8k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S52可为许多嵌入式控制应用系统提供高性价比的解决方案。单片机基础电路如

6、下: 图2 单片机基础电路功能特性概述:40个引脚,8k Bytes Flash片内程序存储器,256 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。此外,AT89S52设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以

7、适应不同产品的需求。引脚功能:VCC:电源电压GND:地P0口:P0口是一组8位漏极开路型双向I/O口,也即地址/数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路,对断口P0写“1”时,可作为高阻抗输入端使用。在访问外部数据存储器或程序存储器时,这组端口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。在FLASH编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。P1口:P1口是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部上拉电阻把端口

8、拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(In)。与AT89C51不同之处是,P1.0和P1.1还可分别作为定时/计数器2的外部计数输入(P1.0/T2)和输入(P1.1/T2EX)。第二功能:P1.0:T2(定时/计数器2外部计数脉冲输入),时钟输出P1.1:T2EX(定时/计数2捕获/重新载触发和方向控制)P2口:P2是一个带内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引

9、脚被外部信号拉低时会输出一个电流(IIL)。在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVXDPTR指令)时,P2口送出高8位地址数据。在访问8位地址的外部数据存储器(如执行MOVXRI指令)时,P2口输出P2锁存器的内容。P3口:P3口是一组带有内部上拉电阻的8位双向I/O口。P3口输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。此时,被外部拉低的P3口将用上拉电阻输出电流。P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能端口引脚 第二功能:P3.0 RXD(串行输入口)P3.1 TXD(串行

10、输出口)P3.2 INT0(外中断0)P3.3 INT1(外中断1)P3.4 TO(定时/计数器0)P3.5 T1(定时/计数器1)P3.6 WR(外部数据存储器写选通)P3.7 RD(外部数据存储器读选通)RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。ALE/PROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。如有必要,可通过对特殊功能寄存

11、器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE禁止位无效。PSEN:程序存储允许PSEN输出是外部程序存储器的读选通信号,当AT89C52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲。在此期间,当访问外部数据存储器,将跳过两次PSEN信号。EA/VPP:外部访问允许。欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。如E

12、A端为高电平(接VCC端),CPU则执行内部程序存储器中的指令。XTAL1:振荡器反相放大器的内部时钟发生器的输入端。XTAL2:振荡器反相放大器的输出端。3.2 电源方案: 由变压器输入7805的1脚,2脚接地,3脚+5V输出,中间加2个104电容和1000u的电解电容分别为了退耦和稳压。使+5V更稳定地输出。下图是电源接线图。 图3 电源接线图3.3 显示方案 方案一:显示部分(采用共阴4位八段数码管显示。如图4所示:) 图4 数码管电路图显示部分与单片机连接图如下图 图5 显示与单片机连接图 3.4 AD采样方案 方案:采用8位AD转换器ADC0809,编程简单方便,价格便宜。采样电路如

13、下图: 图6 ADC0809采样电路 3.5 键盘部分通过程序的扫描,判断按键,并切换到不同的功能模式中。实现模式切换后可以实现电压表单路和循环显示所测电压值。 图7 键盘硬件程序四 方案设计4.1 硬件设计 系统整体电路如下: RS232AD采样AT89S52程序烧录硬件框图:1602液晶显示高压,短路报警ADC0809串口通讯控制键盘 电源电源 电源 图8 系统硬件框图电源部分提供整个系统的电能,单片机部分控制系统,显示部分显示测量结果以及模式状态,模数转换采集电压以及电阻值发送到单片机,如果电压过高超过量程或者测量短路,单片机控制蜂鸣器报警。通过程序烧录模块可以通过烧录线烧入程序。通过串

14、口通讯可以实现上位机与电压表的通讯,通过上位机选择,可以切换电压表模式,从而实现上位机功能选择的功能。4.2 软件设计我们采用C语言编程,通过定时器0计时实现显示时间功能,通过串口中断实现上位机对下位机的模式切换功能。通过键盘扫描和扫描处理函数,实现键盘的模式切换功能。同时我们还设计了浮点数显示处理函数,采样函数,交流采集电压峰峰值函数,显示交流周期和峰峰值函数。这些函数的组合,实现了电压表功能的完善。YYNNYN开始系统初始化显示时间有键按下?模式判断改变系统功能显示串口通讯结束主程序流程图:开始定时器开启显示时间交流采样?采样显示是否计时?结束定时中断流程:图: 五 性能测试5.1 电压测

15、试被测量电路图:图10被测电路图1、 R1=200欧 R2=500欧在测量如图9所示1点的电压的时候,电压表值为1.406V理论值为U=(200/(200+500)*5=1.429V2、R1=4.20K欧 R2=4.28K欧在测量如图所示1点的电压的时候,电压表值为2.089V理论值为U=(4.2/(4.2+4.28)*5=2.476V5.2 电阻值测试 1、100欧姆的电阻,电压表实测为101欧姆。2、200欧姆的电阻,电压表实测为199欧姆。3、4.73K的电阻,电压表实测为4.6347K。4、6.73K的电阻,电压值实测为6.6578K。5、10K的电阻,电压表实测为10.1020K。6

16、、12K的电阻,电压表实测为12.0235K。5.3 短路测试 用白色导线接于IN7,另一端黑色导线接地。当两导线短接时1602显示为0,同时鸣蜂器报警,没有短接时蜂鸣器不报警。5.4 高压报警测试 把单片机接5.5V,鸣蜂器报警。5.5 串口功能测试 打开串口调试软件,按功能键,观察下位机,按1-8切换到各通道的模式,按9是时间模式,按10-13是特殊功能模式,串口功能正常。5.6 时间功能测试 观察时间的即使与显示功能,然后切换功能模式,再切换到时间模式,观察变化,发现时间照常计时,时间功能正常。5.7 交流峰峰、周期测试 由于没有频率信号发生器,此项扩展功能没有展开测试。结束语通过“简易

17、数字电压表的设计”的设计过程,我结合所学过的课程,了解了简易仪表的发展状况,掌握了目前自动化仪表的一般设计要求,工程设计方法,开发及设计工具使用方法,最重要的是通过这一设计实践过程,锻炼了我的动手能力和分析,解决问题的能力,一丝不苟的工作和对所学知识的综合应用能力,我想这样的实践环节在我的学生生涯是很难得的,也为我以后步入社会开始工作打下了一定的基础,最后我也要感谢同学们,只有在他们团结协作下,本次课程设计才可以顺利进行并实现所有功能,同时我也明白了团结协作的重要性。参考文献1余文俊.8051 C语言实习,中国水利水电出版社,02年10月第2版,p50892万福君,潘松峰.单片微机原理系统设计

18、与应用,中国科学技术大学出版社,01年8月第2版,p281503周责魁.控制仪表与计算机控制装置,化学工业出版社,02年9月第1版,p1174李青.电路与电子技术基础,浙江科学技术出版社,05年2月第1版,p12815陈乐.过程控制与仪表,中国计量学院出版社,07年3月,p1176孙育才.新型AT89S52系列单片机及其应用,清华大学出版社,05年5月第1版,p163附录(1)元件清单: AT89S52一片;LED显示屏一块;ADC0809一片;MAX232电平转换芯片一片;7805稳压管一片;键盘3个;开关1个;蜂鸣器一个;C1815三极管一个;500欧姆电阻10个;10K电阻4个;串口借口

19、一个;程序烧录接口一个;1000u电容两个;104电容6个;25PF电容2个;晶振一个;发光二极管一个;排线插针若干;(2)程序清单:#include #include #include #define uchar unsigned char #define uint unsigned int #define Busy 0x80 / 用于检测LCM状态字中的Busy #define LCM_Data P0 / 液晶数据口#define LCM_RS P2_7#define LCM_RW P2_6#define LCM_E P2_5#define ALE P2_4#define START P3

20、_2#define OE P2_3#define EOC P3_3#define A P2_0#define B P2_1#define C P2_2sbit P3_6=P36;sbit P3_5=P35;sbit P3_4=P34;sbit P3_2=P32;sbit P3_3=P33;sbit P2_5=P25;sbit P2_6=P26;sbit P2_4=P24;sbit P2_0=P20;sbit P2_1=P21;sbit P2_2=P22;sbit P2_3=P23;sbit P2_7=P27;uchar data ad;char ch=0;float volt; uchar d

21、ata NDIG; uchar X,Y;bit key1=0,key2=0; uchar code W = good luck ;uchar code hhuc=this is micheal;uchar code tongdao=tongdao : ;uchar code danwei= v ;void delayms(uint n);void WriteDataLCM(uchar WDLCM);void WriteCommandLCM(uchar WCLCM,uBuysC);void CheckBusy_LCM(void);void LCMInit(void);void DisplayOn

22、eChar(uchar X, uchar Y, uchar DData);void DisplayListChar(uchar X,uchar Y, uchar *DData);void disp(uchar xx, uchar yy,float canshu);void nextp(void);void WriteDataLCM(uchar WDLCM) CheckBusy_LCM(); /检测忙 LCM_RS = 1; LCM_RW = 0; LCM_Data = WDLCM; LCM_E = 1; /若晶振速度太高可以在这后加小的延时 _nop_(); _nop_(); _nop_();

23、 LCM_E = 0;void WriteCommandLCM(uchar WCLCM,bit BuysC) /BuysC为0时忽略忙检测 if (BuysC) CheckBusy_LCM(); /根据需要检测忙 LCM_RS = 0; LCM_RW = 0; LCM_Data = WCLCM; LCM_E = 1; /若晶振速度太高可以在这后加小的延时 LCM_E = 1; _nop_(); _nop_(); _nop_(); LCM_E = 0; void CheckBusy_LCM(void) LCM_Data = 0x0FF; LCM_E = 1; LCM_RS = 0; LCM_RW

24、 = 1; _nop_(); _nop_(); _nop_(); while (LCM_Data & Busy); /检测忙信号 LCM_E = 0;/LCM初始化void LCMInit(void) WriteCommandLCM(0x38,0); /三次显示模式设置,不检测忙信号 delayms(5); WriteCommandLCM(0x38,0); delayms(5); WriteCommandLCM(0x38,0); delayms(5); WriteCommandLCM(0x38,1); /显示模式设置,开始要求每次检测忙信号 delayms(5); WriteCommandLC

25、M(0x08,1); /关闭显示 delayms(5); WriteCommandLCM(0x01,1); /显示清屏 delayms(5); WriteCommandLCM(0x06,1); / 显示光标移动设置 delayms(5); WriteCommandLCM(0x0C,1); / 显示开及光标设置 delayms(5); void DisplayOneChar(uchar X, uchar Y, uchar DData) Y &= 0x01; X &= 0x0F; /限制X不能大于15,Y不能大于1 if (Y) X |= 0x40; /当要显示第二行时地址码+0x40; X |=

26、 0x80; /算出地址 WriteCommandLCM(X, 1); /这里不检测忙信号,发送地址码 WriteDataLCM(DData);void DisplayListChar(uchar X, uchar Y, uchar *DData) uchar ListLength; ListLength = 0; Y &= 0x01; X &= 0x0F; /限制X不能大于15,Y不能大于1 while (XNDIG) /若到达字串尾(32)则退出 DisplayOneChar(X, Y, DDataListLength); /显示单个字符 ListLength+; X+; void del

27、ayms(uint n) /延时约n.039n.051ms(0n0;i-);if(P3_5=0)key1=1;while(!P3_5);if(P3_6=0)for(i=5000;i0;i-);if(P3_6=0)key2=1;while(!P3_6);void key_Process(void)if(key1)ch+;key1=0;if(key2)ch-;key2=0;if(ch7)ch=0;if(ch0;j-) delayms(20); WriteCommandLCM(0x01,1); NDIG=strlen(tongdao); DisplayListChar(0, 0, tongdao); NDIG=strlen(danwei); DisplayListChar(0, 1, danwei); while(1) key_scan(); key_Process(); read_ad(ch); disp(10, 1,volt); 18

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号