单片机的数字电压表课程设计_第1页
单片机的数字电压表课程设计_第2页
单片机的数字电压表课程设计_第3页
单片机的数字电压表课程设计_第4页
单片机的数字电压表课程设计_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机课程设计单片机课程设计 题题 目:目: 基于单片机的数字电压表基于单片机的数字电压表 学院名称:学院名称: 电气工程学院电气工程学院 指导老师:指导老师: 班班 级:级: 学学 号:号: 学生姓名:学生姓名: 20102010 年年 1212 月月 3131 日日 2 单片机课程设计任务书单片机课程设计任务书 1课程设计的内容和要求(包括原始数据、技术要求、工作要求 等): 一、设计电压测量电路 数字式电压表是电压测量的常用仪表,本课题即要求应用单片机、a/d 转 换器及其他器件组成数字式电压检测仪表。 二、主要技术指标与要求: 被测电压可数字显示; 测量电压范围为 05v,精度为1v;

2、 电压连续可调, 电压超出测量范围时,报警信号。 三设计思路 首先要对该设计进行分析,用 protel99 将该电路的原理图绘出, 然后用汇编语言编写出程序并画出流程图,再用仿真软件进行仿真调试, 最后仿真通过,记录仿真结果。 2对课程设计成果的要求包括图表、实物等硬件要求: 设计电路,安装调试或仿真,分析实验结果,并写出设计说明书。 要求图纸布局合理,符合工程要求,所有的器件的选择要有计算依据。 3 四主要参考文献 1 何立民. 单片机高级教程,m. 北京:北京航空航天大学出 版社,2007 2 何立民. 单片机应用系统设计,m.北京:北京航空航天大学 出版社,1990 3 何立民. 单片机

3、应用技术选编 17,m.北京:北京航空航天 大学出版社,19931999 4 杭和平. 单片机原理与应用m. 北京:机械工业出版社, 2008 5 楼然苗. 51 系列单片机设计实例m. 北京:北京航空航天大 学出版社,2003 6 龙泽明. mcs-51 单片机原理及工程应用m.国防工业出版社, 2005 五课程设计工作进度计划 序 号 起 迄 日 期工 作 内 容 1 2010-12-20布置任务,教师讲解设计方法及要 求 22010-12-21学生查找阅读资料,并确定方案 32010-12-22学生讨论方案 42010-12-23设计及计算 52010-12-242010-12-29 制

4、作实物并写说明书 62010-12-30答辩 72010-12-31答辩 主指导教 师 日期: 2010 年 12 月 20 日 4 基于单片机的数字电压表的设计 内容摘要:内容摘要: 本次设计主要解决 a/d 转换、数据处理及显示键盘控制等模块。控制系统采用 at89s52 单片机,a/d 转换采用 adc0809。显示采用 4 位 led 显示数码管的具有 电压测量功能的具有一定精度的数字电压表。简易数字电压表可以测量 05v 的 3 路输入电压值,并在四位 led 数码管上轮流显示或单路选择显示。 关键词:关键词: a/d 转换 显示电路 at89s51 单片机 键盘电路 仿真 引言:引

5、言: 数字电压表是采用数字化测量技术,把连续的模拟量(直流输入电压)转换成 不连续、离散的数字形式并加以显示的仪表。传统的指针式电压表功能单一、 精度低,不能满足数字化时代的需求,采用单片机的数字电压表,由精度高、 抗干扰能力强,可扩展性强、集成方便,还可与 pc 进行实时通信。目前,由各 种单片 a/d 转换器构成的数字电压表,已被广泛用于电子及电工测量、工业自 动化仪表、自动测试系统等智能化测量领域,示出强大的生命力。与此同时, 由 dvm 扩展而成的各种通用及专用数字仪器仪表,也把电量及非电量测量技术 提高到崭新水平。本文重点介绍单片 a/d 转换器以及由它们构成的基于单片机 的数字电压

