智能仪器报告_第1页
智能仪器报告_第2页
智能仪器报告_第3页
智能仪器报告_第4页
智能仪器报告_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

1、哈 尔 滨 理 工 大 学课 程 实 践 题 目:智能仪器设计 姓 名: 班 级: 学 号: 指导教师 成 绩:2016年6月16日哈尔滨理工大学课程实践目录目录I第一章 绪论11.1 实验目的11.2 实验内容11.3 实验用设备11.4 实验要求11.5 实验波形1第二章 总体方案设计22.1 工作原理2 2.3 波形发生22.4 显示部分32.5 按键部分3第三章 硬件设计33.1 硬件原理33.2 DAC接口电路设计33.3 数码管显示及键盘接口电路43.4 中央处理部分53.4.1 CPU53.4.2复位电路73.4.3 系统时钟83.5 PCB93.5.1 DAC1210 PCB板

2、9第四章 软件设计104.1 系统流程图104.2 软件程序10第五章 设计总结11参考文献11附录12第一章 绪论1.1 实验目的1、根据给定D/A转换器设计其与51单片机的接口电路,画出原理图及线路板图,掌握智能仪器模拟量输出通道的设计方法。2、通过一个相对完整的程序编程,将单片机知识和智能仪器的设计融会贯通,同时掌握对智能仪器的软硬件构成及“硬件软化”方法。1.2 实验内容设计数字式波形发生器,画出硬件电路原理图;编写程序生成各种波形,而且频率可调;确定所生成的波形频率范围;用键盘控制生成的波形及频率;数码管显示输出波形的类型及频率。1.3 实验用设备HC6800实验板,示波器,计算机,

3、电源1.4 实验要求1. 绘制DAC1210接口电路原理图及线路板图。2. 焊接D/A接口电路板。3. 编写程序完成以下任务1) 键盘识别。2) 动态LED显示。3) 使用按键通过D/A输出要求的波形并显示频率。1.5 实验波形 下半波整流正弦波 方波第二章 总体方案设计2.1 工作原理根据题目的要求,制定了整体方案:以STC89C51单片机为控制核心,DAC1210和LF356等组成DAC接口电路,其中DAC的四个控制位分别接在单片机的P14,P15,P16,P17,数据线接在单片机的P0口。利用单片机程序控制的方法不断地给DAC输入不同的数字量,可以在DAC输出端得到连续变化的波形(分别为

4、三角波和下半波整流正弦波),再由按键控制产生波形的种类及频率,在数码管上实时的显示波形的频率和种类,其中数码管位选端接在p24,p23,p22 。波形在示波器上产生。2.2 系统组成图2-2 原理图2.3 波形发生采用单片机STC89C51和数模转换芯片DAC1210实现波形的产生。通过STC89C51执行下斜锯齿波、上半波整流正弦波程序,向D/A转换器的输入端发送数据,从而在D/A转换电路输出端得到相应的电压波形。在STC89C51的P25,P26,P27口接独立按键,通过软件编程来选择波形、频率,每种波形对应一个按键,频率增加、减少对应一个按键。2.4 显示部分8段LED共阴极数码管,13

5、8译码器进行位选,P0口输出段选信号。2.5 按键部分采用独立按键,它相比较矩阵键盘,按键的数目比少,结构简单,方便操作,执行效率高。第三章 硬件设计3.1 硬件原理波形的产生是通过STC89C51单片机执行某一波形发生程序,通过这个51单片机将数字信号传入D/A转换器中,D/A转换器将数字信号转换成模拟电流信号,经过LF356芯片转换成电压信号,即产生想要输出的波形。3.2 DAC接口电路设计图3-2 DAC接口电路DAC1210是一种双缓冲的12位DAC芯片,它包含2个输入锁存器(高8位和低四位)、一个12位的DAC寄存器和一个12位的D/A转换器。片选信号与写入信号同时有效时将数字量送入

