2012-6-29智能仪器课程设计报告(邱发生5801209094)
智能仪器设计实验报告

智能仪器设计报告姓名:学号:专业:电子信息工程日期:2012-11-14南京理工大学紫金学院电光系摘要本课题是设计并制作一个基于单片机和Labview的智能数字电压表,实现电压的自动换挡,提高测量精度。
电压表分成三档0~100mV;100mV~1V;1~5V,利用程控增益放大器改变放大器的放大倍数,将各档内的输入电压依次放大50倍,5倍,1倍;程控放大器的输出端经ADC0809进行A/D转换,转换结果传输给AT89C51,AT89C51根据结果将信息反馈给多路选择器从而改变放大器放大倍数的,并利用串行通信发送给上位机,在Labview上实现测量数据的显示。
关键词:智能数字电压表AT89C51 A/D转换程控放大器引言《智能仪器课程设计》是一门理论和实践相结合的课程。
它融入了现代电子设计的新思想和新方法,将智能仪器和虚拟仪器的理论和知识相结合,再结合所学的模拟电路和数字电路及单片机的理论和知识,设计、制作一个智能数字电压表,通过理论和实际的应用,帮助学生进一步提高系统的知识和实际设计能力。
本课程对于推动信息电子类学科面向21世纪课程体系和课程内容改革,引导、培养大学生创新意识、协作精神和理论联系实际的学风,加强学生工程实践能力的训练和培养,促进广大学生踊跃参加课外科技活动和提高毕业生的就业率都会起到了良好作用。
1 主要技术指标和要求1.1(1)输入电压:0~5V(直流);(2)分成三档:0~100mV;100mV~1V;1~5V;(3)自动根据输入电压换挡;(4)测量精度:最大值的0.4%;(5)自动校零;(6)利用虚拟仪器实现测量结果在微机上显示1.2 实物要求根据智能仪器的设计要求,在仿真的基础上,对系统的程控放大器在面包板上完成连接、装配、调试并和单片机的开发系统连接并通过开发系统与微机连接,最后在微机上显示所测的电压数值。
1.3 实验仪器单片机与微机;功率函数信号发生器: SP1631A;万用表:UNI-T1.4 主要器件及典型电路形式(1)本次课程设计用器件介绍:单片机实验箱、微机、OP07、AD0808、Protues、Protel、Labview、Keil C51、(2)典型数字电路形式和模拟电路:程控运放电路2工作原理:2.1 智能仪器数字电压表电路设计1.软件设计总流程图:2.各个组成模块:I.量程自动切换电路:同相放大器的放大增益为:K=1+R f/R S , 在本电路中使R6、R7分别为R5的50 倍和5倍。
智能仪器课程设计 (2)

智能仪器课程设计引言智能仪器是指结合现代计算机技术、数字信号处理技术和传感器技术,能够实时采集、处理、显示和存储各种类型信息的测量仪器。
随着计算机技术的不断发展,智能仪器的应用越来越广泛。
在工业自动化、环境监测、医疗设备、智能家居等领域都有广泛的应用。
本文旨在探讨智能仪器课程的设计,包括教学目标、教学内容、教学方法、教学手段等方面。
教学目标智能仪器课程的教学目标主要包括以下几个方面:1.了解智能仪器的基本原理和工作方式,掌握常见的传感器和信号处理技术;2.能够使用软硬件平台进行智能仪器的开发和测试;3.培养学生创新思维和实践能力,提高解决实际问题的能力。
教学内容智能仪器课程的教学内容包括基本理论和实践操作两个方面。
1.基本理论方面,主要包括以下内容:–传感器原理和应用;–常见的信号处理技术;–智能仪器的硬件平台和程序设计;–软件平台的开发环境和使用方法。
2.实践操作方面,主要包括以下内容:–学生在实验室中完成一些简单的传感器测量实验;–学生根据实验中获得的数据,使用Matlab或Labview等软件进行信号处理;–学生根据实验结果,设计并实现基本的智能仪器系统。
教学方法智能仪器课程的教学方法主要采用抛砖引玉和启发式教学方法。
1.抛砖引玉,指的是通过讲解基本理论和实验结果,让学生逐步了解智能仪器的基本原理和工作方式,从而引导学生积累足够的知识储备;2.启发式教学,指的是通过启发式问题解决等方式,让学生在实践中不断思考和解决问题,从而培养学生创新思维和实践能力。
教学手段智能仪器课程的教学手段主要包括课堂讲解、实验操作和课程设计等几个方面:1.课堂讲解,指的是通过讲解和演示,让学生了解基本理论和工作原理。
2.实验操作,指的是通过实验操作,让学生了解智能仪器的具体应用。
3.课程设计,指的是让学生设计并实现自己的智能仪器系统,以培养学生的创新思维和实践能力。
总结智能仪器是智能化时代的重要设备之一。
智能仪器课程的教学不仅能够满足行业对专业技术人才的需求,也能够培养学生的创新思维和实践能力,提高解决实际问题的能力。
智能仪器设计课程设计报告

智能仪器设计课程设计报告1000字本文旨在介绍智能仪器设计课程设计报告的基本要素和内容安排。
智能仪器设计课程设计主要涉及到多个学科的知识,包括电路设计、嵌入式系统、计算机编程、信号处理等。
因此,本文将从以下几个方面对智能仪器设计课程设计报告进行阐述。
一、课程设计报告的基本要素智能仪器设计课程设计报告通常包括以下几个基本要素:1.课程设计目的:说明本课程设计的主要目的和意义,以及所要解决的问题。
2.课程设计内容:列出本课程设计的具体内容和所涉及的知识点。
3.设计方案:介绍设计方案的整体构思,包括硬件系统和软件系统的设计思路和要点。
4.电路设计:详细介绍电路的设计,包括原理图设计、PCB设计和元器件选型等。
5.嵌入式系统设计:详细介绍嵌入式系统的设计,包括单片机的选型、编程以及接口设计等。
6.信号处理:介绍信号的采集、处理和显示等。
7.成果展示:展示成果,包括实物展示和软件演示等。
8.结论和展望:对课程设计的整体进行总结和评价,并对未来的发展和改进提出展望和建议。
二、课程设计报告的内容安排智能仪器设计课程设计报告通常包括以下几个部分的内容:1.引言:介绍智能仪器的基本概念和意义,以及本课程设计的背景和意义。
2.课程设计思路:详细介绍本次课程设计的整体思路和要点,包括设计目标、设计内容和设计方案等。
3.电路设计:介绍电路原理图设计、PCB设计和元器件选型等内容。
4.嵌入式系统设计:介绍单片机的选型、编程和接口设计等内容。
5.信号采集和处理:介绍信号的采集、处理和显示等内容。
6.成果展示:展示成果,包括硬件系统和软件系统的实际演示和操作界面等。
7.总结和展望:对本次课程设计进行总结和评价,提出展望和建议。
总之,智能仪器设计课程设计报告的基本要素和内容安排主要涵盖了课程设计的整个过程,包括设计目的、设计内容、设计方案等方面,同时也重点强调了硬件系统、软件系统和信号处理等关键技术。
希望大家对此有所启发。
智能仪器课程设计报告