6、表的工作原理。 5 一、一、 设计方案的制定和最优选择设计方案的制定和最优选择 .2 2 1.1 设计要求 .2 1.2 显示元件的选择 .2 1.3 模数转换器的选择 .2 1.3 单片机的选择 .3 二、二、 系统总体设计及其原理图系统总体设计及其原理图 .5 5 2.1 系统总体设计框图 .5 2.2 单片机系统.5 2.3 ad 转换电路.7 2.4 信号调理模块.8 三、三、 软件设计与流程软件设计与流程.1111 3.1 程序设计流程图 .11 3.2 各模块的程序 .13 33 软件的调试 .15 3.4keilc 的简介.15 四、总结四、总结.1616 附录一附录一.1717

7、 6 一、设计方案的制定和最优选择设计方案的制定和最优选择 1.1 设计要求 (1)电压测量范围 0-5v; (2)能用数码管显示电压值; (3)测量精度达 0.1v; (4)要求系统具备复位功能; 1.2 显示元件的选择 可供选择的元件主要有液晶、点阵显示器和数码管等三种,基于经济,技 术难度等方面的客观原因,采用数码管显示,数码管显示技术较为简单,掌握 的比较熟练,且作为本设计的备选部件,能够完全符合设计的要求,故采用数 码管显示数字 1.3 模数转换器的选择 我们选型的时候一般需要考虑以下一些参数: 确定 a/d 转换器的精度:精度是反映转换器的实际输出接近理想输出的精确程 度的物理量。

8、 分辩率(resolution) 指数字量变化一个最小量时模拟信号的变化量,定义为满 刻度与 2n 的比值。分辩率又称精度,通常以数字信号的位数来表示。 量化误差 (quantizing error) 由于 ad 的有限分辩率而引起的误差,即有限分 辩率 ad 的阶梯状转移特性曲线与无限分辩率 ad(理想 ad)的转移特性曲线 (直线)之间的最大偏差。通常是 1 个或半个最小数字量的模拟变化量,表示 为 1lsb、1/2lsb。 在转化过程中,由于存在量化误差和系统误差,精度会有所损失。其中量化误 差对于精度的影响是可计算的,它主要决定于 a/d 转换器件的位数。 选择 a/d 转换器的转换速

9、率 转换速率(conversion rate)是指完成一次从模拟转换到数字的 ad 转换所需的 时间的倒数。采样时间则是另外一个概念,是指两次转换的间隔。为了保证转 换的正确完成,采样速率(sample rate)必须小于或等于转换速率。常用单位是 ksps 和 msps,表示每秒采样千/百万次。 选择合适的量程 模拟信号的动态范围较大,有时还有可能出现负电压。在选择时,待测信号的 动态范围最好在 a/d 器件的量程范围内。 选择 a/d 器件的输出接口 a/d 器件接口的种类很多,有并行总线接口的,有 spi、i2c、1-wire 等串行总 线接口的。它们在原理和精度上相同,但是控制方法和接

10、口电路会有很大差异。 7 选择 a/d 器件的通道数和封装 这与系统有关,通道数要满足整个采集系统的需要。封装则决定 pcb 布板的时 候的大小,而且在高速应用的时候也影响连线的分布参数。 选择 a/d 器件温度范围 这仅仅与一些苛刻的环境有关,注意每个 ad 有固定的应用的温度范围。 综上标准,结合本次设计,选择芯片 adc0809 来作为 a/d 转换器,adc0809 是一块 8 路 8 位模数转换芯片,将模拟电路和数字电路集成在一个用 28 个功能 端的电路内,包含了 a/d 转化、逻辑控制、译码驱动等电路,其转换时间为 100s 左右,符合作品 8 路采集要求且电路设计简单,电路板布

11、线不复杂,便 于焊接、调试。 1.3 单片机的选择 因为在上单片机课的时候是以 51 单片机为模板学习的,故选择 at89s52 单 片机来进行设计。 at89s52 at89s52 是一种低功耗、高性能 cmos8 位微控制器,具有 8k 在系统可编程 flash 存储器。使用 atmel 公司高密度非易失性存储器技术制造,与工业 80c51 产品指令和引脚完全兼容。片上 flash 允许程序存储器在系统可编程, 亦适于常规编程器。在单芯片上,拥有灵巧的 8 位 cpu 和在系统可编程 flash,使得 at89s52 为众多嵌入式控制应用系统提供高灵活、超有效的解决方 案。 at89s52