6、输入锁存器,字节控制端BYTE1/为高电平时,8位数字量同时送入输入锁存器,而此端为低电平时,只将低4位数字量送入低四位锁存器。传输控制信号与同时有效时,12位输入锁存器信号同时送进DAC寄存器。由于本设计单片机为8位单片机,所以不需两次传送。3.3 数码管显示及键盘接口电路图3-3-1 共阴极数码管接线图图3-3-2 六路独立按键本设计选择了8位共阴极数码管,它的8个发光二极管的阴极(二极管正端)连接在一起,通常公共阴极接低电平,其它管脚接驱动电路输出端。当某段驱动电路的输出端为低电平时,则该端所连接的字段导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能吸收额

7、定的位置导通电流,还需根据外接电源及额定位置导通电流来确定相应的限流电阻。显示电路用于显示信号的波形种类和信号的频率,并且使系统能根据按键实时显示相关信息。该系统中添加74LHC573 锁存器,用于驱动数码显示管,使其更易于控制,增加显示的准确性。使用74LS138 译码器,利用P0口控制数码管的位选。由LED数码管显示器和独立按键组成。当某一按键按下一次时,扫描程序扫描到之后,通过P0口将信号发送到LED。扫描及显示利用程序实现,不断扫描独立按键,当某一按键按下时,随即执行程序段,完成相应的功能。74LS573芯片 原理:本次设计我们采用动态扫描的方法显示,74LS573 的八个锁存器都是透

8、明的D 型锁存器,当使能(G)为高输出将随数据(D)输入而变。当使能为低时,输出将锁存在已建立的数据电上.输出控制不影响锁存器的内部工作,即老数据可以保持,甚至当输出被关闭时,新的数据也可以置入。这种电路可以驱动大电容或低阻抗负载,可直接与系统总线接口并驱动总线,而不需要外接口。特别适用于缓冲寄存器,I/O 通道,双向总线驱动器和工作寄存器。表3-1 74LS573芯片的真值表输出enableLatch ENABLE 启动D输出 OLHHHLHLLLLXQOHXXZ图3-3-3 74LS573芯片 3.4 中央处理部分3.4.1 CPU1、 CPU结构CPU 是单片机的核心部件。它由运算器和控

9、制器等部件组成。(1)运算器 运算器以完成二进制的算术/逻辑运算部件ALU为核心。它可以对半字节(4)、单字节等数据进行操作。例如,能完成加、减、乘、除、加1、减1、BCD码十进制调整、比较等算术运算,完成与、或、异或、求反、循环等逻操作,操作结果的状态信息送至状态寄存器。运算器还包含有一个布尔处理器,用以处理位操作。它以进位标志位C为累加器,可执行置位、复位、取反、位判断转移,可在进位标志位与其他可位寻址的位之间进行位数据传诵等操作,还可以完成进位标志位与其他可位寻址的位之间进行逻辑与、或操作。(2)程序计数器PCPC是一个16位的计数器,用于存放一条要执行的指令地址,寻址范围为64kB,P

10、C有自动加1功能,即完成了一条指令的执行后,其内容自动加1。(3)指令寄存器 指令寄存器用于存放指令代码。CPU执行指令时,由程序存储器中读取的指令代码送如指令寄存器,经指令译码器译码后由定时有控制电路发出相应的控制信号,完成指令功能。2、 存储器和特殊功能寄存器(1)存储器(Memory)是计算机系统中的记忆设备,用来存放程序和数据。计算机中的全部信息,包括输入的原始数据、计算机程序、中间运行结果和最终运行结果都保存在存储器中。它根据控制器指定的位置存入和取出信息。(2)特殊功能寄存器特殊功能寄存器(SFR)的地址范围为80HFFH。在MCS51中,除程序计数器PC和四个工作寄存器区外,其余