智能仪器设计课程设计报告―――采用RS 485标准的主从式多机系统设计学生姓名:王**学号:*********班级:********任课教师:***成绩:1、设计要求a) 系统基本结构:1个51系列单片机主机、2个51系列单片机从机(从机1 和从机2)、采用RS 485组成主从式多机系统;b) 系统基本功能:在主机键盘上按“1”键,从机1的LED数码显示器上显示“1”,此后从机1键盘上每按下1个数字键,主机LED数码显示器上能显示对应的数字,当从机1键盘上按下“0”键时,此次通信结束,从机1键盘上再按下任意数字键,主机不显示相应数字;在主机键盘上按“2”,从机2的LED数码显示器上显示“2”,此后从机2键盘上每按下1个数字键,主机LED数码显示器上能显示对应的数字,当从机2键盘上按下“0”键时,此次通信结束,从机2键盘上按下任意数字键后,主机不显示相应数字;c) 选做:从机1和从机2可设计成相关物理量的测量系统,当主机呼叫从机时,从机能把最新的测量值发给主机。
2、方案论证(1)系统组成:由三个51单片机构成主从通信系统(本组使用的芯片型号是STC89C52,其功能是一致的),每个单片机搭配LED数码管显示器和键盘;通信采用RS-485标准,可使用MAX485芯片作为通信收发器,单片机控制MAX485的使能端进行发送和接受逻辑控制;单主机多从机的通讯系统需要区分地址信息和数据信息,可利用51串口模式中的模式2进行通信,修改主机的SCON.3状态表明主机发送的是否是地址信息,修改某台从机的SM2状态来建立和主机的唯一通信;数据输入使用键盘输入,数据显示可简单的使用数码管显示。
图1 系统结构图(2)串口模式分析:51单片机串口的2/3模式下是作为11位异步通信用,8位数据位后的第九位是可编程位SCON.3,主机可以对此位进行0或1赋值,进行地址信息和数据信息的区分,通常赋为1表示地址信息,为0表示数据信息;51单片机的串行口控制寄存器SCON的SM2位是专门用来使通信接口具有识别功能的多机控制位,在串行口以方式2/3接收时,若SM2=1,此时出现两种情况:第一,接收到的第九位为1(单片机接收时可编程位进入SCON.2),则前8位数据装入SBUF,并置RI为1,产生中断标志;第二,接收到的第九位为0,则不产生中断标志,接收信息被弃。
智能仪器课程设计

《智能仪器设计》课程设计报告书题目号:题目:智能仪表的设计班级:学号:06姓名:摘要智能仪器是含有微型计算机或者微型处理器的测量仪器,拥有对数据的存储运算逻辑判断及自动化操作等功能。
它的出现,极大地扩充了传统仪器的应用范围。
智能仪器凭借其体积小、功能强、功耗低等优势,迅速地在家用电器、科研单位和工业企业中得到了广泛的应用。
其工作原理为传感器拾取被测参量的信息并转换成电信号,经滤波去除干扰后送入多路模拟开关;由单片机逐路选通模拟开关将各输入通道的信号逐一送入程控增益放大器,放大后的信号经A/D转换器转换成相应的脉冲信号后送入单片机中;单片机根据仪器所设定的初值进行相应的数据运算和处理(如非线性校正等);运算的结果被转换为相应的数据进行显示和打印;同时单片机把运算结果与存储于片内FlashROM(闪速存储器)或E2PROM(电可擦除存贮器)内的设定参数进行运算比较后,根据运算结果和控制要求,输出相应的控制信号(如报警装置触发、继电器触点等)。
此外,智能仪器还可以与PC机组成分布式测控系统,由单片机作为下位机采集各种测量信号与数据,通过串行通信将信息传输给上位机——PC机,由PC机进行全局管理。
伴随着网络技术的飞速发展,Internet技术正在逐渐向工业控制和智能仪器仪表系统设计领域渗透,实现智能仪器仪表系统基于Internet的通讯能力以及对设计好的智能仪器仪表系统进行远程升级、功能重置和系统维护。
因此,智能仪表有着无限的发展前景。
定义智能仪器的定义:智能仪器是含有微型计算机或者微型处理器的测量仪器,拥有对数据的存储运算逻辑判断及自动化操作等功能。
意义智能仪器的出现,极大地扩充了传统仪器的应用范围。
智能仪器凭借其体积小、功能强、功耗低等优势,迅速地在家用电器、科研单位和工业企业中得到了广泛的应用。
1、智能仪器的工作原理传感器拾取被测参量的信息并转换成电信号,经滤波去除干扰后送入多路模拟开关;由单片机逐路选通模拟开关将各输入通道的信号逐一送入程控增益放大器,放大后的信号经A/D转换器转换成相应的脉冲信号后送入单片机中;单片机根据仪器所设定的初值进行相应的数据运算和处理(如非线性校正等);运算的结果被转换为相应的数据进行显示和打印;同时单片机把运算结果与存储于片内FlashROM(闪速存储器)或E?2PROM(电可擦除存贮器)内的设定参数进行运算比较后,根据运算结果和控制要求,输出相应的控制信号(如报警装置触发、继电器触点等)。
智能仪器有课程设计

