单片机课程设计说明书
题 目:基于ATC51单片机数字电压表的设计
院 系:工院机械系 班 级: 11机电三班 姓 名: 吴 豪 学 号:1101050114 指导老师:朱煜钰
黄河科技学院课程设计任务书
1
-
工 学院 机械 系 机械设计制造及其自动化 专业 11 级 3 班 学号 1101050114 姓名 吴豪 指导教师 朱煜钰
题目: 基于ATC51单片机的数字电压表设计 课程: 单片机应用技术课程设计 课程设计时间 2014年 10月27 日 至2014年11 月 10 日 共 2 周
课程设计工作内容与基本要求(设计要求、设计任务、工作计划、所需相关资料)(纸张不够可加页) 1.设计要求
⑴以MCS-51系列单片机为核心器件,组成一个简单的直流数字电压表。 ⑵采用1路模拟量输入,能够测量0-5V之间的直流电压值。 ⑶电压显示用4位一体的LED数码管显示,至少能够显示两位小数。 ⑷尽量使用较少的元器件。 2. 设计任务与要求 2.1系统硬件电路设计
根据该系统设计的功能要求选择所用元器件,设计硬件电路。要求用Proteus绘制整个系统电路原理图。 2.2软件设计
根据该系统要求的功能进行软件设计,绘制整个系统的软件流程图;根据流程图编写程序并汇编调试通过;列出软件清单,软件清单要求逐条加以注释。 2.3 Proteus仿真
用Proteus对系统软硬件进行仿真调试并通过。 2.4 编写设计说明书
内容包括任务书、设计方案分析、硬件部分设计、软件部分设计、调试结果整理分析、设计调试的心得体会等,字数不少于5000字;硬件部分设计要绘制整个系统电路原理图,对各部分电路设计原理做出说明;软件设计部分要(用visio2003画图软件)绘制整个系统框图及各部分的软件流程图,列出程序清单,逐条加以注释,并注明各程序功能块的功能。 2
-
3.工作计划
序号 1 3 4 4.主要参考资料
单片机课程设计指导书 皮大能 北京理工大学出版社 2012.7 8051单片机实践与应用 吴金戎 清华大学出版社 2003.8 单片机技术基础教程与实践 夏路易 电子工业出版社 2008.1 单片机原理及应用 张毅刚 高等教育出版社 2012.11 基于Proteus的单片机系统设计与仿真实例 蒋辉平 机械工业出版社 2007.7 …
指导老师签字: 日 期:
设计内容 布置任务及调研 制作与调试 撰写设计报告书 合 计 所用时间 4天 8天 2天 14天
3
-
目 录
二、 模块分析 ................ 5
1.
2. 3.
ATC51单片机 ......................................................................................................... 5 A/D转换 ....................................................................................................................... 6 显示电路 ..................................................................................................................... 7
三、 软件设计 ................ 8 五、 仿真实验调试 ........... 15 六、 总结与体会 ............. 16
一、 整体设计思路框图及原理图
数字电压表的设计即将连续的模拟电压信号经过A/D转换器转换成二进制数值,再经由单片机软件编程转换成十进制数值并通过显示屏显示。
按系统实现要求,决定控制系统采用ATC51单片机,A/D转换由于仿真软件里的ADC0809元件有问题,这里用ADC0808代替,它和ADC0809区别很小。 采用ADC0808。数字电压表系统整体框图如下图1所示。
4
-
模拟电 压 ADC0808 转换 ATC51 单 片 机 数据显 示
图1 整体框图
系统通过软件设置单片机的内部定时器T1产生中断信号。通过片选选择8路通道中的一路,将该路电压送入ADC0808的EOC端口产生高电平,同时将ADC0808的OE端口置为高电平,单片机将转换后结果存到片内RAM。系统调出转换显示程序,将转换为二进制的数据在转换成十进制数并输出到LCD显示电路,将相应电压显示出来。
原理图见附录图7。
二、 模块分析
1. ATC51单片机
接口分配电路设计如右图2所示: P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为输入。P0能够用于外部程序数据存储器,它可以被定义为数据/ 地址的第八位。在这里P0口作为输入与输出分别与ADC0808的输出端和LCD显示的输入端相连,且P0
5
图2 单片机接口电路
-
外部被阻值为1KΏ的电阻拉高。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。这里只用到了P2.0~P2.3四个端口,其中P2.1~P2.3都是作为输出端口控制显示电路的寄存器选择、读写信号和使能端口。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为ATC51的一些特殊功能口,在这里用到了P3.3 /INT1(外部中断1)、 P3.6 /WR(外部数据存储器写选通)、P3.7 /RD(外部数据存储器读选通)。
2. A/D转换
接口分配电路设计如图3所示: IN0~IN7为8路模拟量输入端,这里只接一路电压信号,其输入信号是由直流电源及可调电阻提供。
OUT1~OUT8为8位二进制数字量输出端,其另一端连接到ATC51单片机进行数值转换。
ADDA、ADDB、ADDC为3位片选地址输入线,用于选通8路
6
图3 A/D转换电路
-
模拟输入中的一路。
ALE为地址锁存允许信号,由单片机P3.6口写信号与P2.0口相或取反输入,高电平有效。
START为 A/D转换启动脉冲输入端,由单片机P3.6口写信号与P2.0口相或取反输入一个正脉冲使其启动(脉冲上升沿使0808复位,下降沿启动A/D转换)。
EOC为 A/D转换结束信号,当A/D转换结束时,此端输出一个高电平取反给P3.3口(转换期间一直为低电平)。
OE为数据输出允许信号,高电平有效。当A/D转换结束时,此端由单片机P3.7读信号与P2.0口相或后取反输入一个高电平,才能打开输出三态门,输出数字量。
3. 显示电路
接口分配设计如图4所示: RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。由单片机P2.1口控制
R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电 平R/W为低电平时可以写入数据。由单片机P2.2口控制
E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。由单片机P2.3口控制
D0~D7为8位双向数据线。由单片机P0口输入,经过阻值为1KΏ的上拉电阻连接。
7
图4 显示电路
-
三、 软件设计
主程序的内容包括:起始 地址、中断服务程序的起始地 址、有关内存单元及相关部件的 初始化和一些子程序的调用等。 根据设计要求,设计出如图5所 示的主程序流程图
A/D转换子程序设计: A/D转
图5 程序流程图
换程序的功能是采集数据,在整个系统设计中占有很高的地位。当系统置好后,单片机扫描转换结束管脚P3.7的输入电平状态,当输入为高电平则转换完成,将转换的数值显示输出。若输入为低电平,则继续扫描。程序流程图如图6所示。
8
-
四、 程序清单
COM EQU 50H ; 指令寄存器 DAT EQU 51H ; 数据寄存器
RS EQU P2.1 ; LCD寄存器选RW EQU P2.2 ; LCD读/写选E EQU P2.3 ; LCD使能信号 图6 A/D转换子程序流程图
ORG 0000H
LJMP MAIN ; 主程序入口 ORG 000BH
LJMP BT0 ; T0中断入口
ORG 0030H; 主程序,初始化 MAIN: MOV SP,#60H LCALL INT MOV 30H,#30H MOV 31H,#30H MOV 32H,#0A5H
9
择信号择信号
-
MOV 33H,#30H MOV 34H,#30H MOV R7,#30H
LCALL N1 ; 显示 Voltage = 00.00
MOV TMOD,#00H; 定时器T0设为方式0 MOV TH0,#00h; 装入定时常数 MOV TL0,#00h
SETB TR0 ; 启动T0
MOV 24h, #03h; 装入T0中断次数 MOV IE,#82H; 开中断
LP: MOV R7,#30H; 显示缓冲区首地址 LCALL DISPLY
SJMP LP; 循环显示
DISPLY:
MOV COM,#0CAH; 设置数据起始地址(第而行第10位) LCALL PR1 MOV R1,#05H MOV R0,#30H l: MOV DAT,@r0 LCALL PR2 INC R0 DJNZ R1,l RET
;1. 逐字依次输入方式演示程序段 N1:MOV COM,#01H; 清屏 LCALL PR1
MOV COM,#06H ; 设置输入方式 LCALL PR1
MOV COM,#081H; 设置数据起始地址(第一行地二位) LCALL PR1 MOV DPTR,#TAB1 MOV R2,#0EH MOV R3,#00H WRIN1: MOV A,R3
MOVC A,@A+DPTR
10
-
MOV DAT,A LCALL PR2 INC R3
DJNZ R2,WRIN1
MOV COM,#0C1H; 设置数据起始地址(第二行地二位) LCALL PR1 MOV DPTR,#TAB2 MOV R2,#9 MOV R3,#00H WRIN2: MOV A,R3
MOVC A,@A+DPTR MOV DAT,A LCALL PR2 INC R3
DJNZ R2,WRIN2 RET
TAB1: DB \"VOLTAGE= \" ; LCD间接控制方式下的初始化子程序 INT:
LCALL DELAY ; 调延时子程序
MOV COM,#38H ; 设置工作方式(2行,8位数据) LCALL PR1
MOV COM,#01H ; 清屏 LCALL PR1
MOV COM,#06H ; 设置输入方式 LCALL PR1
MOV COM,#0CH ; 设置显示方式 LCALL PR1 RET
DELAY:MOV R6,#0FH ; 延时子程序 MOV R7,#00H DELAY1: NOP NOP DJNZ R7,DELAY1 DJNZ R6,DELAY1 RET
LCD间接控制方式的驱动子程序如下
11
-
1 读BF和AC值 PR0: PUSH ACC
MOV P0,#0FFH ; P0置位, 准备读 CLR RS ; RS=0 SETB RW; R/W=1 SETB E ; E=1 LCALL DELAY
MOV COM,P0 ; 读BF和AC6-4值 CLR E ; E=0 POP ACC RET
2 写指令代码子程序 PR1: PUSH ACC CLR RS ; RS=0 SETB RW ; R/W=1
PR11:MOV P0,#0FFH; P0置位, 准备读 SETB E ; E=1 LCALL DELAY NOP MOV A,P0 CLR E
JB ACC.7,PR11;BF=1? CLR RW; R/W=0 MOV P0,COM SETB E ; E=1 CLR E ; E=0; E=0 POP ACC RET
3 写显示数据子程序 PR2:PUSH ACC CLR RS ; RS=0 SETB RW; R/W=1 PR21:MOV P0,#0FFH SETB E ; E=1 LCALL DELAY
MOV A,P0 ; 读BF和AC6-4值 CLR E ; E=0 JB ACC.7,PR21
12
-
SETB RS CLR RW
MOV P0,DAT; 写入数据 SETB E CLR E POP ACC RET
4 读显示数据子程序 PR3:PUSH ACC CLR RS ; RS=0 SETB RW; R/W=1
PR31:MOV P0,#0FFH ; P0置位, 准备读 SETB E ; E=1 LCALL DELAY
MOV A,P0 ; 读BF和AC6-4值 CLR E ; E=0 JB ACC.7,PR31 SETB RS SETB RW; R/W=1 MOV P0,#0FFH ; 读数据 SETB E ; E=1 MOV DAT,P0 CLR E ; E=0 POP ACC RET
定时器T0中断服务程序,读取ADC0809第0通道的A/D转换结果并化为显示值 BT0: PUSH ACC ; 保护现场
PUSH PSW MOV PSW,#08H
CLR TR0 ; 停止T0 MOV TH0,#00h ; 重装定时常数 MOV TL0,#00h
MOV DPTR,#0F6FFH ; 0809端口地址 MOV A,#0 ; 0通道 MOVX @DPTR,A ; 启动0809 MOV R7,#0FFH ; 等待A/D转换完 DJNZ R7,$
MOVX A,@DPTR ; 读0809转换结果
13
-
MOV B,#03H ; 将转换的值除以3再累加,存入40H中 DIV AB ADD A,40H MOV 40H,A
MOV A,B ; ;将除以3后的余数累加放入41H中 ADD A,41H MOV 41H,A
DEC 24h ; 3次中断未到则返回
MOV A,24H JNZ RNT1
MOV 24h,#03h; MOV A,41H; DIV AB ADD A,40H
MOV 40H,#0; MOV 41H,#0
RTN: MOV B,#0fh; MUL AB ;
MOV @R0,A MOV A,B MOV B,@R0 MOV R0,A ADD A,#246 MOV A,R0 MOV 30H,#00H JNC LOOP ADD A,#06H MOV 30H,#01H LOOP:
MOV 31H,A ; MOV A,B MOV B,#0AH
MUL AB ; MOV 33H,B; MOV B,#0AH MUL AB MOV 34H,B LJMP RTN1
14
重装中断次数
将累加的余数再除3后相加 清零累加数 A/D转换结果化为显示值 (AD*5)/256 AD*5的高字节为整数部分 AD*5的低字节为/256的结果,为小数部分 二进制小数换为10进制数 -
RTN1: SETB TR0 ORL 30H,#30H ORL 31H,#30H
MOV 32H,#0A5H; 小数点 ORL 33H,#30H ORL 34H,#30H POP PSW POP ACC RETI END
五、 仿真实验调试
1.打开WAVE 6000 软件,菜单栏选择“文件”中的“新建文件”,在弹出的窗口中编写程序,然后保存后缀为“***.asm”的程序。
2.菜单栏选择“项目”中的“编译”,如果程序无误即编译成功,否则修改程序直至编译成功。
3.打开Proteus软件,新建文件File→New Design,同样在弹出的原理图编辑窗口中绘制原理图,然后保存。
4.加载程序,选择Source→Add/Remove Source Files,在弹出的对话框中点击“New”选择在WAVE 6000软件中编写保存的程序如“***.asm”,点击“OK”即加载成功。
5.在Proteus软件中的左下方点击图标调试的结果。
15
仿真调试开始,即可看到仿真
-
六、 总结与体会
这虽然是一个数字电压表的设计但是实际上就是一个数据采集的程序设计,只不过这里数据采集的是模拟电压罢了。虽然这个单片机的课题比较简单,但是从中我还是学到了许多新东西。在之前的学习过程中没有用到Proteus这个
16
-
软件,所以刚刚开始的时候一边在百度里看Proteus入门教程一边实践操作Proteus这个软件,不过幸好以前学过Protell 99绘图软件,举一反三的在短时间内把Proteus磕磕碰碰学会了。想想我们在大学里速学软件还是比较有心得:在一两天内只学这个软件,或许还算不上熟练但是入门还是可以了。
在Proteus软件部分的设计中也让我感受良多。以前做的单片机的设计都只是写写程序,下载到单片机上运行,都只是编程方面的工作,很少涉及选择单片机试验台上已有芯片以外的芯片,更不用说芯片的一些管脚作用。就像A/D转换器在Proteus中仿真软件ADC0809有问题所以用ADC0808代替。而且ADC0808是单极性,输入电压范围为0~+5V,而我们课题要求的是0~+15V,所以我利用参考电压可以达到15V这一点把0~+15V转化成0~5V,进行模数转换。
在局部电路图中遇到很多问题,通过查阅大量资料以及老师和同学的帮助讲解才逐渐懂得如何应用。如在Proteus软件中仿真选用了最常用的直流电压电源和可调电阻组成0~+15V的模拟电压,而在试验台上可以直接连接可调电压源。这种方法是平时很少注意到的基础性知识运用,在这次的课程设计中让我又有了新的收获。
总的来说结果还是完成了设计任务,虽然整个过程有点不在状态,但还是温故而知新,对单片机有了一种新的认识。
17
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8
违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务