11、21个特殊功能寄存器都在这SFR块中。其中5个是双字节寄存器,它们共占用了26个字节。各特殊功能寄存器的符号和地址见附表2。其中带号的可位寻址。特殊功能寄存器反映了8051的状态,实际上是8051的状态字及控制字寄存器。用于CPU PSW便是典型一例。这些特殊功能寄存器大体上分为两类,一类与芯片的引脚有关,另一类作片内功能的控制用。与芯片引脚有关的特殊功能寄存器是P0P3,它们实际上是4个八位锁存器(每个I/O口一个),每个锁存器附加有相应的输出驱动器和输入缓冲器就构成了一个并行口。MCS51共有P0P3四个这样的并行口,可提供32根I/O线,每根线都是双向的,并且大都有第二功能。其余用于芯片

12、控制的寄存器中,累加器A、标志寄存器PSW、数据指针DPTR等的功能前已提及。3、 P0-P3口结构P0口功能:P0口具有两种功能:第一,P0口可以作为通用I/O接口使用,P0.7P0.0用于传送CPU的输入/输出数据。输出数据时可以得到锁存,不需外接专用锁存器,输入数据可以得到缓冲。第二,P0.7P0.0在CPU访问片外存储器时用于传送片外存储器de低8位地址,然后传送CPU对片外存储器的读写P1口 功能:P1口的功能和P0口的第一功能相同,仅用于传递I/O输入/输出数据。 P2口的功能:2口的第一功能和上述两组引脚的第一功能相同,即它可以作为通用I/O使用。它的第二功能和P0口引脚的第二功

13、能相配合,作为地址总线用于输出片外存储器的高8位地址。 P3口功能:P3口有两个功能:第一功能与其余三个端口的第一功能相同;第二功能作控制用,每个引脚都不同。 P3.0RXD串行数据接收口 P3.1TXD串行数据发送口 P3.2INT0外中断0输入 P3.3INT1外中断1输入 P3.4T0计数器0计数输入 P3.5T1计数器1计数输入 P3.6WR外部RAM写选通信号 P3.7RD外部RAM读选通信号 图3-4-1 89C51芯片及部分电路3.4.2复位电路复位操作则使单片机的片内电路初始化,使单片机从一种确定的状态开始运行。图3-4-2 复位电路单片机的复位电路在刚接通电时,刚开始电容是没

14、有电的,电容内的电阻很低,通电后,5V的电通过电阻给电容进行充电,电容两端的电会由0V慢慢的升到4V左右(此时间很短一般小于0.3秒),RC构成的微分电路在上电瞬间产生一个微分脉冲,其宽度大于两个机器周期,90C51复位。因此,复位脚的电由低电位升到高电位,引起了内部电路的复位工作,RST端电压慢慢下降,降到一定电压值以后,即为低电平,单片机开始正常工作(即上电复位,也叫初始化复位);当按下复位键时,电容两端放电,电容又回到0V了,于是又进行了一次复位工作(即手动复位)。3.4.3 系统时钟单片机的时钟信号用来提供单片机内各种微操作的时间基准 图3-4-3 系统时钟电路单片机的时钟信号通常用两

15、种电路形式得到:内部振荡和外部振荡方式。在引脚XTAL1和XTAL2外接晶体振荡器或陶瓷谐振荡器,构成了内部振荡方式。由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自积振荡,并产生振荡时钟脉冲。晶振通常选用6MHZ、12MHZ、或24MHZ。单片机的时序单位振荡周期:晶振的振荡周期,又称时钟周期,为最小的时序单位。状态周期:振荡频率经单片机内的二分频器分频后提供给片内CPU的时钟周期。因此一个状态周期包含2个振荡周期。机器周期:1个机器周期由6个状态周期12个振荡周期组成,是计算机执行一种基本操作的时间单位。指令周期:执行一条指令所需的时间。一个指令周期由1-4个机器周期组成,依