12、 引脚图 p0 口是一个 8 位漏极开路的双向 i/o 口。作为输出口,每位能驱动 8 个 ttl 逻 8 辑电平。对 p0 端口写“1”时,引脚用作高阻抗输入。 当访问外部程序和数据存储器时, p0 口也被作为低 8 位地址/数据复 用。在这种模式下, p0 不具有内部上拉电阻。 在 flash 编程时,p0 口也用来接收指令字节;在程序校验时,输出指 令字节。程序校验 时,需要外部上拉电阻。 p1 口:p1 口是一个具有内部上拉电阻的 8 位双向 i/o 口,p1 输出 缓冲器能驱动 4 个 ttl 逻辑电平。对 p1 端口写“1”时,内部上拉电阻把端口拉高,此 时可以作为输入 口使用。作

13、为输入使用时,被外部拉低的引脚由于内部电阻的原因,将 输出电流(iil) 。 此外,p1.0 和 p1.1 分别作定时器 /计数器 2 的外部计数输入 (p1.0/t2)和定时器/计数器 2 的触发输入( p1.1/t2ex) ,具体如下表所示。 在 flash 编程和校验时, p1 口接收低 8 位地址字节。 引脚号第二功能 p1.0 t2(定时器/计数器 t2 的外部计数输入),时钟输出 p1.1 t2ex(定时器/计数器 t2 的捕捉/重载触发信号和方向控制) p1.5 mosi(在系统编程用) p1.6 miso(在系统编程用) p1.7 sck(在系统编程用) p2 口:p2 口是一

14、个具有内部上拉电阻的 8 位双向 i/o 口,p2 输出 缓冲器能驱动 4 个 ttl 逻辑电平。对 p2 端口写“1”时,内部上拉电阻把端口拉高,此 时可以作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将 输出电流(iil) 。 在访问外部程序存储器或用 16 位地址读取外部数据存储器(例如执行 movx dptr) 时,p2 口送出高八位地址。在这种应用中, p2 口使用很强的内部上 拉发送 1。在使用 8 位地址(如 movx ri)访问外部数据存储器时, p2 口输出 p2 锁存 器的内容。 在 flash 编程和校验时, p2 口也接收高 8 位地址字节和一些

15、控制信号。 p3 口:p3 口是一个具有内部上拉电阻的 8 位双向 i/o 口,p3 输出 9 缓冲器能驱动 4 个 ttl 逻辑电平。对 p3 端口写“1”时,内部上拉电阻把端口拉高,此 时可以作为输入 口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将 输出电流(iil) 。 p3 口亦作为 at89s52 特殊功能(第二功能)使用,如下表所示。 在 flash 编程和校验时, p3 口也接收一些控制信号。 端口引脚 第二功能 p3.0 rxd(串行输入口) p3.1 txd(串行输出口) p3.2 into(外中断 0) p3.3 int1(外中断 1) p3.4 to(定时

16、/计数器 0) p3.5 t1(定时/计数器 1) p3.6 wr(外部数据存储器写选通 ) p3.7 rd(外部数据存储器读选通 ) 此外,p3 口还接收一些用于 flash 闪存编程和程序校验的控制信号。 rst复位输入。当振荡器工作时, rst 引脚出现两个机器周期以上 高电平将是单片机复位。 ale/prog当访问外部程序存储器或数据存储器时, ale(地址锁存允许) 输出脉冲用于锁存地址的低 8 位字节。一般情况下, ale 仍以时钟振荡频 率的 1/6 输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要 注意的是:每当访问外部数据存储器时将跳过一个ale 脉冲。 对 fla

