资源描述
引 言摘要:近年来随着科技的飞速发展,单片机的应用正在不断深入。在实时检测和自动控制的单片机应用系统中,其往往作为一个核心部件来使用。但是,仅单片机方面的知识是不够的,还应根据硬件结构软硬结合,加以完善。目前大多数高校都建立了单片机实验室,基本上配备了实验箱等硬件仿真设备。但实验箱硬件电路固定、实验内容较难改动,很难适应单片机技术的快速发展以及培养学生的单片机开发能力、创新能力。利用Proteus的软件仿真技术,可以在一定程度上弥补上述不足,搭建一个虚拟实验平台,可以实现更多的实践环节,提供学生自行学习的条件,对学科建设有着积极的意义。鉴于此,本文基于Proteus的单片机仿真环境,采用MICOCHIP公司的PIC系列单片机作为主控芯片与数据存储器单元,采用单片机汇编语言,设计一款测频显示电路。本设计充分发挥Proteus特点,降低成本,增强实用性,利于在高校推广本实训应用单片机与硬件结合,实现相应功能。关键字:单片机、技术、Proteus、测频显示第一章 任务内容概述1.1、实训目的设计制作一个屏幕显示器显示“频率”两字,其后加上测量频率程序,显示在数码管上,通过实验了解其构成及基本原理。1.2、 基本要求(1) 显示器点阵数目8*8,能够显示汉字。 (2) 能够用多种扫描方式进行显示。 (3) 输入脉冲幅度:0-5V (4) 频率测量范围:100-10000HZ (5) 测量精度:+-1% (6) 显示方式:四位数字显示1.3、 实训内容四位数码显示1.3.1、 硬件部分框图(见图1.1):7407驱动复位电路晶振电路8*8点阵LED显示器 P0 AT89C52 P2 PPPP2盘限流电阻74LS245晶振电路复位电路输入信号 P0 AT89C52 P2 PPPP2盘 图1.1 硬件1.3.2、电路各部分介绍(1)单片机晶振(见图1.2): 图1.2 晶振电路12M晶振和C1、C2组成振荡器,使单片机内部产生产生周期为1us的脉冲信号。(2)复位电路:由电阻,电容以及开关构成的电路接至52单片机的复位端, 起到复位作用。(3)信号源的产生: 被测信号源用的是带RC电路的环形振荡器电路图 (见图1.3):图1.3 带RC电路的环形振荡器电路如图所示。其中G3、G4用于整形,OPA335.pdf REF3025.pdf 由运放OPA335及基准电压源REF3025在LOG102输入端构成具有失调补偿的电流源电路 如图所示为由运放OPA335及基准电压源REF3025在LOG102输入端构成具有失调补偿的电流源电路。以改善输出波形,由于功率放大器在大信号下工作,R为限流电阻,问题是要把失真控制在允许范围内,一般取100,输出端连接不同的脚(3、4、5)可以得到不同的系数K(1、3、5)。电位器Rw要求不大于1K。由于两管轮流地工作,电路利用电容C充放电过程,(2)晶体管的最大集电极电压Ucm2Ec。控制D点电压VD,BG1截止、BG2导通,从而控制与非门的自动启闭,自动气体循环炉控温电路图。形成多谐振荡,Icm=IcM/2,电容C的充电时间tw1、放电时间tw2和总的振荡周期T分别为:由于输出端使用变压器, tw10.94RC,请使用27K。 tw21.26RC ,串联输入式电压反馈的基本形式电路图 T2.2RC。调节R和C的值,内部放大器A1、A2是场效应晶体管(FET)输入,可改变输出信号的振荡频率。为了克服交越失真,以上这些电路的状态转换都发生在与非门输入电平达到门的阀值电平VT的时刻。555和R1,在VT附近电容器的充放电速度已经很缓慢(1)甲类功率放大器:。而且VT本身也不够稳定,射频探头用负压源电路图如图所示,易受温度、电源电压变化等因素以及干扰的影响。对数和对数比率放大器LOG101104的偏流调零电路 如图所示为LOG101104的偏流调零电路。因此,运算放大器电路图:包含 单电源、低压、低功耗运算放大器电路图。电路输出频率的稳定性较差。 扬声器的阻抗为400欧,信号源电路由RC振荡器构成,电阻选510欧姆,电容选择0.1uf,产生矩形波后通过非门整形,非门由与非门74LS00构成,实际电路中用到四个与非门,使得整形更好,波形更稳定。根据公式 T=2.2*RC ,计算可得周期为112.2ms。(4)点阵显示电路(见图1.4): 图1.4 点阵电路 8*8点阵为单色共阳模块,单点的正向工作电压为(Vf)=1.8V,正向电流是(If)=810mA。静态点亮器件时(64点全部亮)的总电流是640mA,总电压是1.8V,总功率为1152mW。动态时取决与扫描频率(1/8s或1/16s),单点瞬间电流可达80160mA。点阵内部结构及外形如上,8X8点阵共由64个发光二极管组成,且每个发光二极管是放置在行线和列线的交叉点上,当对应的某一行置1电平,某一列置0电平,则相应的二极管就亮;如要将第一个点点亮,则9脚接高电平13脚接低电平,则第一个点就亮了;如果要将第一行点亮,则第9脚要接高电平,而(13、3、4、10、6、11、15、16)这些引脚接低电平,那么第一行就会点亮;如要将第一列点亮,则第13脚接低电平,而(9、14、8、12、1、7、2、5)接高电平,那么第一列就会点亮,点阵控制(见表1.1)。表1.1 点阵控制1控制第五行显示接高9控制第一行显示接高2控制第七行显示接高10控制第四列显示接低3控制第二列显示接低11控制第六列显示接低4控制第三列显示接低12控制第四行显示接高5控制第八行显示接高13控制第一列显示接低6控制第五列显示接低14控制第二行显示接高7控制第六行显示接高15控制第七列显示接低8控制第三行显示接高16控制第八列显示接低 其中8*8LED点阵用于显示输出,限流电阻用于保护8*8LED。驱动电路为74LS245,用于驱动8*8点阵LED显示设备,使52单片机所发出的信号的电压相对稳定,增加负载能力。(5)数码显示电路:采用的为四位联体共阴极数码管。(见图1.5)P0口来送段选信号, P0口内部并没有带上拉电阻,在接收数码管时需要在两者之间加一排阻,降低电流来保护P0口。利用了P2.4P2.7来送位选信号即哪一个数码管来亮,且送低电平时有效,数码管用动态显示的方式来显示测量的周期值。 图1.5 四位联体共阴数码管管脚在单片机与数码管之间我们采用了7407来驱动(见图1.6),7407为位6输入高压缓冲器。 图1.6 7407管脚(6)89SC52的引脚及相关功能40个引脚按引脚功能大致可分为4个种类:电源、时钟、控制和I/O引脚。(见图1.7) a. 电源: 1) VCC - 芯片电源,接+5V;2) VSS - 接地端;注:用万用表测试单片机引脚电流一般为0v或者5v,这是标准的TTL电平,但有时候在单片机程序正在工作时候测试结果并不是这个值而是介于0v-5v之间,其实这之是万用表反映没这么快而已,在某一个瞬间单片机引脚电流还是保持在0v或者5v的。b. 时钟:XTAL1、XTAL2 - 晶体振荡电路反相输入端和输出端。 图1.7 89C52管脚c. 控制线:控制线共有4根,1) ALE/PROG:地址锁存允许/片内EPROM编程脉冲 ALE功能:用来锁存P0口送出的低8位地址 PROG功能:片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。2) PSEN:外ROM读选通信号。3) RST/VPD:复位/备用电源。 RST(Reset)功能:复位信号输入端。 VPD功能:在Vcc掉电情况下,接备用电源。4) EA/Vpp:内外ROM选择/片内EPROM编程电源。 EA功能:内外ROM选择端。 Vpp功能:片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。d. I/O线80S51共有4个8位并行I/O端口:P0、P1、P2、P3口,共32个引脚。P3口还具有第二功能,用于特殊信号输入输出和控制信号(属控制总线)。 本次课程设计实训中,我的任务是完成测频电路的显示功能,给出一个信号源,测得其频率,并把数值显示在数码管上。第二章 任务实施方案2.1、测频电路硬件框图(见图2.1):晶振电路复位电路输入信号 P0 AT89C52 P2 PPPP2盘7407驱动四位数码显示排阻 图2.1 测频电路2.2、频率测量仪的设计思路:本设计对一秒钟内的输入脉冲数进行计数,计数的个数即为频率。可设置T1为定时器工作方式,定时时间为一秒。开中断。而将T0设为计数器工作方式,待测输入脉冲从P3.4输入。其计数初值清零,即TH0TL0=0000H。在一秒定时到时,在T1的中断服务程序中,读取TH0TL0中的计数值到内存中得频率单元。并随后清零TH0TL0,以便下次读数。读到的计数值即为频率值,经二一十进制转换子程序转换为十进制数,并拆为非压缩BCD码后送显示缓冲区显示。2.3、软件部分内容介绍:2.3.1、编程流程(见图2.2、2.3):主程序 定时器1中断服务程序初始化拆为非压缩BCD码调用显示子程序将测量值转换为十进数重 设TH1、TL11秒到否读TH0、TL0到频率单元清 零TH0、TL0 返回 图2.2 主程序 图2.3、定时器2.3.2、程序设计 设置T1、T0工作方式: ORG 0000H AJMP START ORG 001BH ;T1中断入口 AJMP INTT1 ORG 0200HSTART:MOV SP,#70H MOV IE,#88H ;开放T1中断 MOV TMOD,#15H ;T1定时,T0计数,都是方式1工作 MOV TH1,#3CH MOV TL1,#0B0H ;定时50ms MOV 20H,#14H ;20*50ms=1s MOV TH0,#00H MOV TL0,#00H ;计数器T0清零 MOV 21H,#00H MOV 22H,#00H SETB TR1 SETB TR0 主程序:MAIN:ACALL ZH ;调用二进制转十进制子程序 ACALL JBCD ;调用压缩BCD码转非压缩BCD码子程序 ACALL DISP ;调用显示子程序 LJMP MAIN中断服务子程序:INTT1:MOV TH1,#3CH MOV TL1,#0B0H DJNZ 20H,MSN MOV 22H,TH0 MOV 21H,TL0 MOV TH0,#00H MOV TL0,#00H MOV 20H,#14H MOV TH1,#3CH MOV TL1,#0B0H 2.3.3、 数码转换由于单片机显示的是10进制的数,所以需要将2进制数转换为10进制数来显示二进制十进制转换的流程图如下(见图2.4):因为有16位的二进制,故循环次数为16次,放在R7中。38H37H中的十六位二进制数转换为十进制后放在34H35H36H单元中开始38H 41H37H 40H034H,35H,36H16R7C(38H37H)左移一位(移出位bi在C中)(34H35H36H)*2+C(34H35H36H) (十进制运算)(R7)-1-=0?返 回NY图2.4 数码转换2.3.4、 压缩BCD码转换成非压缩BCD码压缩BCD码有4位,所以需要将压缩BCD码转换为非压缩BCD码供8段数码管显示 MOV A,34H CJNE A,#00H,PD ;判断第五位数值是否为0 为零则按四位有效值处理 不为零按5位有效值处理 MOV R1,#35H ;当有4位有效效值时 取后四位显示 小数点加在第一位 MOV R0,#36H ;显示的是以ms为为单位的 MOV A,#00H XCHD A,R0 ;将36H中的低4位转换为非压缩BCD码存到30H MOV 30H,A MOV A,R0 SWAP A MOV 31H,A ;高4位转换为非压缩BCD码存到31H MOV A,#00H XCHD A,R1 ;将35H中的低4位转换为非压缩BCD码存到32H MOV 32H,A MOV A,R1 ;高4位转换为非压缩BCD码存到33H SWAP A ADD A,#10;加小数点显示(如果显示us为单位可以不加小数点) MOV 33H,A RETPD: MOV R1,#34H ;当有5位有效值时取前四位显示 小数点加在第二位 MOV R0,#35H ;将35H中的低4位转换为非压缩BCD码存到31HMOV A,#00H XCHD A,R0 ;高4位转换为非压缩BCD码存到32H MOV 31H,A MOV A,R0 SWAP A ADD A,#10 加小数点显示(如果显示us为单位可以不加小数点) MOV 32H,A MOV A,#00H ;将34H中的低4位转换为非压缩BCD码存到33H XCHD A,R1 MOV 33H,A MOV A,R1 SWAP A ANL 36H,#0F0H MOV A,36H SWAP A MOV 30H,A RET2.3.5、 数码管显示子程序LEDS:MOV DPTR,#TAB;显示千位 MOV A,U4 MOVC A,A+DPTR MOV P0,A MOV A,#0FEH;位选信号 第一个数码管 MOV P2,A LCALL DELAY MOV DPTR,#TAB;显示百位 MOV A,U3 MOVC A,A+DPTR MOV P0,A MOV A,#0FDH;位选信号 第二个数码管 MOV P2,A LCALL DELAY MOV DPTR,#TAB;显示十位 MOV A,U2 MOVC A,A+DPTR MOV P0,A MOV A,#0FBH;位选信号 第三个数码管 MOV P2,A LCALL DELAY MOV DPTR,#TAB;显示个位 MOV A,U1 MOVC A,A+DPTR MOV P0,A MOV A,#0F7H;位选信号 第四个数码管 MOV P2,A LCALL DELAY RET 选用4个共阴极数码管显示,每个数码管的选通是由P2.0P2.3来控制每位点亮时间为2048us,采用延时子程序,有四个数码管,用扫描的方式显示,每一个时刻只选通一个数码管。各位数据编程(见表2.1):表2.1 数码显示不带小数点的09的数据对应表带小数点的09的数据对应表 0 3FH 0 0BFH 1 06H 1 86H 2 5BH 2 0DBH 3 4FH 3 0CFH 4 66H 4 0E6H 5 6DH 5 0EDH 6 7DH 6 0FDH 7 07H 7 87H 8 7FH 8 0FFH 9 6FH 9 0EFH2.3.6、 延时程序DELAY:MOV R7,#08H DELA:MOV R6,#80H DJNZ R6,$ DJNZ R7,DELA RET 采用软件延时,延时时间为8*128*2=2048us第三章 程序调试与仿真3.1、程序调试:调试程序采用Keil uVision3,首先启动keil软件的集成开发环境,点击“ProjectNew Project”建立新的工程,选择AT89S51作为目标芯片。建立新的源文件,将程序输入并将源文件添加到工程中(见图3.1)。 图3.1 编程编译程序并改正程序中的错误,当程序没错误后点击“Debug Start/Stop Debug ”进入程序动态调试状态,验证程序能不能正确的执行,不能则从新修改源程序,如果能则调试工作结束(见图3.2)。 图3.2 调试3.2、计算机仿真: (1) 打开Keil uVision3,新建Keil项目,选择AT89S52单片机作为CPU,新建C语言源文件,编写程序,并将其导入到“Source Group”中。在“Option for Target”对话窗口中,选中“Output”选项卡中的“Create HEX”选项和“Debug”选项卡中的“Use:Proteus VSM Simulator”选项。编译源程序,改正程序中的错误。(2) 在Proteus ISIS中,选中AT89S52并单击鼠标左键,打开“Edit Compoment”对话窗口,设置单片机晶振频率为12MHZ,在此窗口中的“Program File”栏中,选择先前用Keil生成的.HEX文件。在Proteus ISIS的菜单栏中选择“File”-“Save Design”选项,保存设计。在Proteus ISIS的菜单栏中,打开“Debug”下拉菜单,在菜单中选中“Use Remote Debug Monitor”选项,以支持与Keil的联合调试。(3) 在Keil的菜单栏中选择“Debug”-“Star/Stop Debug Session”选项,或者直接单击工具栏的“DebugStar/Stop Debug Session”图标,进入程序调试环境。按“F5”键,顺序运行程序。调出“Proteus ISIS”界面,可以看到显示内容(见图3.3)。图3.3仿真第四章 软硬件调试4.1、硬件调试:(1)、检查电路,发现问题:在硬件焊接完成后,我进行调试。首先我要确保电路各部分连接正确,并且没有漏焊、虚焊。于是我把万用表打到欧姆档,检查C52的P0口与排阻、数码管连接是否正确,P0.0P0.7对应数码管的adp。然后检查信号源连接是否正确,在确认连接完好后,我给硬件通电,将信号源的输出脚接在示波器上,并加上正负电源,观察波形,结果发现波形不太好。(2)、分析问题原因:波形输出不好,于是我想到可将7400的另两个与非门用上,把它们串联起来,使信号源得到一个更稳定的波形,并将对应的周期记录下来。4.2软件的测试:在软件测试的时候,我采用将各子程序分别进行调试,将各子程序调试正确后,我把它们进行连接。数码管显示可先编一段小程序来验证,不能利用数码管显示的程序部分可以利用软件上添加观察程序来实现观察结果是否正确。需要注意的是,P0口与数码管各段应该对应硬件连接编程。第五章 课程设计的体会在单片机应用系统设计时,必须先确定该系统的技术要求,这是系统设计的依据和出发点,整个设计过程都必须围绕这个技术要求来工作。在设计时遵循从整体到局部也即自上而下的原则。把复杂的问题分解为若干个比较简单的、容易处理的问题,分别单个的加以解决。在设计开始时,我们应根据应用的和设计要求提出设计的总体任务,绘制硬件和软件的总框图。将总任务分解成可以独立表达的子任务,这些子任务再向下分,直到每个子任务足够简单,能够直接而容易的实现为止。在程序调试时应按各个功能模块分别调试。在程序设计时,正确合理的设计是非常重要的,比如说,有些执行程序以实时中断方式调用时,如果不正确的设计,有可能陷入无休止的中断申请,使程序无法正常工作。正确的程序设计包括程序的结构是否合理,一些循环结构和循环指令的使用是否恰当,能否使用较少的循环次数或较快的指令,是否能把某些延迟等待的操作改为中断申请服务,能否把某些计算方法和查表技术适当简化等。另外程序的设计要具有可扩展性,程序的结构要标准化,便于阅读、修改和扩充。总体来说,此次设计是很有意义的,是提高学习效率和学习积极性的一种很有效的途径,这个过程中,我花费了很多的时间和精力,更重要的是,我在学会创新的基础上,同时还懂得合作精神的重要性,学会了与他人合作。同时在此次课程设计中还运用到以前学过的知识,虽然过去从未独立应用过他们,但在学习的过程中带着问题去发现效率很高,这是我在课程设计中的又一次收获。参考文献1 郑初华主编 . 汇编语言、微机原理及接口技术 第2版,北京电子工业出版社 2006 2 张友德等 . 单片微型机原理、应用与实验 第五版,上海复旦大学出版社 20033 楼然苗,李光飞 .单片机课程设计指导,北京航空航天大学出版社,2007.74 张友德,赵志英等 . 单片微型机原理、应用与实验 第五版,复旦大学出版社 2006.5附录一:实验主要元器件元器件名称参数数量AT89S524KB ROM的8位微处理器2个LED点阵8*8点阵1个数码管四位共阴联体1个电阻270o8个电阻4.7K8个74071个74001个74ls2451个电容20p4个电容10uf1个晶振12MHZ2个附录二:仿真图附录三:实物图
展开阅读全文