16、据指令不同而不同。3.5 PCB3.5.1 DAC1210 PCB板 图3-5PCB 图3-5 PROTUES仿真图 图3-6 PROTUES 方波仿真图 图3-6 PROTUES 下半波整流正弦波图图3-6 PROTUES 方波图 第四章 软件设计4.1 系统流程图图4-1 软件流程图4.2 软件程序按键1表示选择方波;按键2表示选择下半波整流正弦波;按键3表示选择频率变化。程序见附录。4.3答辩问题A为什么要用动态LED显示,动态和静态LED显示各有什么优缺点?答:(1)静态显示方式:静态显示方式是指当显示器显示某一字符时,发光二极管的位选始终被选中。在这种显示方式下,每一个LED数码管显

17、示器都需要一个8位的输出口进行控制。由于单片机本身提供的I/O口有限,实际使用中,通常通过扩展I/O口的形式解决输出口数量不足的问题。 静态显示主要的优点是显示稳定,在发光二极管导通电流一定的情况下显示器的亮度大,系统运行过程中,在需要更新显示内容时,CPU才去执行显示更新子程序,这样既节约了CPU的时间,又提高了CPU的工作效率。其不足之处是占用硬件资源较多,每个LED数码管需要独占8条输出线。随着显示器位数的增加,需要的I/O口线也将增加。 (2)动态显示方式:动态显示方式是指一位一位地轮流点亮每位显示器(称为扫描),即每个数码管的位选被轮流选中,多个数码管公用一组段选,段选数据仅对位选选

18、中的数码管有效。对于每一位显示器来说,每隔一段时间点亮一次。显示器的亮度既与导通电流有关,也与点亮时间和间隔时间的比例有关。通过调整电流和时间参数,可以既保证亮度,又保证显示。若显示器的位数不大于8位,则显示器的公共端只需一个8位I/O口进行动态扫描(称为扫描口),控制每位显示器所显示的字形也需一个8位口(称为段码输出)。B动态显示的亮度如何控制?答:频率适当下,用脉宽控制C如何消除动态LED显示中“暗亮”问题?答:降低扫描速度D识别按键时为什么要去抖?答:去抖动的原因:普通按键一般采用的是机械弹性开关,由于机械触点的弹性作用,在按键被按下和松开的瞬间均会伴随一连串的抖动(微观上讲),一个电压

19、信号通过触点的闭合、断开时,导致信号出现抖动(抖动时间一般5ms10ms,这个参数很重要),为了确保CPU对一次按键动作只确认一次按键,必须消除抖动的影响,进行去抖处理E按键时LED显示器有何变化,为什么?答:数码显示会发生变化,因为存在键抖动。F如示波器显示波形不理想,如何处理?答:调整同步旋钮。重新调整程序的波形发生程序和延时程序。或者需要加抗干扰电路。第5章 心得体会 课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域, 在生活中可以

20、说得是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。 在实训过程中遇到相当多的难题 。一开始大家都是一头雾水,不知道从哪里下手,而且知识严重匮乏,大家只好分工合作,纷纷查找各种资料,并且成立了一个讨论小组,共同来研究这次的课设。经过两周的努力和合作终于把这次的课设完成了。可谓苦尽甘来。 通过这次单片机课程设计,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们坚持不懈和合作精神,让我们不断超越自己。课堂上没有见过真正的单片机 ,只是从理论上去理解 ,枯燥乏味,这次的实训 ,让我大开眼界,提高了单片机知识的理解和运用水平 ,从选题

21、到定稿,从理论到实践,在整整两星期的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计我也发现了自身存在的不足之处,虽然感觉理论上已经掌握,但在运用到实践的过程中仍有意想不到的困惑,经过一番努力才得以解决。 我认为这个收获应该说是相当大的。一开始我们从参考书上找来了课题,但是毕竟是参考书,做到后来发现很多程序都是不完整的,这让我们伤透了脑筋。看着别的小组都弄得有模有样了,可是我们连一个课题都还没有定好。好不容易又找到了课题,可是结果还是很不尽人意。程序接线什么的都弄好了,调试也没有问题,可是就是无法达到预期想要的结果