17、sh 存储器编程期间,该引脚还用于输入编程脉冲( prog) 。 如有必要,可通过对特殊功能寄存器( sfr)区中的 8eh 单元的 d0 位 置位,可禁止 ale 操作。该位置位后,只有一条 movx 和 movc 指令才能将 ale 激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置 ale 禁止位无效。 psen程序储存允许( psen)输出是外部程序存储器的读选通信号, 当 at89s52 由外部程序存储器取指令(或数据)时,每个机器周期两次 psen 有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两 次 psen 信号。 ea/vpp外部访问允许,欲使 cpu

18、 仅访问外部程序存储器(地址为 0000h-ffffh) ,ea 端必须保持低电平(接地)。需注意的是:如果加密位 lb1 被编程,复位时内部会锁存 ea 端状态。 如 ea 端为高电平(接 vcc 端) ,cpu 则执行内部程序存储器的指令。 flash 存储器编程时,该引脚加上 +12v 的编程允许电源 vpp,当然这 必须是该器件是使用 12v 编程电压 vpp。 xtal1:振荡器反相放大器和内部时钟发生电路的输入端。 10 xtal2:振荡器反相放大器的输出端。 一、一、 系统总体设计及其原理图系统总体设计及其原理图 2.1 系统总体设计框图 本系统采用 at89s52 单片机作为控

19、制核心,以 adc0809 为数据采样系统,实现 被测电压的数据采样;使用系列比较器检测输入电压的范围,用共阴极数码管 显示结果。 2.2 单片机系统 单片机最小系统包括复位电路,晶振电路,电源电路,仿真时需搭建复位 电路和晶振电路。 晶振电路: 图 图 1.1 单片机最小系统如下所示,其中 p1 口用于驱动数码管,p0 口用于接收 adc0809 转换的数据。p2 口用于控制 adc0809。 输入电压 51 单片机 极性检测 电压检测 显示电路 ad 转换 11 单片机最小系统: 2.3 ad 转换电路 利用 adc0809 作为 ad 数据采样器件, adc0809 是 cmos 单片型

20、逐次逼近式 ad 转换器它由 8 路模拟开关、地址锁存与译码器、比较器、8 位开关树型 da 转 换器、逐次逼近。adc0809 的工作过程是:首先输入 3 位地址,并使 ale=1,将 地址存入地址锁存器中。此地址经译码选通 8 路模拟输入之一到比较器。start 上升沿将逐次逼近寄存器复位。下降沿启动 ad 转换,之后 eoc 输出信号变 低,指示转换正在进行。直到 ad 转换完成,eoc 变为高电平,指示 ad 转 换结束,结果数据已存入锁存器,这个信号可用作中断申请。当 oe 输入高电平 时,输出三态门打开,转换结果的数字量输出到数据总线上。 adc0809 各个管教功能: in0in

21、7:8 路模拟量输入端。 12 2-12-8:8 位数字量输出端。 adda、addb、addc:3 位地址输入线,用于选通 8 路模拟输入中的一路 ale:地址锁存允许信号,输入,高电平有效。 start: ad 转换启动信号,输入,高电平有效。 eoc: ad 转换结束信号,输出,当 ad 转换结束时,此端输出一个高 电平(转换期间一直为低电平) 。 oe:数据输出允许信号,输入,高电平有效。当 ad 转换结束时,此端输 入一个高电平,才能打开输出三态门,输出数字量。 clk:时钟脉冲输入端。要求时钟频率不高于 640khz。 ref(+) 、ref(-):基准电压。 vcc:电源,单一5

22、v。gnd:接地。 adc0809 与单片机的连接。 x1 crystal c1 30pf c2 30pf r1 1k c3 10uf +5v xtal2 18 xtal1 19 ale 30 ea 31 psen 29 rst 9 p0.0/ad0 39 p0.1/ad1 38 p0.2/ad2 37 p0.3/ad3 36 p0.4/ad4 35 p0.5/ad5 34 p0.6/ad6 33 p0.7/ad7 32 p1.0 1 p1.1 2 p1.2 3 p1.3 4 p1.4 5 p1.5 6 p1.6 7 p1.7 8 p3.0/rxd 10 p3.1/txd 11 p3.2/in

