通信工程专业课程设计Ⅲ任务书
院(系) 物理与电信工程学院 专业班级 通 信 工 程 专 业 091班 学生姓名
一、课程设计Ⅲ题目 简 易 数 字 电 压 表 的 设 计 二、课程设计Ⅲ工作自 2011 年 12 月 26 日 起至 2012 年 1 月 13 日止
三、课程设计Ⅲ进行地点: 物 理 与 电 信 工 程 学 院 实 验 室
四、课程设计Ⅲ的内容要求:
简易数字电压表的设计 以单片机为核心,设计一个数字电压表。采取中断方式,对两路0~5V 的模拟
电压进行采集,采用的数据送LED显示,并存入内存,超过界限时指示灯闪烁。
指 导 教 师 系(教 研 室) 通 信 工 程 教 研 室 接受任务开始执行日期 2011年12月26日 学生签名
简易数字电压表
xxx
(陕西理工学院物理与电信工程学院通信091班,陕西 汉中 723003)
指导教师:xxx
[摘 要]本电路以ADC0809和ATS51为核心,该系统有四个模块:数据采集模块、
控制模块、显示模块、A/D转换模块,设计中采用ADC0809进行摸数转换,利用MCS-51单片机进行数据的处理,显示模块采用LCD1602液晶显示器显示,采用式按键选择单路显示或者8路轮流显示。能够测量0-5V之间的直流电压值。读数据准确,测量方便。误差范围在-0.02~+0.02之间最小分辨率位0.019。硬件设计应用电子设计自动化工软件设计采用模块化编程方法。
[关 键 词] 数字电压表;单片机;ATC51; ADC0809; [中图分类号] TN702 [文献标志码] A
I
Simple digital voltmeter
Xxx
(Grade09,Class2,Major of Communication Engineering,Dept. of E.I.of Shaanxi
University of Technology, Hanzhong 723003,China)
Tutor:xxx
[Abstract] In this paper, with ADC0809 voltage converter integrated chips and microcontroller
designed ATC51 the number of DC voltage table. In measuring instruments, voltage meter is necessary, and voltage meter will have a direct impact on measurement accuracy. With a high precision, the conversion speed and stable performance of the voltage meter to conform to the requirements of measurement. To this end, we design a digital voltage meter, this works mainly by A/D0809 converter and a microcontroller ATC51, A / D converter under the control of the MCU to complete the acquisition and analog signal conversion functions, from the final Acquisition of the digital display voltage value. This design through debugging to fully meet the design requirements of the target. Circuit design simple, designed to facilitate a more practical.
[Key words]digital voltmeter; SCM; ATC51;ADC0809
II
目录
简易数字电压表 ................................................................................................. I Simple digital voltmeter .................................................................................. II 第1章系统方案的选择与论证 ........................................................................ 1 1.1设计任务及要求论证 .................................................................................. 1 1.1.1 任务 ........................................................................................................ 1 1.2 简易数字电压表基本方案 ......................................................................... 1 1.2.1模块方案选择与论证 ............................................................................... 1 1.2.3 A/D模数转换方案的选取 ..................................................................... 3 1.2.4 显示方案 .................................................................................................. 5 1.2.5 输入方案 .................................................................................................. 6 1.2.6 电源提供方案 .......................................................................................... 6 1.2.7 系统组成 .................................................................................................. 6 第2章 系统硬件设计与实现 .......................................................................... 7 2.1 简易数字电压表基本组成部分 ................................................................. 7 2.2.1 电源电路 .................................................................................................. 7 2.2.2 复位电路 .................................................................................................. 7 2.2.3 转换电路 .................................................................................................. 8 2.2.5 显示电路和LCD1602 ............................................................................... 8 2.2.6 系统框图及电路原理图 ...................................................................... 11 第3章 软件的设计 ........................................................................................ 12 3.1 程序流程图 ............................................................................................... 12 3.1.1主总流程图 ............................................................................................. 12 3.1.2 主要子程序程序流程图 ........................................................................ 12 第4章 仿真及调试 ........................................................................................ 13 4.1 KEIL C51简介 ........................................................................................ 13 4.2 PROTEUS ISIS简介 ................................................................................ 14 4.3 测试结果分析 ........................................................................................... 15 第5章 总 结 .................................................................................................. 16 第6章 致 谢 ................................................................................................ 17 参考文献 .......................................................................................................... 18 附 录 ................................................................................................................ 19 附录1 简易数字电压表原理图 ..................................................................... 19 附录2 简易数字电压表PCB图 ..................................................................... 19 附录3 数字电压表实物图 ............................................................................. 19 附录4 主要程序 ............................................................................................. 20
III
通 信 工 程 专 业 综 合 课 程 设 计Ⅲ
第1章系统方案的选择与论证
1.1设计任务及要求论证
1.1.1 任务
本文是以直流数字电压表的设计为研究内容。首先对数字电压表作了详细介绍,接着讲述了数字电压表硬件电路的设计以及软件的设计,包括量程转换电路、数据采集电路,模数转换电路及显示电路的具体设计。
电压表是各种电子电路测量中经常用到的仪器,本课题的目的是让学生通过运用所学的知识进行实际的应用,设计一个能够测量电压的简易仪器。
1.2 简易数字电压表基本方案
1.2.1模块方案选择与论证
根据设计要求选用高精度A/D转换器ADC0809进行数据转换,针对ADC0809对模拟输入信号的要求,对输入信号进行量程转换并进行调理。通过单片机ATC51和A/D转换器ADC0809完成数据转换及传输,是系统的核心内容。阐述了ADC0809工作原理并对A/D 转换电路、参考电压电路、复位电路、时钟电路等电路进行具体设计。
本设计从各个角度分析了由单片机组成的数字电压表的设计过程及各部分电路的组成及其原理,并且分析了程序如何驱动单片机进而使系统运行起来的原理及方法。
软件的设计包括了对主程序、模数转换程序和显示程序的设计,给出了程序流程图。最后根据软硬件设计方案对系统进行了调试。
ATC51简介
1
通 信 工 程 专 业 综 合 课 程 设 计Ⅲ
ATC51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的ATC51是一种高效微控制器。ATC单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。外形及引脚排列如图所示:
图1 8051芯片管脚图
主要特性: •与MCS-51 兼容
•4K字节可编程闪烁存储器 •寿命:1000写/擦循环 •数据保留时间:10年 •全静态工作:0Hz-24Hz •三级程序存储器锁定
2
通 信 工 程 专 业 综 合 课 程 设 计Ⅲ
•片内振荡器和时钟电路 •128×8位内部RAM •32可编程I/O线 •两个16位定时器/计数器 •5个中断源 •可编程串行通道
•低功耗的闲置和掉电模式 管脚接法说明: GND:接地
VCC:供电电压我们接+5V
P0口:在这个设计中我们将ATC51做为BCD码的输出口与LED显示器相连。由于P0口输出驱动电路中没有上拉电阻,所以我们在外接电路上接上拉电阻。 P1口:把ATC51中的P1口与ADC0809的输出端相连,做为数字信号的接收端。
P2口:我们把P2口做为位码输出口,以P2.0—2.3输出位控线与LED显示器相连。
P3口:利用P3.0,P3.1,P3.2,P3.4,P3.5,P3.6分别与ADC0808的OE,EOC,START/ALE,A,B,C端相连。
XTAL1 ,XTAL2:外接一振荡电路。RST:在此端接一复位电路
1.2.3 A/D模数转换方案的选取
A/D转换器是模拟量输入通道中的一个环节,单片机通过A/D转换器把输入模拟量变成数字量再处理。
随着大规模集成电路的发展,目前不同厂家已经生产出了多种型号的A/D转换器,以满足不同应用场合的需要。如果按照转换原理划分,主要有3种类型,即双
3
通 信 工 程 专 业 综 合 课 程 设 计Ⅲ
积分式A/D转换器、逐次逼近式A/D转换器和并行式A/D转换器。目前最常用的是双积分和逐次逼近式。
双积分式A/D转换器具有抗干扰能力强、转换精度高、价格便宜等优点,比如ICL71XX系列等,它们通常带有自动较零、七段码输出等功能。与双积分相比,逐次逼近式A/D转换的转换速度更快,而且精度更高,比如ADC0808、ADC0809等,它们通常具有8路模拟选通开关及地址译码、锁存电路等,它们可以与单片机系统连接,将数字量送入单片机进行分析和显示。
本设计中,由于对精度没做很大要求,我们采用逐次逼近式A/D转换ADC0809由于ADC0809在进行A/D转换时需要有CLK信号,而此时的ADC0809的CLK是接在ATS51单片机的P3.3端口上,也就是要求从P3.3输出CLK信号供ADC0809使用。因此产生CLK信号的方法就得用软件来产生了;由于ADC0809的参考电压VREF=VCC,所以转换之后的数据要经过数据处理,在数码管上显示出电压值。实际显示的电压值 (D/256*VREF) 1. ADC0809 芯片管脚图如下图所示:
图2 ADC0809管脚图
4
通 信 工 程 专 业 综 合 课 程 设 计Ⅲ
图3 ADC0809时序图
ADCADC0809模数转换器的引脚功能 IN0~IN7:8路模拟量输入。
A、B、C:3位地址输入,2个地址输入端的不同组合选择八路模拟量输入。
ALE:地址锁存启动信号,在ALE的上升沿,将A、B、C上的通道地址锁存到内部的地址锁存器。
D0~D7:八位数据输出线,A/D转换结果由这8根线传送给单片机。 OE:允许输出信号。当OE=1时,即为高电平,允许输出锁存器输出数据。
START:启动信号输入端,START为正脉冲,其上升沿清除ADC0808的内部的各寄存器,其下降沿启动A/D开始转换。
EOC:转换完成信号,当EOC上升为高电平时,表明内部A/D转换已完成。 CLK:时钟输入信号,0809的时钟频率范围在10~1200kHz,典型值为0kHz。
1.2.4 显示方案
设计中采用的是4位数码管来显示电压值。LED具有耗电低、亮度高、视角大、线路简单、耐震及寿命长等优点,它由4个发光二极管组成,其中3个按‘8’字型排列,另一个发光二极管为圆点形状,位于右下角,常用于显示小数点。把4个发光二极管连在一起,公共端接高电平,叫共阳极接法,相反,公共端接低电平的
5
通 信 工 程 专 业 综 合 课 程 设 计Ⅲ
叫共阴极接法,我们采用共阳极接法。当发光二极管导通时,相应的一段笔画或点就发亮,从而形成不同的发光字符。其8段分别命名为dp g f e d c b a。
图4 四位数码管图片
1.2.5 输入方案
我们本次采用的主要是使用函数信号发生器把信号输入到印制电路板上。因为此电路设计的主要是测直流电压,所以在给信号的时侯应尽量使输入的频率低,且它的最大测量值为5V,输入的时候应注意不要超过量程。
1.2.6 电源提供方案
主要是使用软件把程序下载到做好的印制电路板上,把印制电路板接到电脑的机箱上,通过机箱使之输出为5V的电压来驱动整个印制电路板。
1.2.7 系统组成
本系统主要是由A/D 转换电路、参考电压电路、复位电路、时钟电路等部分电路组成。软件的设计包括了对主程序、模数转换程序和显示程序的设计。 以下是数字电压表的一张系统原理框图:
6
通 信 工 程 专 业 综 合 课 程 设 计Ⅲ
第2章 系统硬件设计与实现
2.1 简易数字电压表基本组成部分
简易数字电压表主要是由电源电路、复位电路 、时钟电路 、 下载电路、显示电路,转换电路这几部分组成。
本次设计介绍了用ADC0809集成电压转换芯片和ATC51单片机设计制作的数字直流电压表。在测量仪器中,电压表是必须的,而且电压表的好坏直接影响到测量精度。具有一个精度高、转换速度快、性能稳定的电压表才能符合测量的要求。为此,我们设计了数字电压表,此作品主要由A/D0809转换器和单片机ATC51构成,A/D转换器在单片机的控制下完成对模拟信号的采集和转换功能,最后由数码管显示采集的电压值。
2.2.1 电源电路
此电路通过数据线接到电脑的机箱上,使之输出为5V的电压来驱动电路
2.2.2 复位电路
7
通 信 工 程 专 业 综 合 课 程 设 计Ⅲ
2.2.3 转换电路
主要采用的ADC0809芯片来完成其转换功能
2.2.5 显示电路和LCD1602
a.显示电路
8
通 信 工 程 专 业 综 合 课 程 设 计Ⅲ
本设计主要采用的是四位数码管来进行显示 b. LCD1602
工业字符型液晶,能够同时显示16x02即32个字符。(16列2行) 1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线
VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,其中: 引脚 1 2 3 符号 VSS VDD V0 功能说明 一般接地 接电源(+5V) 液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。 RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。 R/W为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。 E(或EN)端为使能(enable)端,下降沿使能。 底4位三态、 双向数据总线 0位(最低位) 底4位三态、 双向数据总线 1位 底4位三态、 双向数据总线 2位 底4位三态、 双向数据总线 3位 高4位三态、 双向数据总线 4位 高4位三态、 双向数据总线 5位 高4位三态、 双向数据总线 6位 高4位三态、 双向数据总线 7位(最高位)(也是busy flag) 4 5 6 7 8 9 10 11 12 13 14 RS R/W E DB0 DB1 DB2 DB3 DB4 DB5 DB6 DB7 9
通 信 工 程 专 业 综 合 课 程 设 计Ⅲ
15 16 BLA BLK 背光电源正极 背光 电源负极 指令集
1602通过D0~D7的8位数据端传输数据和指令。 显示模式设置: (初始化)
0011 0000 [0x38] 设置16×2显示,5×7点阵,8位数据接口; 显示开关及光标设置: (初始化)
0000 1DCB D显示(1有效)、C光标显示(1有效)、B光标闪烁(1有效) 0000 01NS N=1(读或写一个字符后地址指针加1 &光标加1), N=0(读或写一个字符后地址指针减1 &光标减1), S=1 且 N=1 (当写一个字符后,整屏显示左移) s=0 当写一个字符后,整屏显示不移动 数据指针设置:
数据首地址为80H,所以数据地址为80H+地址码(0-27H,40-67H) 其他设置:
01H(显示清屏,数据指针=0,所有显示=0);02H(显示回车,数据指针=0)。
通常推荐的初始化过程: 延时15ms 写指令38H 延时5ms 写指令38H 延时5ms 写指令38H 延时5ms
(以上都不检测忙信号) (以下都要检测忙信号) 写指令38H
写指令08H 关闭显示 写指令01H 显示清屏
写指令06H 光标移动设置
写指令0cH 显示开及光标设置 完毕
10
通 信 工 程 专 业 综 合 课 程 设 计Ⅲ
2.2.6 系统框图及电路原理图
电路原理图
系统框图
11
通 信 工 程 专 业 综 合 课 程 设 计Ⅲ
第3章 软件的设计
3.1 程序流程图
3.1.1主总流程图
3.1.2 主要子程序程序流程图
12
通 信 工 程 专 业 综 合 课 程 设 计Ⅲ
第4章 仿真及调试
4.1 KEIL C51简介
KEILC51标准C编译器为8051微控制器的软件开发提供了C语言环境,同时保留了汇编代码高效,快速的特点。C51编译器的功能不断增强,使你可以更加贴近CPU本身,及其它的衍生产品。
C51已被完全集成到uVision2的集成开发环境中,这个集成开发环境包含:编译器,汇编 器,实时操作系统,项目管理器,调试器。uVision2 IDE可为它们提供单一而灵活的开发环境。 uVision2集成开发环境 一、项目管理
工程(project)是由源文件、开发工具选项以及编程说明三部分组成的。 一个单一的uVision2工程能够产生一个或多个目标程序。产生目标程序的源文件构成“组”。开发工具选项可以对应目标,组或单个文件。
uVision2包含一个器件数据库(device database),可以自动设置汇编器、编译器、连接定位器及调试器选项,来满足用户充分利用特定微控制器的要求。此数据库包含:片上存储器和外围设备的信息,扩展数据指针(extra data pointer)或者加速器(math accelerator)的特性。
uVision2可以为片外存储器产生必要的连接选项:确定起始地址和规模。 二、集成功能
uVision2的强大功能有助于用户按期完工。
1.集成源极浏览器利用符号数据库使用户可以快速浏览源文件。用详细的符号信息来优化用户变数存储器。
2.文件寻找功能:在特定文件中执行全局文件搜索。 3.工具菜单:允许在V2集成开发环境下启动用户功能。
13
通 信 工 程 专 业 综 合 课 程 设 计Ⅲ
4.可配置SVCS接口:提供对版本控制系统的入口。 5.PC-LINT接口:对应用程序代码进行深层语法分析。 6.Infineon的EasyCase接口:集成块集代码产生。
7.Infineon的DAVE功能:协助用户的CPU和外部程序。DAVE工程可被直接输入uVision2 三、编辑器和调试器 a、源代码编辑器
uVision2编辑器包含了所有用户熟悉的特性。彩色语法显像和文件辩识都对C源代码进行和优化。可以在编辑器内调试程序,它能提供一 种自然的调试环境,使你更快速地检查和修改程序。 b、断点
uVision2允许用户在编辑时设置程序断点(甚至在源代码未经编译和汇编之前)。用户启动V2调试器之后,断点即被激活。断点可设置 为条件表达式,变量或存储器访问,断点被触发后,调试器命令或调试功能即可执行。
在属性框(attributes column)中可以快速浏览断点设置情况和源程序行的位置。代码覆盖率信息可以让你区分程序中已执行和未执行的部分。 c、C51编译器
KEIL C51编译器在遵循ANSI标准的同时,为8051微控制器系列特别设计。语言上的扩展能让用户使用应用中的所有资源。 4.2 PROTEUS ISIS
简介
Proteus软件是Labcenter Electronics公司的一款电路设计与仿真软件,它包括ISIS、ARES等软件模块,ARES模块主要用来完成PCB的设计,而ISIS模块用来完成电路原理图的布图与仿真。Proteus的软件仿真基于VSM技术,它与其他软件最大的不同也是最大的优势就在于它能仿真大量的单片机芯片,比如MCS-51系列、
14
通 信 工 程 专 业 综 合 课 程 设 计Ⅲ
PIC系列等等,以及单片机外围电路,比如键盘、LED、LCD等等。通过Proteus软件的使用我们能够轻易地获得一个功能齐全、实用方便的单片机实验室。
Proteus ISIS 6 Professional是一个强大的电路仿真(VSM,Virtual System Modelling )系统,不但可以支持SPICE电路仿真,而且可以支持8051系列、PIC系列、MC68HC11等MCU的仿真,其最新的6.8SP1版本甚至可以支持ARM的仿真。你可以通过软件仿真看到项目产品的执行结果,甚至不必使用真正的开发板。 Keil C集成环境,集成了C、C++、宏汇编、Debugger、仿真等功能,可支持8051、251、C166、ARM等MCU。
Proteus和Keil IDE之间,可通过VDM(Virtual Debug Monitor)协议通讯实现源码级的Debug。
两者相结合,可以使用Proteus VSM做电路设计,然后在Keil C集成环境与Proteus联动调试项目,可以使用纯软件仿真整个开发过程。
4.3 测试结果分析
因为此数字电压表是简易数字直流电压表,由于设备的原因,用的是函数信号发生器,输出信号的频率尽管很低,在实验观察中发现显示在数码管上的数值很不稳定,误差也很大,在0~2V测量时有60mV左右的误差,在2V~5V范围内测量时有80mV左右的误差。
15
通 信 工 程 专 业 综 合 课 程 设 计Ⅲ
第5章 总 结
通过这次设计,我学到了许多课外的东西,加深了对单片机等知识的了解,提高了应用思考和设计能力。在分析设计课题,查阅资料,了解设计原理并进行仿真的过程中尽管遇到了些许问题,但在老师的指导下,最终完成了任务,不仅锻炼了分析解决问题的能力,更重要的是加强了我对电子应用学习的兴趣。在设计的过程中师给予一定的启发和指导,并叮嘱我们认真完成本次课程设计,在此表示衷心的感谢。由于本设计使用的是高效的AVR系列单片机作为核心的测量系统,以及高精度、高速度、高抗干扰的A/D转换器。使得本直流电压表具体精度高,灵敏度强,性能可靠,电路简单,成本低的特点。
此设计是单片机应用系统的开发性实验。通过此设计可知在单片机系统开发过程应注意以下事项。
1)硬件的选择。选择适合设计目地的元器件是一个重要的方设计环节。不能以元器件是否是最高性能作为选择元器件的标准。往往高性能器件的价格也是较高的。应根据项目设计的需要选择元器件,能够满足设计需要作为标准选择元器件。
2)因为单片机系统设计是硬件和软件相结合的设计,所以系统和硬件和软件必须紧密配合,协调一致。应不断调整硬软件设计,以提高系统工作效率。
通过该次单片机课程设计,我们逐步掌握了单片机的内部资源及其结构,并熟练掌握了利用C语言进行单片机的开发。在课程设计过程过我们也遇到过一些问题,不过在小组成员的共同努力下克服了困难,并顺利完成了该次课程设计。
16
通 信 工 程 专 业 综 合 课 程 设 计Ⅲ
第6章 致 谢
在这三个星期的课设中,各位老师严谨求学的治学态度,广阔的胸襟以及对学生的孜孜教诲,让我深深铭记,老师高深的学术造诣,严谨的科研作风以及执着的敬业精神值得我们永远学习。值此论文完成之际,谨向尊敬的三位老师均致以崇高的敬意和长时间来对我的关心和帮助表示诚挚的感谢。同时感谢我的同学多日来的互助,这些天我们在一起研究、探讨,不仅学到了更多的知识,而且加深了我们的友谊!
在此,我要特别感谢指导老师李文丽老师,本课设的研究一直都是在郑老师的细心指导下进行的,可以说其中的每个环节都倾注了老师的智慧和心血,尤其是当我们遇到问题和困难时,老师孜孜不倦的给与解答,循循善诱、一丝不苟,在解决问题的同时还注重锻炼我们自身的思维能力、郑老师待人和气,对我们提出的问题有问必答,而且引导我由浅入深的思考,对问题的解答都十分详细,给我这个课题的认识、理解、研究以及最后的实现以极大的帮助,我相信课设期间老师给我的帮助是一笔使我长期受用的宝贵财富。
在此,我衷心的向指导老师表示感谢!对在整个研究过程中帮助我的老师及同学表示真心的感谢!
17
通 信 工 程 专 业 综 合 课 程 设 计Ⅲ
参考文献
[1] 张迎新.单片机初级教程[M].北京:北京航天航空大学出版社,2000年 [2] 于海生.微型计算机控制技术[M]. 北京:清华大学出版社,1999年
[3] 胡学林.可编程控制器应用技术[M]. 北京:高等教育出版社,2001年第一版 [4] 方承远.工厂电气控制技术[M]. 北京:机械工业出版社,2004年第二版 [5] 孙增圻.计算机控制理论及应用[M]. 北京:清华大学出版社,19年 [6] 宋浩,田丰.单片机原理及应用[M].北京:北京交通大学出版社,2005年 [7] 陈明荧.8051单片机课程设计实训教材[M]. 北京:清华大学出版社,2004年 [8] 张红润,张亚凡.单片机原理及应用[M]. 北京:清华大学出版社, 2004年 [9] 何立民.单片机应用技术选编[M].北京:北京航天航空大学出版社,2004年 [10] 张志良.单片机原理与控制技术[M].北京:机械工业出版社, 2005年第二版 [11] 李建忠.单片机原理及应用[M].西安:西安电子科技大学出版社, 2002年 [12] 赵伟军.Protel 99 SE教程[M].北京:人民邮电出版社,2004年第一版:47-
18
通 信 工 程 专 业 综 合 课 程 设 计Ⅲ
附 录
附录1 简易数字电压表原理图
附录2 简易数字电压表PCB图
附录3 数字电压表实物图
19
通 信 工 程 专 业 综 合 课 程 设 计Ⅲ
附录4 主要程序
/*****************************************************************
// 《单片机课程设计》 //题目: 简易数字电压表的设计
//任务书:以单片机为核心,设计一个数字电压表。采用中断方式,对两路 // // // //
0~5V的模拟电压进行循环采集,采集的数据送LED显示,并存入内 存。超过界限时指示灯闪烁。
1.按照题目规定的人数进行分组选题,每个题目不能重复;
2.同一题目中的成员要对所完成题目要进行深入学习和理解,明确要完成
//要求:
的工作任务并进行明确分工;
// 3.在题目完成之后,课设小组老师进行验收,验收时每个同学要能够对老师的提问进行回答,并且针对所选课题围绕自己所完成的主要工作完成课设报告,不得雷同。
/*****************************************************************/
20
通 信 工 程 专 业 综 合 课 程 设 计Ⅲ
#include /***********简洁定义*************/ #define uchar unsigned char #define uint unsigned int /***********包含处理*************/ #include\"adc0809.h\" #include\"lcd1602.h\" #include\"at24c02.h\" #define LED_GATE 300 //报警电压门限定义 #define CH0_START_ADD 0 #define CH1_START_ADD 15 /***********按键、LED接口*************/ sbit LED=P2^5; //超出测量范围指示灯 sbit KEY1=P2^6; //查询历史数据按键 sbit KEY2=P2^7; //开始/停止测量按键 /***********全局变量定义*********/ bit Adc_Flag=0; //电压采集结束标志 unsigned int Adc_Temp[2]={0,0}; unsigned char Adc_Result[2]={0,0}; unsigned char FirstLine[] =\"Now,CH0 is V\"; unsigned char SecondLine[]=\"Now,CH1 is V\"; //unsigned charSecondLine[]=\"1234567abcdefg\";//位置参考 /*------------------------------------------------ 报警扫描 -----------------------------------------------*/ void Beep_Judge(void) { static unsigned char i=0; static unsigned char Beep_Cnt=0; /* 两路电压中有一个超出量程则报警指示 */ 21 通 信 工 程 专 业 综 合 课 程 设 计Ⅲ } /*------------------------------------------------ 外部中断0初始化 -----------------------------------------------*/ void Interrupt0_Init(void) { EX0=1; //开外部中断0 IT0=1; //下降沿触发 } /*------------------------------------------------ 定时器1初始化 -----------------------------------------------*/ void Timer_Initial(void) { TMOD=0x20; TH1=(256-100);//定时时间为100us,亦即CLK周期为0.02ms,f=5khz if(Adc_Temp[0]>LED_GATE||Adc_Temp[1]>LED_GATE) { } else { LED=0; Beep_Cnt=0; } Beep_Cnt++; if(Beep_Cnt==2) //连续两次循环扫描均超出量程才报警 { } for(i=0;i<100;i++) { LED=1; DelayMs(3); LED=0; DelayMs(2); } Beep_Cnt=1; 22 通 信 工 程 专 业 综 合 课 程 设 计Ⅲ } TL1=(256-100); EA=1; ET1=1; TR1=1; /*------------------------------------------------ 主程序 -----------------------------------------------*/ void main(void) { unsigned char i=0,Save_Cnt=0,Key1_Cnt=0;//计数用 unsigned char Last_Data[5]={\" \Interrupt0_Init(); //外部中断初始化 Timer_Initial(); //定时器初始化 LCD_init(); //LCD1602初始化 LCD_write_str(0,0,\"Please waiting!\"); DelayMs(1000); Start_Adc(0); while(1) { if(KEY2==0 && KEY1==0)//停止采集状态下(KEY2=0),按下KEY1{ //启动电压转换 //临时数组 才可以查询历史数据 DelayMs(10); if(KEY2==0 && KEY1==0) { while(!KEY1); //等待按键释放 LCD_clear(); //清全屏 Key1_Cnt++; switch(Key1_Cnt) { 23 通 信 工 程 专 业 综 合 课 程 设 计Ⅲ case 1:RdFromROM(Last_Data,CH0_START_ADD,5); //从24c02第0单元开始,连续读取5字节的数据,存到数组中 LCD_write_str(0,0,\"Lt1 CH0 is \"); LCD_write_str(11,0,Last_Data); //从24c02第 RdFromROM(Last_Data,CH1_START_ADD,5); 15单元开始,连续读取5字节的数据,存到数组中 LCD_write_str(0,1,\"Lt1 CH1 is \"); LCD_write_str(11,1,Last_Data); break; //从24c02 case 2:RdFromROM(Last_Data,CH0_START_ADD+5,5); 第5单元开始,连续读取5字节的数据,存到数组中 LCD_write_str(0,0,\"Lt2 CH0 is \"); LCD_write_str(11,0,Last_Data); RdFromROM(Last_Data,CH1_START_ADD+5,5); 第20单元开始,连续读取5字节的数据,存到数组中 break; case //从24c02 LCD_write_str(0,1,\"Lt2 CH1 is \"); LCD_write_str(11,1,Last_Data); 3:RdFromROM(Last_Data,CH0_START_ADD+10,5); //从 24c02第10单元开始,连续读取5字节的数据,存到数组中 LCD_write_str(0,0,\"Lt3 CH0 is \"); LCD_write_str(11,0,Last_Data); //从24c02 RdFromROM(Last_Data,CH1_START_ADD+10,5); 第25单元开始,连续读取5字节的数据,存到数组中 LCD_write_str(0,1,\"Lt3 CH1 is \"); LCD_write_str(11,1,Last_Data); 24 通 信 工 程 专 业 综 合 课 程 设 计Ⅲ } } } Key1_Cnt=0; break; default:break; else if(KEY2==1 && KEY1==0)//开始采集状态下(KEY2=1),按下KEY1可以存储当前数据 { DelayMs(10); if(KEY2==1 && KEY1==0) { while(!KEY1); //等待按键释放 /*通道0数据存储操作:24c02的0到14单元存储CHO 三次历史测量数据,0到4单元存最近一次所存结果,以此类推。 */ RdFromROM(Last_Data,CH0_START_ADD+5,5); //从24c02第6个单元开始,连续读取5字节的数据,存到数组中 WrToROM (Last_Data,CH0_START_ADD+10,5); //将数组中的数,从24c02第11个单元开始写入,长度为5字节 RdFromROM(Last_Data,CH0_START_ADD,5); //从24c02第1个单元开始,连续读取5字节的数据,存到数组中 WrToROM (Last_Data,CH0_START_ADD+5,5); //将数组中的数,从24c02第4个单元开始写入,长度为5字节最新数据 for(i=0;i<5;i++) { Last_Data[i]=FirstLine[i+11]; } WrToROM (Last_Data,CH0_START_ADD,5); //将数组中的数,从24c02第1个单元开始写入,长度为5字节 /*通道1数据存储操作:24c02的15到29单元存储CH1三次历史测量数据,15到19单元存最近一次所存结果,以此类推。 */ RdFromROM(Last_Data,CH1_START_ADD+5,5); //从24c02第20单元开始,连续读取5字节的数据,存到数组中 WrToROM //将数组中的数,从24c02第25单元开始写入,长度为5字节 (Last_Data,CH1_START_ADD+10,5); 25 通 信 工 程 专 业 综 合 课 程 设 计Ⅲ RdFromROM(Last_Data,CH1_START_ADD,5); //从24c02第15单元开始,连续读取5字节的数据,存到数组中 WrToROM //将数组中的数,从24c02第20单元开始写入,长度为5字节 for(i=0;i<5;i++) { Last_Data[i]=SecondLine[i+11]; } (Last_Data,CH1_START_ADD+5,5); WrToROM (Last_Data,CH1_START_ADD,5); //将数组中的数,从24c02第15单元开始写入,长度为5字节最新数据 } } else if(Adc_Flag==1 && KEY2==1) { DelayMs(10); if(Adc_Flag==1 && KEY2==1) { Adc_Flag=0; //清标志 if(TongDao_Flag==0) { //电压值转换,5V //取 Adc_Temp[0]=(Adc_Result[0]+0.005)*1.0/255*600; 作为参考电压,分成256份,放大了100倍 整数电压值 FirstLine[11]='0'+Adc_Temp[0]/100; FirstLine[12]='.'; //十分位电压值 //百分位电压值 FirstLine[13]='0'+Adc_Temp[0]%100/10; FirstLine[14]='0'+Adc_Temp[0]%100%10; FirstLine[15]='V'; LCD_write_str(0,0,FirstLine); Beep_Judge(); //超量程判断 26 通 信 工 程 专 业 综 合 课 程 设 计Ⅲ } else { Start_Adc(1); //启动ch1电压转换 Adc_Temp[1]=(Adc_Result[1]+0.005)*1.0/255*600; 作为参考电压,分成256份,放大了100倍 取整数电压值 //十分位电压值 //百分位电压值 } /*------------------------------------------------ 定时器1中断 -----------------------------------------------*/ void Timer1_interrupt(void) interrupt 3 using 0 { }a CLK_IO=~CLK_IO; } } //电压值转换,5V SecondLine[11]='0'+Adc_Temp[1]/100; // SecondLine[12]='.'; SecondLine[13]='0'+Adc_Temp[1]%100/10; SecondLine[14]='0'+Adc_Temp[1]%100%10; SecondLine[15]='V'; LCD_write_str(0,1,SecondLine); //超量程判断 //启动ch0电压转换 Beep_Judge(); Start_Adc(0); } } //定时器1中断服务函数;作用:产生CLK信号 27 通 信 工 程 专 业 综 合 课 程 设 计Ⅲ /*------------------------------------------------ 外部中断0 -----------------------------------------------*/ void Interrupt_0(void) interrupt 0 { OE_IO=1; //开启数据输出允许 //DelayMs(1); Adc_Result[TongDao_Flag]=Read_Adc(V_Result);//将数据取走,存放在对应数组中 } OE_IO=0; //关闭输出 Adc_Flag=1; 28 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- zicool.com 版权所有 湘ICP备2023022495号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务