22、。参考书毕竟只是一个参考,设计这种东西最后还是要靠自己动脑筋。然后我们大家一起齐心协力,从平时做的实验老师上课的举例书本上的知识以及老师的辅导和其他同学的帮助下终于完成了。另外在课程设计的过程中,当我们碰到不明白的问题时,指导老师总是耐心的讲解,给我们的设计以极大的帮助,使我们获益匪浅。因此非常感谢老师的教导。通过这次设计,我懂得了学习的重要性,了解到理论知识与实践相结合的重要意义,学会了坚持、耐心和努力,这将为自己今后的学习和工作做出了最好的榜样。我觉得作为一名工程专业的学生,这次课程设计是很有意义的。更重要的是如何把自己平时所学的东西应用到实际中。虽然自己对于这门课懂的并不多,很多基础的东

23、西都还没有很好的掌握,觉得很难,也没有很有效的办法通过自身去理解,但是靠着这一个多礼拜的“学习”,在小组同学的帮助和讲解下,渐渐对这门课逐渐产生了些许的兴趣,自己开始主动学习并逐步从基础慢慢开始弄懂它。 最后再次感谢老师和同学们的帮助。 附录参考文献主要参考文献: 1 张鑫.单片机原理及应用M. 北京:电子工业出版社,2005.8.2 梅丽凤,王艳秋,王毓铎. 单片机原理及其接口技术M.北京:清华大学出版社, 2006.8.3 张毅刚,彭喜源,谭晓昀,曲春波.MCS-51单片机应用设计M.哈尔滨:哈尔滨工业大学出版社,1997.4 张洪润,易涛. 单片机应用技术教程M. 北京:清华大学出版社,

24、2006.10.5 丁向荣,谢俊,王彩申. 单片机C 语言编程与实践M. 北京:电子工业出版社,2009.8.程序#include<reg51.h>/开发板中已经将 P2 口与 138 译码器的输入连接好了sbit LS138A = P2 2; /定义138译码器的输入A脚由P2.2来控制sbit LS138B = P2 3; /定义138译码器的输入B脚由P2.3来控制sbit LS138C = P2 4; /定义138译码器的输入C脚由P2.4来控制sbit BYTE = P2 0; /定义DAC的sbit XFER = P2 1; /定义138译码器的输入B脚由P2.3来控制

25、sbit CS = P2 5; /定义138译码器的输入C脚由P2.4来控制sbit WR_1_2 = P2 6; /定义138译码器的输入C脚由P2.4来控制#define u_char unsigned char#define u_int unsigned int#define u_long unsigned long#define KeyPort P3 /键盘#define DA_Port P1 /DA转换口u_int squ_flag=0;void Delay(u_char i);/延时函数 延时时间为 i*5*2 us/此表为 LED 的字模, 共阴数码管 0-9 - */*0 1

26、2 3 4 5 6 7 8 9 *u_char code Disp_Tab = 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f ; /*/*u_char LED_OUT = 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; /要显示的数组void DePlay();/数码管显示函数/判断键盘是否按下了*void keydown(void); /*/键盘的值得确定的函数 /*u_char keyscan(void); /*/*u_char BoxingFlage;/波形的标记 用

27、来决定输出什么波形u_int ValueFlage;/波形幅值 /正弦波u_int code DA_Sin=2048,2098,2148,2198,2248,2298,2348,2398,2447,2496,2545,2594,2642,2690,2737,2784,2831,2877,2923,2968,3013,3057,3100,3143,3185,3226,3267,3307,3346,3385,3423,3459,3495,3530,3565,3598,3630,3662,3692,3722,3750,3777,3804,3829,3853,3876,3898,3919,3939,3