23、t0 12 p3.3/int1 13 p3.4/t0 14 p3.7/rd 17 p3.6/wr 16 p3.5/t1 15 p2.7/a15 28 p2.0/a8 21 p2.1/a9 22 p2.2/a10 23 p2.3/a11 24 p2.4/a12 25 p2.5/a13 26 p2.6/a14 27 u1 at89c51 2 -1msb 21 add b 24 add a 25 add c 23 vref(+) 12 vref(-) 16 in3 1 in4 2 in5 3 in6 4 in7 5 start 6 2 -5 8 eoc 7 output enable 9 clock

24、 10 vcc 11 2 -2 20 gnd 13 2 -7 14 2 -6 15 2 -8lsb 17 2 -4 18 2 -3 19 in2 28 in1 27 in0 26 ale 22 u2 adc0809 +5v 2.4 信号调理模块 该部分主要实现的功能是自动量程切换和电压变换,模块主要由电压极性检测 电路、电压范围粗测电路、电压变换电路三部分组成。 电压极性检测电路 13 电压极性检测电路采用过零比较器检测负电压的方式实现的,运算放大器 lm324 的反向端接地,同向端通过 100k 电阻接输入信号。 电压范围粗测电路 为了粗略地得到被测量的电压范围我们采用多组比较器的方式,通过

25、阶梯 式比较的方法确定输入电压的范围 量程切换电路 电路由衰减电阻、切换继电器和运算放大器组成,对应的是衰减 1/2、1/3、1/4 和无零漂放大 50 倍,切换电路如图所示。电压变换到 0-5v 标 准信号后,再由 a/d 转换进行采样,最后由单片机算法还原。 总体原理图及其接线 14 硬件连线: (1) 把“单片机系统”区域中的p1.0p1.7与“动态数码显示”区域中的 abcdefgh端口用8芯排线连接。 (2) 把“单片机系统”区域中的p2.0p2.7与“动态数码显示”区域中的 s1s2s3s4s5s6s7s8端口用8芯排线连接。 (3) 把“单片机系统”区域中的p3.0与“模数转换模

26、块”区域中的st端子用 4.导线相连接。 (4) 把“单片机系统”区域中的p3.1与“模数转换模块”区域中的oe端子用 导线相连接。 (5) 把“单片机系统”区域中的p3.2与“模数转换模块”区域中的eoc端子 用导线相连接。 (6) 把“单片机系统”区域中的p3.3与“模数转换模块”区域中的clk端子 用导线相连接。 15 (7) 把“模数转换模块”区域中的a2a1a0端子用导线连接到“电源模块”区 域中的gnd端子上。 (8) 把“模数转换模块”区域中的in0端子用导线连接到“三路可调电压模 块”区域中的vr1端子上。 (9) 把“单片机系统”区域中的 p0.0p0.7 用 8 芯排线连接

27、到“模数转换 模块”区域中的 d0d1d2d3d4d5d6d7 端子上。 二、二、 软件设计与流程软件设计与流程 3.1 程序设计流程图 主程序的流程图 主程序流程图 显示子程序流程图 显示子程序采用动态扫描法实现四位数码管的数值显示。测量所得的 a/d 转换 数据放在 70h77h 内存单元中,测量数据在显示时需转换成 10 进制 bcd 码放在 78h7bh 单元中,其中 7bh 存放通道标志数。寄存器 r3 用作 8 路循环控制,r0 用作显示数据地址指针。 开始 初始化 调用 a/d 转换子程序 调用显示子程序 16 显示子程序流程图 模/数转换测量子程序 流程图 模/数据转换测量子程

28、序用来控制对 0809 八路模拟输入电压的 a/d 转换,并将 对应数 70h77 h 内存单元。 17 启动测试 n 取数据(p2.5=1) 0809地址加1 开始 结束 a/d转换结束? 地址数小于8? n y y a/d 转换流程图 3.2 各模块的程序 主程序 start: lcall clearmemio ;初始化 main:lcall test ;测量一次 lcalldisplay ;显示数据一次 ajmp main nop ;pc 值出错处理 nop nop ljmp start 显示子程序: org 0 sjmp $ test:clra ;模/数转换子程序 movp2,a mo