智能仪器有课程设计一、教学目标本课程的学习目标包括以下三个方面:1.知识目标:学生需要掌握智能仪器的基本原理、主要组成部分及其功能,了解智能仪器在现代工业和日常生活中的应用,并能够分析简单的智能仪器故障。
2.技能目标:学生能够运用所学知识对智能仪器进行基本的操作和维护,具备使用智能仪器进行数据采集和分析的能力,并能够根据实际需求对智能仪器进行适当的改造。
3.情感态度价值观目标:学生应该认识到智能仪器在现代社会中的重要性,理解科技对人类生活的影响,培养对科技创新的积极态度,同时增强安全意识和责任意识,确保在使用智能仪器过程中的安全。
在制定这些目标时,我们充分考虑了课程性质、学生特点和教学要求,力求使目标具体、可衡量,以便学生和教师能够清晰地了解课程的预期成果。
二、教学内容本课程的教学内容主要包括以下几个部分:1.智能仪器的基本原理:介绍智能仪器的工作原理、传感器技术、信号处理技术等。
2.智能仪器的组成部分:讲解智能仪器的主要组成部分,如传感器、执行器、控制器等,并阐述各部分的作用和相互关系。
3.智能仪器的功能与应用:介绍智能仪器在工业生产、医疗保健、日常生活等方面的应用案例。
4.智能仪器的操作与维护:教授智能仪器的操作方法、维护技巧和安全注意事项。
5.智能仪器的故障分析与维修:学习如何分析智能仪器的故障原因,并掌握基本的维修方法。
在教学内容时,我们确保了内容的科学性和系统性,制定了详细的教学大纲,以便于教学的安排和进度的控制。
三、教学方法为了提高教学效果,我们将采用多种教学方法,包括:1.讲授法:教师通过讲解智能仪器的基本原理、功能和应用,使学生掌握相关知识。
2.讨论法:学生就智能仪器的操作、维护和故障分析等问题进行讨论,提高学生的思考和解决问题的能力。
3.案例分析法:通过分析具体的智能仪器应用案例,使学生更好地理解智能仪器的实际应用。
4.实验法:安排实验室实践环节,让学生亲自动手操作智能仪器,提高学生的实践能力。
智能仪器仪表的课程设计
智能仪器仪表的课程设计一、课程目标知识目标:1. 理解智能仪器仪表的基本概念、分类及工作原理;2. 掌握智能仪器仪表的主要技术参数及其在工程中的应用;3. 了解智能仪器仪表的发展趋势及其在现代测量技术中的作用。
技能目标:1. 能够正确操作智能仪器仪表,进行基本的数据采集和处理;2. 学会使用相关软件对智能仪器仪表进行编程与调试;3. 能够分析并解决智能仪器仪表使用过程中出现的问题。
情感态度价值观目标:1. 培养学生对智能仪器仪表的兴趣,激发其学习热情;2. 培养学生的团队合作意识,使其在实验和实践中学会相互协作;3. 增强学生的创新意识,鼓励他们关注智能仪器仪表领域的新技术、新动态。
课程性质:本课程属于实践性较强的学科,注重理论知识与实际操作相结合。
学生特点:初三学生具备一定的物理知识基础,对新技术有强烈的好奇心,动手操作能力强。
教学要求:结合学生特点,注重启发式教学,引导学生主动探究,提高学生的实践能力和创新能力。
在教学过程中,将课程目标分解为具体的学习成果,便于教学设计和评估。
二、教学内容1. 智能仪器仪表概述- 介绍智能仪器仪表的定义、分类及其应用领域;- 分析智能仪器仪表与传统仪器的区别。
2. 智能仪器仪表工作原理与技术参数- 深入讲解智能仪器仪表的核心部件及其工作原理;- 学习智能仪器仪表的主要技术参数,如精度、分辨率、稳定性等。
3. 智能仪器仪表的操作与应用- 学习智能仪器仪表的操作方法,包括硬件连接、软件配置等;- 探讨智能仪器仪表在不同工程领域的应用案例。
4. 智能仪器仪表编程与调试- 掌握相关软件的使用,进行智能仪器仪表的编程与调试;- 学习简单的程序设计,实现对智能仪器仪表的控制。
5. 智能仪器仪表发展趋势与新技术- 分析智能仪器仪表的发展趋势,了解行业动态;- 介绍新型智能仪器仪表及其在现代测量技术中的应用。
教学内容安排与进度:第一周:智能仪器仪表概述第二周:智能仪器仪表工作原理与技术参数第三周:智能仪器仪表的操作与应用第四周:智能仪器仪表编程与调试第五周:智能仪器仪表发展趋势与新技术教材章节关联:《物理》第九章第三节:传感器及其应用《信息技术》第四章第二节:智能控制系统及应用教学内容注重科学性和系统性,结合课程目标,有序组织教学,使学生掌握智能仪器仪表的基础知识,培养其实践操作能力。
智能仪器课程设计报告
智能型温度测量仪报告题目:智能型温度测量仪院别:机电工程与自动化专业:生产过程自动化技术班级: xxx姓名: xxxXxxXxx指导老师: xxx目录引言................................................. 错误!未定义书签。
一、系统设计任务及要求........................................... - 2 -1.1系统设计任务 (2)1.2系统设计的基本要求 (2)1.3系统概述 (2)二、系统总体设计................................................. - 2 -整体设计方案的确定 (2)三、硬件电路设计及工作原理....................................... - 3 -3.1参数采集模块设计 (3)3.2显示温度模块和显示时钟介绍 (3)3.3具体硬件电路原理分析 (4)四、软件设计...................................................... - 7 -4.1主程序流程图 (7)4.2DS18B20温度读取程序(如图9) (8)4.3DS18B20温度传感器初始化 (8)4.4读出温度子程序 (9)4.5DS18B20的读写时序 (10)4.6按键流程图 (12)五、主要技术指标的测量........................................... - 12 -六、结论......................................................... - 13 -结束语........................................................... - 14 -附录:硬件原理图.................................................. - 15 -引言:温度是日常生活、工业、医学、环境保护、化工、石油等领域最常遇到的一个物理量,也是工业控制中主要的被控参数之一。
智能仪器课程设计
智能仪器课程设计班级:姓名:学号:目录一.实验目的: (3)二.实验要求: (3)三.硬件原理 (3)1.单片机最小系统: (3)2.数码管 (4)1.数码管功能使用: (4)2.数码管说明 (4)3数码管原理图 (5)3.LED灯 (5)4.矩阵按键 (6)1.矩阵键盘的功能使用 (6)2.矩阵键盘的结构与工作原理 (6)5.DA/AD转换PCF8591 (6)6.I2C总线 (7)1.I2C总线基本结构: (8)2.双向传输的接口特性 (8)3.数据的传送 (9)4.I2C总线的数据传送格式: (9)5.总线竞争的仲裁: (10)6.应用领域 (10)四.软件原理 (10)1.LED动态显示 (10)1.显示原理 (10)2.键盘 (12)1.键盘扫描原理 (12)2.键盘扫描子程序 (12)五.设计心得 (14)六.参考文献 (14)七.附录 (15)1.程序 (15)原理图 (23)PCB (24)波形发生器一.实验目的:1.掌握动态LED显示及键盘设计原理;对智能仪器中最基本的输入输出设备具有感性认识2.熟练掌握HC6800开发板的使用3.通过一个相当对完整的程序编程;能够将单片机知识和智能仪器的设计融会贯通;同时掌握对智能仪器的软硬件构成及硬件软化方法..二.实验要求:1.显示亮度大致均匀..2.按键需去抖3.运行程序首先显示以下内容:HELLO4.通过按键显示相应的波形;通过DA输出..5.输出波形时;数码管显示频率;发光管指示波形种类..6.编写实验报告..三.硬件原理1.单片机最小系统:cpu 为STC89系列增强型8位单片机;频率高达80MHz;可工作于6Clock;32I/O;3定时器;内置WDT、EEPROM..支持ISP;ESD..晶振采用12M/11.0592可更换..2.数码管1.数码管功能使用:有2 组四位动态数码管和1个一位静态数码管..当使用四位动态数码管时;用8位排线将J12与单片机的I/O口脚相连;当使用一位静态数码管时;有两种连接方式:1.用8P排线将JP3与单片机的I/O口脚相连;实现用单片机I/O脚直接控制数码管..2.用8P排线将JP2与JP3相连;然后将JP12用短路冒全部短接;此时为单片机控制74HC595;;7HC595再控制数码管的动态扫描..2.数码管说明数码管实际上是由7个发光管组成的8字形构成的;加上小数点就是8个;动态扫描显示接口是单片机中应用最为广泛的一种显示方式..其接口电路是把所有显示器的8个笔划a-h同名端连在一起;而每一个显示器的公共极COM是各自独立地接受I/O口线控制..CPU 向各字段输出口送出字形码时;所有显示器均接收到相同的字形码;但究竟是那个显示器亮;取决于COM端所以就可以自行决定何时显示哪一位了..所谓动态扫描就是指我们采用分时的方法;轮流控制各个显示器的COM端;使各个显示器轮流点亮..每位显示器的点亮时间是极为短暂的约1ms;但由于人的视觉暂留现象及发光二极管的余晖效应;尽管实际上各位显示器并非同时点亮;但只要扫描的速度足够快;给人的印象就是一组稳定的显示数据;不会有闪烁感..3数码管原理图3.LED灯JP1为8路LED灯的接口;使用此功能时;将JP1与JP8-JP11中任何接口相连;即可实现单片机控制8路LED..原理图4.矩阵按键1.矩阵键盘的功能使用JP4为矩阵键盘的接口;p10—P13为行;p14-p16为列..使用8P排线把JP4与JP8-JP11中任何接口相连;实现矩阵键盘的功能..2.矩阵键盘的结构与工作原理当键盘中按键数量较多时为了减少I/O口德占用;通常将按键排列成矩阵形式..在矩阵键盘中;每条水平线和垂直线在交叉处不直接连通;而是通过一个按键加以连接..这样一个端口就可以构成4*4个按键;比直接将端口线用于键盘多出了一倍;而且线数越多;区别越明显;在需要的键数较多时;采用矩阵法来做键盘是合理的..矩阵式的键盘显然比直接法复杂一些;识别也要复杂一些..原理图:5.DA/AD转换PCF8591Pcf8591使用I2C与单片机通信;P2.1SDA串行数据线;P2.0SCL串行时钟线..AD0和AD1是两路模拟输入;改变AD0和AD1位置的电位器;实现了两路模拟输入;在数码管中可以看到数值变化..当PCF8591数模端口数据变化时;DA位置的LED亮度随之改变..PCF8591T介绍:PCF8591是Philips生产的8位分辨率D/A、A/D转换集成芯片;有4路模拟输入;1路模拟输出;一个I2CBUS接口;3个给硬件编程的脚..通过I2C总线与处理器通信;其价格低廉;接口简单;转换控制容易等优点;在单片机应用系统中得到了广泛的应用..AIN0-AIN3:模拟输出A/D转换AOUT:模拟输出D/A转换A0-A2:硬件设备地址GND:电源负极地VREF:参考电压输入EXT:振荡器输入时;内部/外部的切换开关OSC:振荡器输入/输出SCL:I2C BUS时钟输入SDA:I2CBUS 数据输入输出AGND:模拟地;模拟信号和基准电源的参考地原理图:6.I2C总线I2c总线是一种基于IC器件之间连接的二线制总线..它通过SDA串行数据线及SCL串行时钟线两根线在连到总线上的器件之间传送信息;并根据地址识别每个器件:不管是单片机;存储器;LCD驱动器还是键盘接口..1.I2C总线基本结构:采用I2C总线标准的单片机IC器件;其内部结构不仅有I2C接口电路;而且将内部各单元电路电路按功能划分为若干相对独立的模块;通过软件寻址实现片选;减少了器件片选的连接..CPU不仅能通过指令将某个功能单元电路挂靠摘离总线;还可对该单元的工作状况进行检测;从而实现对硬件系统的既简单又灵活的扩展与控制..I2C总线接口电路原理图:2.双向传输的接口特性传统的单片机串行接口的发送和接收一般都各用一条线;如MCS51系列的TXD和RXD..而I2C总线则根据器件的功能通过软件程序使其可工作于发送接收方式..当某个器件向总线上发送信息时;它就是发送器也称主器件;而当其从总线上接收信息时;又成为接收器也叫从器件..主器件用于启动总线上传送数据并产生时钟;以开放送的器件;此时;任何被寻址的器件均本人为是从器件..I2C总线的控制完全由挂接在总线上的主器件送出的地址和数据决定..在在总线上;既没有中心机;也没有优先机..总线上主和从即发送和接收的关系不是一成不变的;而是取决于此时数据传送的方向..SDA和SCL均为双向输入输出线;通过上拉电阻接正电源..当总线空闲时;两根线都是高电平..;连接总线的器件的输出级必须是集电极或漏极开路;以具有“线”与功能..I2C 总线的数据数据传送速率在标准工作方式下为100kbit/S;在快速方式下;最高传送速率可达400kbit/s.在实际应用中;一般只有单片机能够发送CLK;因此;只有单片机能够作为主器件;其余I2C器件均为从器件..多单片机系统通常很少应用..I2C总线上的时钟信号在I2C总线上传送信息时的时间同步信号是由挂接在SCL 时钟器件的逻辑与完成的..SCl线上由高电平到低电平的跳变将影响这些器件;一旦某个器件的SCl线跳变为低电平;使SCL上的所有器件进入低电平期..此时低电平周期短的器件的时钟由低至高的跳变不能影响SCL线的状态;于是这些器件将进入高电平等待的状态;当所有器件的时钟信号都跳变为高电平时;低电平期结束..SCL线被释放SCL 线被释放返回高电平;即所有的器件都同时开始它们的高电平期..其后;第一个结束高电平期的器件又将SCL 线拉成低电平..这样就在SCL 线上产生一个同步时钟..可见;时钟低电平时间由时钟低电平期最长的器件确定;而时钟高电平时间由时钟高电平期最短的器件确定..3.数据的传送在数据传送过程中;必须确认数据传送的开始和结束..在I2C 总线技术规范中;开始和结束信号也称启动和停止信号的定义如图所示..当时钟线SCL 为高电平时;数据线SDA 由高电平跳变为低电平定义为"开始"信号;当SCL 线为高电平时;SDA 线发生低电平到高电平的跳变为"结束"信号..开始和结束信号都是由主器件产生..在开始信号以后;总线即被认为处于忙状态;在结束信号以后的一段时间内;总线被认为是空闲的..4.I2C总线的数据传送格式:在I2C总线开始信号后;送出的第一个字节数据是用来选择器件地址的;其中前七位为地址码;第八位为方向位;方向位为0表示发送;即主器件把信息写到所选择的从器件;方向位为1表示主器件将从从器件读信息..开始信号后;系统中的各个器件将自己的地址和主器件送到总线上的地址进行比较;如果与主器件发送到总线上的地址一致;则该器件即为被主器件寻址的器件;其接收信息还是发送信息则由第八位确定..在I2C总线上每次传送的数据字节数不限;但每一个字节必须为8位;而且每个传送的字节后面必须跟一个认可位;也叫应答位..数据的传送过程:每次都是先传最高位通常从器件在接收到每个字节后都会做出响应;即释放SCL线返回高电平;准备接受下一个数据字节;主器件可继续传送..如果从器件正在处理一个实时事件而不能接收数据时;例如正在处理一个内部中断;在这个中断处理完之前就不能接受I2C总线上的数据字节可以使时钟SCl线保持低电平;从器件必须使SDA保持高电平;此时主器件产生1个结束信号;使传送异常结束;迫使主器件处于等待状态..当从器件处理完毕时;释放SCL线;主器件继续传送..当主器件发送完一个字节的数据时;接着发出对应于SCL线上的一个时钟ACK认可位;在此时钟内主器件释放SDA线一个字节传送结束;而从器件的响应信号将SDA线拉成低调平;使SDA在该时钟的高电平期间为稳定的低电平..从器件的响应信号结束后;SDA线返回高电平;进入下一个传送周期..5.总线竞争的仲裁:总线上可能挂接有多个器件;有时会发生两个或多个主器件想同时占用总线的情况;例如:多单片机系统中;可能在某一时刻有两个单片机要同时向总线发送数据;这种情况叫总线竞争..I2C总线具有多主控能力;可对发生在SDA线上的总线竞争进行仲裁;其仲裁原则是:当多个主器件同时想占用总线时;如果某个主器件发送高低阿平;而另一个主器件发送低电平;则发送电平与此时SDA总线电平不符合的那个器件将自动关闭其输出级..总线竞争的仲裁是在两个层次上进行的..首先是地址位的比较;从而确保了竞争仲裁的可靠性..由于利用I2C总线上的信息进行仲裁;因此不会造成信息的丢失..6.应用领域I2C总线接口器件目前在视频处理;移动通信;等领域采用I2C总线接口器件已经比较普遍..另外;通用的I2C总线接口器件;如带I2C总线的单片机;RAM;ROM;A/D;D/A;LCD驱动器等器件;也越来越多的应用于计算机及自动控制系统中..四.软件原理1.LED动态显示1.显示原理LED的静态显示虽然有编程容易;管理简单等优点;但静态显示所要占用的IO口资源很多;所以在显示的LED较多的情况下;一般采用动态显示方式..数码管实际上是由7个发光管组成的8字形构成的;加上小数点就是8个;动态扫描显示接口是单片机中应用最为广泛的一种显示方式..其接口电路是把所有显示器的8个笔划a-h同名端连在一起;而每一个显示器的公共极COM是各自独立地接受I/O口线控制..CPU向各字段输出口送出字形码时;所有显示器均接收到相同的字形码;但究竟是那个显示器亮;取决于COM 端所以就可以自行决定何时显示哪一位了..所谓动态扫描就是指我们采用分时的方法;轮流控制各个显示器的COM端;使各个显示器轮流点亮..每位显示器的点亮时间是极为短暂的约1ms;但由于人的视觉暂留现象及发光二极管的余晖效应;尽管实际上各位显示器并非同时点亮;但只要扫描的速度足够快;给人的印象就是一组稳定的显示数据;不会有闪烁感显示子程序:#include <reg51.h>#include <intrins.h>sbit LS138A = P2^2; //定义138译码器的输入A脚由P2.2控制sbit LS138B = P2^3; //定义138译码器的输入脚B由P2.3控制sbit LS138C = P2^4; //定义138译码器的输入脚C由P2.4控制void delayunsigned int i; //函数声名char DelayCNT;//此表为LED 的字模; 共阴数码管0-9 -unsigned char code Disp_Tab = {0x3f;0x06;0x5b;0x4f;0x66;0x6d;0x7d;0x07;0x7f;0x6f;0x40};main{unsigned int i;LedNumVal=1 ;unsigned int LedOut10;DelayCNT=0;while1 //进入循环状态{if++DelayCNT>=50{DelayCNT=0; //延时计数每扫描一次加一次++LedNumVal; //每隔50个扫描周期加一次}LedOut0=Disp_TabLedNumVal%10000/1000;LedOut1=Disp_TabLedNumVal%1000/100|0x80;LedOut2=Disp_TabLedNumVal%100/10;LedOut3=Disp_TabLedNumVal%10;LedOut4=Disp_TabLedNumVal%10000/1000; //千位LedOut5=Disp_TabLedNumVal%1000/100|0x80; //百位带小数点LedOut6=Disp_TabLedNumVal%100/10; //十位LedOut7=Disp_TabLedNumVal%10; //个位for i=0; i<9; i++ //实现8位动态扫描循环{ P0 = LedOuti; //将字模送到P0口显示switchi {case 0:LS138A=0; LS138B=0; LS138C=0; break;case 1:LS138A=1; LS138B=0; LS138C=0; break;case 2:LS138A=0; LS138B=1; LS138C=0; break;case 3:LS138A=1; LS138B=1; LS138C=0; break;case 4:LS138A=0; LS138B=0; LS138C=1; break;case 5:LS138A=1; LS138B=0; LS138C=1; break;case 6:LS138A=0; LS138B=1; LS138C=1; break;case 7:LS138A=1; LS138B=1; LS138C=1; break;}delay150;}}}void delayunsigned int i{char j;fori; i > 0; i--forj = 200; j > 0; j--;}2.键盘1.键盘扫描原理在键盘中按键数量较多时;为了减少I/O口的占用;通常将按键排列成矩阵形式..在矩阵式键盘中;每条水平线和垂直线在交叉处不直接连通;而是通过一个按键加以连接..这样;一个端口就可以构成4*4=16个按键;比之直接将端口线用于键盘多出了一倍;而且线数越多;区别越明显;比如再多加一条线就可以构成20键的键盘;而直接用端口线则只能多出一键..由此可见;在需要的键数比较多时;采用矩阵法来做键盘是合理的..矩阵式结构的键盘显然比直接法要复杂一些;识别也要复杂一些;列线通过电阻接正电源;并将行线所接的单片机的I/O口作为输出端;而列线所接的I/O口则作为输入..这样;当按键没有按下时;所有的输入端都是高电平;代表无键按下..行线输出是低电平;一旦有键按下;则输入线就会被拉低;这样;通过读入输入线的状态就可得知是否有键按下了..2.键盘扫描子程序#include <reg51.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intuchar dis_buf; //显示缓存uchar temp;uchar key; //键顺序吗void delay0uchar x; //x*0.14MS#define delayNOP; {_nop_;_nop_;_nop_;_nop_;};unsigned char code LED7Code ={~0x3F;~0x06;~0x5B;~0x4F;~0x66;~0x6D;~0x7D;~0x07;~0x7F;~0x6F;~0x77;~0x7C;~0x39;~0x5E;~0 x79;~0x71};void delayuchar x{ uchar j;whilex--=0{ forj=0;j<125;j++{;}}}void keyscanvoid{ temp = 0;P1=0xF0; //高四位输入行为高电平列为低电平delay1;temp=P1; //读P1口temp=temp&0xF0; //屏蔽低四位temp=~temp>>4|0xF0;iftemp==1 // p1.4 被拉低key=0;else iftemp==2 // p1.5 被拉低key=1;else iftemp==4 // p1.6 被拉低key=2;else iftemp==8 // p1.7 被拉低key=3;elsekey=16;P1=0x0F; //低四位输入列为高电平行为低电平delay1;temp=P1; //读P1口temp=temp&0x0F;temp=~temp|0xF0;iftemp==2 // p1.1 被拉低key=key+0;else iftemp==4 // p1.2 被拉低key=key+4;else iftemp==8 // p1.3 被拉低key=key+8;elsekey=16;dis_buf = key; //键值入显示缓存dis_buf = dis_buf & 0x0f;}void keydownvoid{P1=0xF0;ifP1=0xF0 //判断按键是否按下如果按钮按下会拉低P1其中的一个端口{keyscan; //调用按键扫描程序}}main{P0=0xFF; //置P0口P1=0xFF; //置P1口delay10; //延时while1{keydown; //调用按键判断检测程序P0 = LED7Codedis_buf%16&0x7f; //LED7 0x7f为小数点共阴和共阳此处也是不一样; %16表示输出16进制}}五.设计心得通过这次课程设计;加深了对知识的理解;也非常的清楚的认识了这门课程的重要性;也意识到了自己在程序设计方面的薄弱性..希望在以后的学习和工作中能进一部的加强自己专业素质和实践动手能力;并在单片机程序设计语言方面要实现从汇编语言到 C 语言的跳转..六.参考文献1.赵新民;王祁智能仪器设计基础..哈尔滨工业大学出版社七.附录1.程序#include <reg51.h>#include <intrins.h>#define _Nop _nop_ /*定义空指令*/#define uchar unsigned char#define uint unsigned intuchar code saw_tab={ //每隔数字8;采取一次0xc0;0xbc;0xb8;0xb4;0xb0;0xac;0xa8;0xa4;0xa0;0x9c;0x98; 0x94;0x90;0x8c;0x88;0x84;0x80;0x7c;0x78;0x74;0x70;0x6c;0x68;0x64;0x60;0x5c;0x58;0x54;0x50; 0x4c;0x48;0x44;0x40;0x3c;0x38;0x34;0x30;0x2c;0x28;0x24;0x20;0x1c;0x18;0x14;0x10;0x0c;0x08;0x04;0x00};uchar code maichong_tab={ 255;255;255;255;255;2550;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0; 0;0;0;0;0;0;0;0;0;0;};uchar dis_buf; //显示缓存uchar temp;uchar key;flag=0; //键顺序吗void delay0uchar x; //x*0.14MS#define delayNOP; {_nop_;_nop_;_nop_;_nop_;};sbit LS138A = P2^2; //定义138译码器的输入A脚由P2.2控制sbit LS138B = P2^3; //定义138译码器的输入脚B由P2.3控制sbit LS138C = P2^4; //定义138译码器的输入脚C由P2.4控制void delay9unsigned int i; //函数声名char DelayCNT;//此表为LED 的字模; 共阴数码管0-9 -unsigned char code Disp_Tab = {0x3f;0x06;0x5b;0x4f;0x66;0x6d;0x7d;0x07;0x7f;0x6f;0x40}; unsigned char code Disp_Tab1 = {0x76;0x79;0x38;0x38;0x3f};bit ack; /*应答标志位*/sbit SCL=P2^1; //I2C 时钟sbit SDA=P2^0; //I2C 数据void Start_I2c{SDA=1; /*发送起始条件的数据信号*/_Nop;SCL=1;_Nop; /*起始条件建立时间大于4.7us;延时*/_Nop;_Nop;_Nop;_Nop;SDA=0; /*发送起始信号*/_Nop; /* 起始条件锁定时间大于4μs*/_Nop;_Nop;_Nop;_Nop;SCL=0; /*钳住I2C总线;准备发送或接收数据*/_Nop;_Nop;}void Stop_I2c{SDA=0; /*发送结束条件的数据信号*/_Nop; /*发送结束条件的时钟信号*/SCL=1; /*结束条件建立时间大于4μs*/_Nop;_Nop;_Nop;_Nop;_Nop;SDA=1; /*发送I2C总线结束信号*/_Nop;_Nop;_Nop;_Nop;}void SendByteunsigned char c{unsigned char BitCnt;forBitCnt=0;BitCnt<8;BitCnt++ /*要传送的数据长度为8位*/ {ifc<<BitCnt&0x80SDA=1; /*判断发送位*/else SDA=0;_Nop;SCL=1; /*置时钟线为高;通知被控器开始接收数据位*/ _Nop;_Nop; /*保证时钟高电平周期大于4μs*/_Nop;_Nop;_Nop;SCL=0;}_Nop;_Nop;SDA=1; /*8位发送完后释放数据线;准备接收应答位*/ _Nop;_Nop;SCL=1;_Nop;_Nop;_Nop;ifSDA==1ack=0;else ack=1; /*判断是否接收到应答信号*/SCL=0;_Nop;_Nop;}unsigned char RcvByte{unsigned char retc;unsigned char BitCnt;retc=0;SDA=1; /*置数据线为输入方式*/forBitCnt=0;BitCnt<8;BitCnt++{_Nop;SCL=0; /*置时钟线为低;准备接收数据位*/_Nop;_Nop; /*时钟低电平周期大于4.7μs*/_Nop;_Nop;_Nop;SCL=1; /*置时钟线为高使数据线上数据有效*/_Nop;_Nop;retc=retc<<1;ifSDA==1retc=retc+1; /*读数据位;接收的数据位放入retc中*/_Nop;_Nop;}SCL=0;_Nop;_Nop;returnretc;}void Ack_I2cbit a{ifa==0SDA=0; /*在此发出应答或非应答信号*/else SDA=1;_Nop;_Nop;_Nop;SCL=1;_Nop;_Nop; /*时钟低电平周期大于4μs*/_Nop;_Nop;_Nop;SCL=0; /*清时钟线;钳住I2C总线以便继续接收*/ _Nop;_Nop;}void delay9unsigned int i{char j;fori; i > 0; i--forj = 200; j > 0; j--;}bit DACconversionunsigned char sla;unsigned char c; unsigned char Val{Start_I2c; //启动总线SendBytesla; //发送器件地址ifack==0return0;SendBytec; //发送控制字节ifack==0return0;SendByteVal; //发送DAC的数值ifack==0return0;Stop_I2c; //结束总线return1;void delayuint x{ uchar j;whilex--=0{ forj=0;j<125;j++{;}}}void keyscanvoid{ temp = 0;P1=0xF0; //高四位输入行为高电平列为低电平delay1;temp=P1; //读P1口temp=temp&0xF0; //屏蔽低四位temp=~temp>>4|0xF0;iftemp==1 // p1.4 被拉低key=0;else iftemp==2 // p1.5 被拉低key=1;else iftemp==4 // p1.6 被拉低key=2;else iftemp==8 // p1.7 被拉低key=3;elsekey=16;P1=0x0F; //低四位输入列为高电平行为低电平delay1;temp=P1; //读P1口temp=temp&0x0F;temp=~temp|0xF0;iftemp==2 // p1.1 被拉低key=key+0;else iftemp==4 // p1.2 被拉低key=key+4;else iftemp==8 // p1.3 被拉低key=key+8;elsekey=16;dis_buf = key; //键值入显示缓存dis_buf = dis_buf & 0x0f;void keydownvoid{P1=0xF0;ifP1=0xF0 //判断按键是否按下如果按钮按下会拉低P1其中的一个端口{keyscan; //调用按键扫描程序}}void delay5unsigned int time{fortime;time>0;time--;}void bmain{uint h=50;P0=0xFF; //置P0口P1=0xFF; //置P1口delay10; //延时whileh--{unsigned int i;unsigned int LedOut10;LedOut0=Disp_Tabkey%10000/1000;LedOut1=Disp_Tabkey%1000/100|0x80;LedOut2=Disp_Tabkey%100/10;LedOut3=Disp_Tabkey%10;LedOut4=Disp_Tabkey%10000/1000; //千位LedOut5=Disp_Tabkey%1000/100|0x80; //百位带小数点LedOut6=Disp_Tabkey%100/10; //十位LedOut7=Disp_Tabkey%10; //个位for i=0; i<9; i++ //实现8位动态扫描循环{P0 = LedOuti; //将字模送到P0口显示switchi //使用switch 语句控制位选{case 0:LS138A=0; LS138B=0; LS138C=0; break;case 1:LS138A=1; LS138B=0; LS138C=0; break;case 2:LS138A=0; LS138B=1; LS138C=0; break;case 3:LS138A=1; LS138B=1; LS138C=0; break;case 4:LS138A=0; LS138B=0; LS138C=1; break;case 5:LS138A=1; LS138B=0; LS138C=1; break;case 6:LS138A=0; LS138B=1; LS138C=1; break;case 7:LS138A=1; LS138B=1; LS138C=1; break;}delay9150;}}}void saw{long int l;forl=0;l<50;{ l++;DACconversion0x90;0x40; saw_tabl; //data byte}}void maichong{long int l;forl=0;l<216;{ l=l+2;DACconversion0x90;0x40; maichong_tabl; //data byte }}main{ uint h=50;P0=0xFF; //置P0口P1=0xFF; //置P1口delay10whileh--{unsigned int i;unsigned int LedOut110;LedOut10=Disp_Tab10;LedOut11=Disp_Tab11;LedOut12=Disp_Tab12;LedOut13=Disp_Tab13;LedOut14=Disp_Tab14;LedOut15=Disp_Tab15;for i=0; i<5; i++ //实现8位动态扫描循环{P0 = LedOut1i; //将字模送到P0口显示switchi //使用switch 语句控制位选{case 0:LS138A=0; LS138B=0; LS138C=0; break;case 1:LS138A=1; LS138B=0; LS138C=0; break;case 2:LS138A=0; LS138B=1; LS138C=0; break;case 3:LS138A=1; LS138B=1; LS138C=0; break;case 4:LS138A=0; LS138B=0; LS138C=1; break;case 5:LS138A=1; LS138B=0; LS138C=1; break;case 6:LS138A=0; LS138B=1; LS138C=1; break;case 7:LS138A=1; LS138B=1; LS138C=1; break;}delay9150;}}while1{keydown; //调用按键判断检测程序bmain;ifkey==0{while1{saw;keydown; //调用按键判断检测程序ifkey=0break;}}else ifkey==1{while1{maichong;keydown; //调用按键判断检测程序ifkey=1break;}}}}原理图PCB1.。
智能仪器课程设计模板
《智能仪表课程设计》报告课题名称姓名学号班级名称机电与信息工程学院2012年7月目录0.任务书--------------------------------------------------------1~21.仪表的功能要求及性能指标-------------------------------32.硬件设计2.1 MCS-51单片机------------------------------------------4~52.2LED驱动芯片ZLG7290--------------------------------5~73.软件设计3.1软件设计功能需求--------------------------------------83.2 软件设计框图------------------------------------------9~124.设计实物图---------------------------------------------------135.课程设计总结------------------------------------------------14~156.附录:6.1参考文献------------------------------------------------166.2器件清单------------------------------------------------166.3设计程序-------------------------------------------------17~42《智能仪表课程设计》任务书一、课题名称时钟设计二、设计内容及设计要求三、时间安排四、应交成果应交成果包括:⏹纸质课程设计报告和电子文档;⏹可以演示的硬件和软件成1、仪表的功能要求、性能指标要求1.1 初级要求:1)用单片机的定时器产生1s的定时时间,作为秒计数时间2)当1s产生时,秒计数加1,到60s时归0并向分钟进1,分钟到60时归0并向时进1,时到24时归0并向日进1,日通过计算当时月份进行计数3)开机时,显示00-00-00,并开始计时。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告课程名称:智能仪器课程设计题目:基于AT89C52的多路数据采集系统学院:环境与化学工程系:过程装备与测控工程专业:测控技术与仪器班级:测仪093学号: 5801209094(组员:5801209092)学生姓名:邱发生(组员:马号)起讫日期: 2011-12-19~2011-12-26指导教师:杨大勇、杨俊清、熊剑摘要智能仪器设计技术课程是一门集多种技术于一体,实践性要求很高的课程。
本次课程设计以单片机为核心,结合所学的智能仪器、数字电子技术、模拟电子技术及有关电路相关的知识,使用AT89C52、AD0832(AD08090)、LED数码管(共阴或共阳)和矩阵键盘设计一个多路数据采集系统,将采集的数据用0~5V电压显示。
通过这次课程设计,进一步巩固所学的的知识,进一步深入掌握单片机,同时初步接触智能化,为找工作奠定一定的基础。
这次设计的多路数据采集系统,通过键盘来选择数据采集通道,ADC数据采集后,通过AD转换后转换成0~256的数字量,之后采集数据八次,采用平均滤波的方法消除随机干扰,最后将数字量通过标度变换转化成0~5V电压通过数码管显示出来。
改变滑动变阻器可以再数码管上显示出电压0~5V之间的变化。
在信息技术的告诉发展和人工智能应用的推先,智能仪器必将有更大发展。
测试仪器的智能化已是现代仪器发展的主流方向。
因此,学习智能仪器的工作原理、掌握新技术和设计方法无疑使十分重要的。
关键词:多种技术智能化标度变换随机干扰 AD转换- 1 -目录一、设计任务、要求 (3)二、方案总体设计与论证 (4)三、软件设计 (13)四、系统仿真与调试 (16)五、设计总结、心得体会 (17)六、参考文献 (19)附录一、课程设计的要求和内容1、设计任务:设计一个基于51单片机的智能多路数据采集系统。
2、设计要求:1)具有多路数据采集功能,至少两路以上;2)4位数据显示功能,利用电位器分压方式,通过调节电位器,能够改变输入,同时在数码管中进行显示;3)具有至少2x2的矩阵键盘,通过按键可以设置不同的采集通道,或不同的采集方式;4)具有简单的数据处理功能,如中值滤波、平均滤波等等;5)系统具有较好的模块化,功能分块合理。
备注:同时可考虑以下扩展功能:①具有数据存储功能,如扩展外部FLASH存储器等;②具有可编程程控放大功能。
3.创新部分: 键盘四个按键键值均可以正常显示,而且都正常工作。
二、方案总体设计以单片机为核心,结合AD转换、四位七段数码管、2×2键盘1、盘方案一采用AD0832、四位七段共阳极数码管、AT89C52、2×2键盘、若干电阻、若干电容以及若干导线。
2、方案二采用AD0809、四位七段共阳极数码管、AT89C52、2×2键盘、电阻若干、电容若干、晶振一个、导线若干。
3、我采用了方案一4、总体设计:设计原理:数据采集 → A/D 转换 → 平均滤波 → 标度变换→显示三、软件设计程序流程图:总流程图滤波程序↓返回原理图:源程序:ORG 0000HLJMP MAINORG 0030HMAIN:LCALL KEY ;调用键盘LCALL ADC ;调用AD转换、滤波、标度变换程序LCALL DISLAY ;调用显示子程序KEY:LCALL KS ;调用判断键盘按下否的子程序JZ YY ;判断是否有键按下,无键按下退出LCALL T10ms ;有键按下,延时10msLCALL KS ;调用判断键盘按下否的子程序JZ YY ;判断真的是有键按下吗MOV R2,#0FEH ;有键按下,将首行扫描字保存在R4中MOV R4,#00H ;存第一行行号LK1:MOV P1,R2 ;行扫描字送给P1口MOV A,P1 ;存取读键状态JB ACC.2,ONE ;判断第0列是否为0,无键按下转第1列MOV A,#00H ;存列号LJMP KP ;跳转求键号ONE: JB ACC.3,NEXT ;一列无键按下,转下行MOV A,#02H ;一列有键按下,键号#02H 送AKP: ADD A,R4 ;行号加列号PUSH ACC ;键号保护LK: LCALL KS ;等待JNZ LK ;判断键是否释放POP ACC ;入栈保护键值MOV 10H,A ;键值保存在10H单元RETNEXT: INC R4 ;行号加一MOV A,R2 ;判断两行扫描完了吗JNB ACC.1,YY ;两行扫描完,返回RL A ;未扫描完,扫描字左移一位MOV R2,A ;扫描字入R2AJMP LK1 ;转扫下一行KS: MOV P1,#0FCH ;P1.0和P1.1送低电平 P1.2和P1.3送高电平MOV A,P1 ;读键CPL A ;取反ANL A,#0CH ;高电平表示有键按下RETT10ms: MOV R7,10H ;延时10ms子程序TS1: MOV R6,#0FFHTS2: DJNZ R6,TS2DJNZ R7,TS1RETYY: RETADC:MOV R3,#00HMOV R2,#00H ;初始化MOV R5,#08 ;设置循环次数HE: LCALL ADCONV ;数据采集ADD A,R3MOV R3,ACLR AADDC A,R2MOV R2,ADJNZ R5,HE ;判断数据是否采集完毕,如果完毕进行滤波CLR C ;累加器清零MOV A,R2 ;平均滤波RRC AMOV R2,AMOV A,R3RRC AMOV R3,AMOV A,R2RRC AMOV R2,AMOV A,R3RRC AMOV R3,AMOV A,R2RRC AMOV R2,AMOV A,R3RRC AMOV R3,AMOV A,R3MOV B,#05H ;标度变换MUL ABMOV 11H,B ;变换后整数部分保存在11H单元中 MOV B,#0AHMUL ABMOV 12H,B ;小数部分保存在12H单元中RETADCONV: ;数据采集MOV A,10H ;ADD A,#02HMOV B,ACLR P3.4 NOPNOPCLR P3.5 NOPNOPSETB P3.3 NOPNOPSETB P3.4 NOPNOPCLR P3.4 MOV A,B MOV C,ACC.1 MOV P3.3,CNOPNOPSETB P3.4NOPNOPCLR P3.4MOV A,BMOV C,ACC.0 MOV P3.3,CNOPSETB P3.4NOPNOPCLR P3.4SETB P3.3NOPNOPMOV R7,#8 AD_1:MOV C,P3.3MOV ACC.0,CRL ASETB P3.4NOPNOPCLR P3.4NOPNOPDJNZ R7,AD_1MOV C,P3.3MOV ACC.0,CMOV B,AMOV R7,#8 AD_13:MOV C,P3.3MOV ACC.0,CSETB P3.4NOPNOPCLR P3.4NOPNOPDJNZ R7,AD_13CJNE A,B,ADCONVSETB P3.5CLR P3.4SETB P3.3RETDISPLY: ;显示子程序MOV DPTR,#TAB ;查表首地址MOV P2,#00H ;位选置零MOV A,10H ;键值送AMOVC A,@A+DPTR ;查表显示键值MOV P0,ASETB P2.0 ;端口置一LCALL DELAY1 ;延时CLR P2.0 ;端口清零MOV A,11H ;电压的整数部分送AMOVC A,@A+DPTR ;查表显示ANL A,#7FHMOV P0,ASETB P2.1LCALL DELAY1 ;延时CLR P2.1MOV A,12H ;小数部分送AMOVC A,@A+DPTR ;查表显示MOV P0,ASETB P2.2LCALL DELAY1 ;显示CLR P2.2MOV A,#0C1H ;最后一位显示U字表示电压VMOV P0,ASETB P2.3LCALL DELAY1 ;延时CLR P2.3RETDELAY1: ;延时R5×10 MOV R6,#50DELAY2: MOV R4,#10DJNZ R4,$DJNZ R6,DELAY2RETTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0BFH,0FFHEND四、系统仿真与调试1、仿真软件keil简介Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。
Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。
运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。
如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。
调试过程图:0通道3通道五、心得体会经过两周的课程设计,心情也是彼起彼伏,编程仿真时的焦头烂额,到仿真成功的面露微笑。
焊接出来啥现象都没有的心灰意冷和暴跳如雷,到最终圆满成功时欣喜若狂。
心情经过四次的跌宕起伏,或许课程设计就是如此,科研也是如此,人生亦如此。
围绕单片机为核心的课程设计,这是第二次,觉得两次心得是决然不同。
上一次是混混噩噩,纯属酱油男。
这一次靠着队友的持续给力,加上自己潜心钻研,老师严格要求,同学细心指导,最终我们取得胜利。
上一次老师要求也不高,只要调试仿真成功就行,这一次老师的要求是必须做出实物图,并且要实物图可以运行。
听到这句话时,我们身上的压力顿时倍增。
从课程设计至今到现在都没悠闲过,开始时看书,学编程,由于自己基础薄弱,花了大概两天时间来复习单片机这们课程。
后来试着自己编程,请教同学,大约花了三天的时间不断的编程和调试,最后我们终于成功了。
仿真成功队友半天时间久把洞洞板画好了。
接下来,我们开始查询清理器件,查询数码管、AT89C52、0832等器件的引脚图。
这些工作做完后,队友就正式开始焊接。
队友进度很快,一天就焊好了。
我们将程序烧进CPU后,上电那刻,我们心情激动带着紧张,激动时自己可以差不多收工了,紧张是如果没有成功,那留给我们将是无穷无尽的麻烦,真希望不会出现糟糕的那一幕。
可是最终不想发生事情还是发生了,上电后啥现象都没有,那一刻失望至极。
看着其它组员都成功了,心理很是着急。
我们就开始全面检查,用万用表检查是否短路和虚焊,这些检查都没有问题,我们导入显示子程序,还是没有用。