28、958,3975,3992,4007,4021,4034,4045,4056,4065,4073,4080,4085,4089,4093,4094,4095,4094,4093,4089,4085,4080,4073,4065,4056,4045,4034,4021,4007,3992,3975,3958,3939,3919,3898,3876,3853,3829,3804,3777,3750,3722,3692,3662,3630,3598,3565,3530,3495,3459,3423,3385,3346,3307,3267,3226,3185,3143,3100,3057,3013,2

29、968,2923,2877,2831,2784,2737,2690,2642,2594,2545,2496,2447,2398,2348,2298,2248,2198,2148,2098,2048,1997,1947,1897,1847,1797,1747,1697,1648,1599,1550,1501,1453,1405,1358,1311,1264,1218,1172,1127,1082,1038,995,952,910,869,828,788,749,710,672,636,600,565,530,497,465,433,403,373,345,318,291,266,242,219,

30、197,176,156,137,120,103,88,74,61,50,39,30,22,15,10,6,2,1,0,1,2,6,10,15,22,30,39,50,61,74,88,103,120,137,156,176,197,219,242,266,291,318,345,373,403,433,465,497,530,565,600,636,672,710,749,788,828,869,910,952,995,1038,1082,1127,1172,1218,1264,1311,1358,1405,1453,1501,1550,1599,1648,1697,1747,1797,184

31、7,1897,1947,1997,;u_long Time_Set;/ 定时器 每隔 Time_Set us发送一次u_int nVlaue_HZ = 50;void Init_Timer0(void);/定时器初始化void main()WR_1_2=0;Init_Timer0();BoxingFlage=1;/波形默认是正弦波ValueFlage=0;/默认波形幅值是第0个while (1)keydown(); Time_Set=1000000/(nVlaue_HZ) ;/找到是哪个键摁下u_char keyscan(void)u_char KeyVal = 0;if (KeyPort !

32、= 0xFF) /判断按键是否按下 如果按钮按下 会拉低P1其中的一个端口Delay(100);if (KeyPort != 0xFF) /表示有键按下if (KeyPort = 0xFE)/K1按下KeyVal = 0;while (KeyPort = 0xFE);Delay(1000); /去抖while (KeyPort = 0xFE);if (KeyPort = 0xFD)/K2按下KeyVal = 1;while (KeyPort = 0xFD);Delay(1000); /去抖while (KeyPort = 0xFD);if (KeyPort = 0xFB)/K3按下KeyVal

33、 = 2;while (KeyPort = 0xFB);Delay(1000); /去抖while (KeyPort = 0xFB);if (KeyPort = 0xF7)/K4按下KeyVal = 3;while (KeyPort = 0xF7);Delay(1000); /去抖while (KeyPort = 0xF7);return KeyVal;return -1; return -1;/判断键盘是否按下了void keydown(void)switch (keyscan()case 0:/用来控制显示的是什么波形BoxingFlage=!BoxingFlage; /波形转换Value

34、Flage=0;/ 波形的幅值置0break;case 1:/用来控制显示的波形加加nVlaue_HZ+;break;case 2:/用来控制波形的减减nVlaue_HZ-;break;case 3:nVlaue_HZ+=10;break;/延时函数void Delay(u_char i) /一个延时函数是30US 一个for循环的时间是6USu_char j;for (i; i > 0; i-)for (j = 5; j > 0; j-);void DePlay()u_int i=0;LED_OUT0 = Disp_TabnVlaue_HZ % 10000 / 1000;LED_OUT1 = Disp_TabnVlaue_HZ % 1000 / 100;LED_OUT2 = Disp_TabnVlaue_HZ % 100 / 10;LED_OUT3 = Disp_TabnVlaue_HZ % 10 / 1;for (i = 0; i<4; i+) /实现8位动态扫描循环/将字模送到P0口显示P0 = LED_OUTi;switch (i) /使用switch

温馨提示

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

评论

0/150

提交评论