29、vr0,#70h ;转换值存放首址 movr7,#03h ;转换 8 次控制 lcalltestart ;启动测试 wait:jbp3.2,movd ;等 a/d 转换结束信号 ajmp wait 18 testart:setbp2.3 ;测试启动 nop nop clrp2.3 setb p2.4 nop nop clrp2.4 nop nop nop nop ret movd: setb p2.5 ;取 a/d 转换数据 mova,p0 movr0,a clrp2.5 incr0 mova,p2 ;通道地址加 1 inca movp2,a cjne a,#03h,testend ;等 8

30、路 a/d 转换结束 testend:jc testcon clra ;结束恢复端口 movp2,a mova,#0ffh movp0,a movp1,a movp3,a ret testcon:lcalltestart ljmpwait end a/d 转换程序: unbcd: mov a,r0 ;255/51=5.00v 运算 movb,#51 divab mov7ah,a ;个位数放入 7ah mova,b ;余数大于 19h,f0 为 1,乘法溢出,结 果加 5 clrf0 subb a,#1ah 19 movf0,c mova,#10 mulab movb,#51 divab jbf

31、0,loop2 adda,#5 loop2:mov 79h,a ;小数后第一位放入 79h mova,b clrf0 subb a,#1ah movf0,c mova,#10 mulab movb,#51 divab jb f0,loop3 adda,#5 loop3: mov78h,a;小数后第二位放入 78h ret 33 软件的调试 软件调试的任务是利用开发工具 keil c51 进行在线仿真调试,发现和纠正 程序的错误,同时也能发现硬件的故障。软件调试是一个模块一个模块进行的。 首先单独调试各子程序是否能够按照预期的功能,接口电路的控制是否正常。 最后调试整个程序。尤其注意的是各模块间

32、能否正确的传递参数。 1. 检查 led 显示模块程序。观察在 led 上是否能够显示相应的字符。 2. 检查按键模块程序。 3所有程序运行正常后,在这个程序中加入中断延时 50ms。 3.4keilc 的简介 keil 软件是目前最流行开发 mcs-51 系列单片机的软件,这从近年来各仿 真机厂商纷纷宣布全面支持 keil 即可看出。keil 提供了包括 c 编译器、宏汇 编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通 过一个集成开发环境(uvision)将这些部分组合在一起。运行 keil 软件需要 pentium 或以上的 cpu,16mb 或更多 ram、20m

33、以上空闲的硬盘空间、 20 win98、nt、win2000、winxp 等操作系统。掌握这一软件的使用对于使用 51 系 列单片机的爱好者来说是十分必要的。 四、总结四、总结 经过将近两周的单片机课程设计,终于完成了数字电压表的设计,这次设 计基本达到设计要求。 在本次设计的过程中,我发现很多的问题,虽然以前还做过这样的设计但 这次设计让我增长很多知识。程序设计是一个很灵活的东西,它反映了我们解 决问题的逻辑思维和创新能力,它是一个设计的灵魂所在。因此在整个设计过 程中大部分时间是用在程序上面的。很多子程序是可以借鉴书本上的,但怎样 衔接各个子程序才是关键的问题所在,这需要对单片机的结构很熟

34、悉。通过我 们努力和老师的指导最终完成了程序设计。 要设计一个成功的电路,必须要有耐心,要有坚持的毅力。在整个电路的 设计过程中,花费时间最多的是各个单元电路的连接及电路的细节设计上,如 在多种方案的选择中,我们仔细比较分析其原理以及可行的原因。这就要求我 们对硬件系统中各组件部分有充分透彻的理解和研究,并能对之灵活应用。通 过这次实训,我在书本理论知识的基础上又有了更深层次的理解。 在两周的设计中,我受益匪浅,让我对专业知识有了更深的理解,收获知 识的同时,还收获了阅历,收获了成熟与合作。我们通过查找大量资料,请教 老师,以及不懈的努力,不仅培养了独立思考的能力还培养了动手操作能力。 更重要

35、的是我们学会了学习的方法,这是日后最实用的。面对社会的挑战,只 有通过不断的学习和实践才能完成知识的积累,才能更好的提高自己取得更好 的成绩。 在这次课程设计的撰写过程中,我得到了许多人的帮助。 首先我要感谢老师在课程设计上给予我的指导、提供给我的支持和帮助,这是 我能顺利完成这次报告的主要原因,更重要的是老师帮我解决了许多技术上的 难题,让我能把系统做得更加完善。在此期间,我不仅学到了许多新的知识, 而且也开阔了视野,提高了自己的设计能力。 其次,我要感谢帮助过我的同学,他们也为我解决了不少我不太明白的设计商 的难题。同时也感谢学院为我提供良好的做毕业设计的环境。 最后再一次感谢所有在设计中

36、曾经帮助过我的良师益友和同学! 21 主要参考文献 1 何立民. 单片机高级教程,m. 北京:北京航空航天大学 出版社,2007 2 何立民. 单片机应用系统设计,m.北京:北京航空航天 大学出版社,1990 3 何立民. 单片机应用技术选编 17,m.北京:北京航空 航天大学出版社,19931999 4 杭和平. 单片机原理与应用m. 北京:机械工业出版社, 2008 5 楼然苗. 51 系列单片机设计实例m. 北京:北京航空航 天大学出版社,2003 6 龙泽明. mcs-51 单片机原理及工程应用m.国防工业出版 社,2005 附录一 org 0000h ljmp start org 0

37、003h reti org 000bh reti org 0013h reti org 001bh reti org 0023h reti org 002bh reti 22 初始程序中的各变量 clearmemio:clra mov p2,a mov r0,#70h mov r2,#0dh loopmem:mov r0,a inc r0 djnz r2,loopmem mov20h,#00h mova,#0ffh movp0,a movp1,a movp3,a ret 主程序 start: lcall clearmemio ;初始化 main:lcall test ;测量一次 lcalldi

38、splay ;显示数据一次 ajmp main nop ;pc 值出错处理 nop nop ljmp start 显 示 控 制 程 序 display:jb00h,disp11 ;标志位为 1,则转单路显示控制子程 序 movr3,#03h ;8 路信号循环显示控制子程序 movr0,#70h ;显示数据初址 70h77h mov7bh,#00h ;显示通道路数初值 disloop1:lcalltunbcd ;显示数据转为三位 bcd 码存入 7ah、79h、78h movr2,#0ffh ;每路显示时间控制在 4ms255,约 1s disloop2:lcalldisp ;调四位显示程序

39、lcallkeywork1 ;按键检测 23 djnz r2,disloop2 incr0 ;显示下一路 inc7bh ;通道显示数加 1 djnz r3,disloop1 ret disp11:mov a,7bh ;单路显示控制子程序 subb a,#01h mov7bh,a adda,#70h movr0,a disloop11:lcalltunbcd;显示数据转为三位 bcd 码存入 7ah、79h、78h movr2,#0ffh ;每路显示时间控制在ms25 disloop22:lcalldisp ;调四位显示程序 lcallkeywork2 ;按键检测 djnz r2,disloop

40、22 inc7bh ;通道显示数加 ret 显示数据转为三位 bcd 码子程序 ;显示数据转为三位 bcd 码存入 7ah、79h、78h(最大值 5.00v) unbcd: mov a,r0 ;255/51=5.00v 运算 movb,#51 divab mov7ah,a ;个位数放入 7ah mova,b ;余数大于 19h,f0 为 1,乘法溢出,结 果加 5 clrf0 subb a,#1ah movf0,c mova,#10 mulab movb,#51 divab jbf0,loop2 adda,#5 24 loop2:mov 79h,a ;小数后第一位放入 79h mova,b

41、clrf0 subb a,#1ah movf0,c mova,#10 mulab movb,#51 divab jb f0,loop3 adda,#5 loop3: mov78h,a;小数后第二位放入 78h ret 共阳显示子程序,显示内容在 78h7bh disp: movr1,#78h;共阳显示子程序,显示内容在 78h7bh movr5,#0feh ;数据在 p1 输出,列扫描在 p3.0p3.3 play:mov p1,#0ffh mova,r5 anlp3,a mova,r1 movdptr,#tab movc a,a+dptr movp1,a jbp3.2,play1;小数点处理

42、 clrp1,7;小数点显示(显示格式为 xx.xx) play1:lcalldl1ms inc r1 mov a,p3 jnb acc.3,endout rl a movr5,a movp3,#0ffh ajmp play 25 endout:mov p3,#0ffh mov p1,#0ffh ret tab:db 0c0h,0f9h,0a4h,0b0h db 99h,92h,82h,0f8h,80h,90h,0ffh ;段码表 延时程序 dl10ms:mov r6,#0d0h;10ms 延时子程序 dl1:mov r7,#19h dl2:djnzr7,dl2 djnz r6,dl1 ret

43、 电压测量(a/d)子程序 ;一次测量数据 3 个,依次放入 70h72h 单元中 test:clra ;模/数转换子程序 movp2,a movr0,#70h ;转换值存放首址 movr7,#03h ;转换 8 次控制 lcalltestart ;启动测试 wait:jbp3.2,movd ;等 a/d 转换结束信号 ajmp wait testart:setbp2.3 ;测试启动 nop nop clrp2.3 setb p2.4 nop nop clrp2.4 nop nop nop nop ret movd: setb p2.5 ;取 a/d 转换数据 26 mova,p0 movr0

44、,a clrp2.5 incr0 mova,p2 ;通道地址加 1 inca movp2,a cjne a,#03h,testend ;等 8 路 a/d 转换结束 testend:jc testcon clra ;结束恢复端口 movp2,a mova,#0ffh movp0,a movp1,a movp3,a ret testcon:lcalltestart ljmpwait 按键检测子程序 keywork1: jnbp3.5,key1 keyout:ret key1:lcalldisp ;延时消抖 jbp3.5,keyout wait11: jnbp3.5,wait12 cpl00h m

45、ovr2,#01h movr3,#01h ret wait12: lcall disp ;键释放等待时显示用 ajmpwait11 keywork2: jnb p3.5,key1 jnbp3.6,key2 ret key2:lcall disp ;延时消抖用 27 jb p3.6,keyout wait22: jnb p3.6,wait21 inc7bh mov a,7bh cjne a,#08h,keyout11 keyout11: jckeyout1 mov 7bh,#00h keyout1:ret wait21: lcall disp ;键释放等待时显示用 ajmp wait22 end

46、 加入中断程序延时 50ms 的程序 org 0000h ljmp start org 0003h reti ljmp main org 000bh ljmp main1 reti org 0013h reti org 001bh reti org 0023h reti org 002bh reti ;初始化程序中的变量 clearmemio: clr a mov p2,a mov r0,#70h mov r2,#0dh loopmem: mov r0,a 28 inc r0 djnz r2,loopmem mov 20h,#00h mov a,#0ffh mov p0,a mov p1,a

47、mov p3,a ret ;主程序 start: lcall clearmemio main:lcall test lcall display ajmp main nop nop nop mov th0,#0f6h mov tl0,#03ch ljmp start main1:mov tcon,#01h mov tmod,#01h mov th0,#0f6h mov tl0,#3ch setb ea setb et0 setb tr0 sjmp $ lcall display ajmp main nop nop nop mov th0,#0f6h mov tl0,#03ch 29 ljmp s

48、tart ;显示控制程序 display: jb 00h,disp11 mov r3,#03h mov r0,#70h mov 7bh,#00h disloop1: lcall tunbcd mov r2,#0ffh disloop2: lcall disp lcall keywork1 djnz r2,disloop2 inc r0 inc 7bh djnz r3,disloop1 ret disp11: mov a,7bh subb a,#01h mov 7bh,a add a,#70h mov r0,a disloop11: lcall tunbcd mov r2,#0ffh disloop22: lcall disp lcall

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论