收藏 分享(赏)

Proteus仿真单片机实验模拟资料.doc

上传人:还是太帅 文档编号:9087693 上传时间:2019-07-23 格式:DOC 页数:47 大小:7.99MB
下载 相关 举报
Proteus仿真单片机实验模拟资料.doc_第1页
第1页 / 共47页
Proteus仿真单片机实验模拟资料.doc_第2页
第2页 / 共47页
Proteus仿真单片机实验模拟资料.doc_第3页
第3页 / 共47页
Proteus仿真单片机实验模拟资料.doc_第4页
第4页 / 共47页
Proteus仿真单片机实验模拟资料.doc_第5页
第5页 / 共47页
点击查看更多>>
资源描述

1、目录引言 1实验 1 PROTUES 环境及 LED 闪烁综合实验 .6实验 2 多路开关状态指示 .9实验 3 报警产生器 .12实验 4 I/O 并行口直接驱动 LED 显示 .15实验 5 按键识别方法之一 .18实验 6 一键多功能按键识别技术 .21实验 7 定时计数器 T0 作定时应用技术 .24实验 8 定时计数器 T0 作定时应用技术 27实验 9 “嘀、嘀、 ”报警声 31实验 10 8X8 LED 点阵显示技术 35实验 11 电子琴 39引言 单片机体积小,重量轻,具有很强的灵活性而且价格便宜,具有逻辑判断,定时计数等多种功能,广泛应用于仪器仪表,家用电器,医用设备的智能

2、化管理和过程控制等领域。以单片机为核心的嵌入式系统已经成为目前电子设计最活跃的领域之一。在嵌入式系统的中,开发板成本高,特别是对于大量的初学者而言,还可能由于设计的错误导致开发板损坏。利用 Proteus 我们可以很好地解决这个问题,由此我们可以快速地建立一个单片机仿真系统。1. Proteus 介绍Proteus 是英国 Labcenter Electronics 公司开发的一款电路仿真软件,软件由两部分组成:一部分是智能原理图输入系统 ISIS(Intelligent Schematic Input System)和虚拟系统模型VSM(Virtual Model System);另一部分是

3、高级布线及编辑软件 ARES (Advanced Routing and Editing Software)也就是 PCB。1.1 Proteus VSM 的仿真Proteus 可以仿真模拟电路及数字电路,也可以仿真模拟数字混合电路。 Proteus 可提供 30 多种元件库,超过 8000 种模拟、数字元器件。可以按照设计的要求选择不同生产厂家的元器件。此外,对于元器件库中没有的元件,设计者也可以通过软件自己创建。除拥有丰富的元器件外,Proteus 还提供了各种虚拟仪器,如常用的电流表,电压表,示波器,计数/定时/频率计,SPI 调试器等虚拟终端。支持图形化的分析功能等。Proteus 特

4、别适合对嵌入式系统进行软硬件协同设计与仿真,其最大的特点是可以仿真8051,PIA ,AVR,ARM 等多种系列的处理器。 Protues 包含强大的调试工具,具有对寄存器和存储器、断点和单步模式 IAR C-SPY, Keil, MPLAB 等开发工具的源程序进行调试的功能;能够观察代码在仿真硬件上的实时运行效果;对显示,按钮,键盘等外设的交互可视化进行仿真。1.2 Proteus PCBProteus 的 PCB 设计除了有自动布线仿真功能外,还集成了 PCB 设计,支持多达 16 个布线层,可以任意角度放置元件和焊接连线;集成了高智能的布线算法,可以方便地进行PCB 设计。2. 一个基于

5、 Protesus 的单片机实例2.1 软件的编写本例题采用 8 个 LED,编写程序使之闪烁起来。软件的编写是采用汇编语言,芯片的型号选择 AT89C51, 编写 LED.ASM 文件,利用Proteus 本身的 51 汇编功能进行编译,编译成功后生成 LED.hex 文件。2.2 绘制电路图运行 Proteus 的 ISIS,进入仿真软件的主界面,如图 1 所示。主界面分为菜单栏,工具栏,模型显示窗口,模型选择区,元件列表区等。图 1 ISIS 启动界面通过左侧的工具栏区的 P(从库中选择元件)命令,在 Pick devices 窗口中选择系统所需元器件,还可以选择元件的类别,生产厂家等。

6、本例所需主要元器件有:AT89C51 芯片,电阻、电容、石英晶振和发光二极管,详见表 1。表 1 元器件清单选择元器件后连接图 2 所示电路。图 2 电路原理图Microproccessor ICs 类的芯片的引脚与实际的芯片基本相同, 唯一的差别是隐去了GND 和 VCC 引脚,系统默认的是把它们分别连接到地和 +5V 直流电源。故在电路连线时可以不考虑电源和地的连接。电路连接完成后,选中 AT89C51 单击鼠标左键,打开“Edit Component”对话窗口如图3 所示,可以直接在“Clock Frequency”后进行频率设定,设定单片机的时钟频率为12MHz。在“Add/remov

7、e source file”栏中选择已经编好的 LED.asm 文件,然后单击“OK” 按钮保存设计。至此,就可以进行单片机的仿真。图 3 单片机属性的设定2.3 Proteus 仿真结果单片机的仿真结果图如图 4,模拟信号经 A/D 转换后,结果送入单片机,再在数码管上显示;通过调节可调电阻的阻值,可以得到不同的显示结果。仿真结果表明,系统达到了预先的设计要求。在仿真的过程中每个管脚旁边会出现一个小方块,红色的方快表示高电平,蓝色的表示低电平。 通过方快颜色的变化可以很方便地知道每个管脚电平的变化,从而能对系统的运行有更直观的了解,这对程序的调试有很大的帮助。 图 4 仿真结果3总结本文结合

8、一个 LED 闪烁的单片机电路详细说明了 Proteus 在单片机开发中的应用。可以看出,Proteus 功能十分强大,能仿真各种数字模拟电路,且操作简单,使用方便。能快速地进行单片机仿真,加快系统开发的过程,降低开发成本。实验 1 PROTUES 环境及 LED 闪烁综合实验1 实验任务 做单一灯的左移右移,硬件电路如图所示,八个发光二极管 L1L8 分别接在单片机的 P1.0P1.7 接口上,输出“0” 时,发光二极管亮,开始时 P1.0P1.1P1.2P1.3P1.7P1.6P1.0 亮,重复循环。 2 电路原理图 图 1 3 程序设计内容 我们可以运用输出端口指令 MOV P1,A 或

9、 MOV P1,DATA,只要给累加器值或常数值,然后执行上述的指令,即可达到输出控制的动作。 每次送出的数据是不同,具体的数据如下表 1 所示 :P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0 说明L8 L7 L6 L5 L4 L3 L2 L1 1 1 1 1 1 1 1 0 L1 亮1 1 1 1 1 1 0 1 L2 亮1 1 1 1 1 0 1 1 L3 亮1 1 1 1 0 1 1 1 L4 亮1 1 1 0 1 1 1 1 L5 亮1 1 0 1 1 1 1 1 L6 亮1 0 1 1 1 1 1 1 L7 亮0 1 1 1 1 1 1 1 L8 亮

10、4 程序框图图 25 汇编源程序ORG 0START: MOV R2,#8MOV A,#0FEHSETB CLOOP: MOV P1,ALCALL DELAYRLC ADJNZ R2,LOOPMOV R2,#8LOOP1: MOV P1,ALCALL DELAYRRC ADJNZ R2,LOOP1LJMP STARTDELAY: MOV R5,#20 ;D1: MOV R6,#20D2: MOV R7,#248DJNZ R7,$DJNZ R6,D2DJNZ R5,D1RETEND实验 2 多路开关状态指示 1 实验任务 如图 1 所示,AT89S51 单片机的 P1.0P1.3 接四个发光二极

11、管 L1L4,P1.4P1.7接了四个开关 K1K4,编程将开关的状态反映到发光二极管上。 (开关闭合,对应的灯亮,开关断开,对应的灯灭) 。 2 电路原理图 图 1 3 程序设计内容 3.1 开关状态检测 对于开关状态检测,相对单片机来说,是输入关系,我们可轮流检测每个开关状态,根据每个开关的状态让相应的发光二极管指示,可以采用 JB P1.X,REL 或 JNB P1.X,REL 指令来完成;也可以一次性检测四路开关状态,然后让其指示,可以采用MOV A,P1 指令一次把 P1 端口的状态全部读入,然后取高 4 位的状态来指示。 3.2 输出控制 根据开关的状态,由发光二极管 L1L4 来

12、指示,我们可以用 SETB P1.X 和 CLR P1.X 指令来完成,也可以采用 MOV P1 ,1111XXXXB 方法一次指示。 4 程序框图 读 P1 口数据到 ACC 中 ACC 内容右移 4 次 ACC 内容与 F0H 相或 ACC 内容送入 P1 口 图 2 5 解决方案方法一(汇编源程序)ORG 00HSTART: MOV A,P1ANL A,#0F0HRR ARR ARR ARR AORl A,#0F0HMOV P1,ASJMP STARTEND方法二(汇编源程序)ORG 00HSTART: JB P1.4,NEXT1CLR P1.0SJMP NEX1NEXT1: SETB

13、P1.0NEX1: JB P1.5,NEXT2CLR P1.1SJMP NEX2NEXT2: SETB P1.1NEX2: JB P1.6,NEXT3CLR P1.2SJMP NEX3NEXT3: SETB P1.2NEX3: JB P1.7,NEXT4CLR P1.3SJMP NEX4NEXT4: SETB P1.3NEX4: SJMP STARTEND实验 3 报警产生器 1 实验任务 用 P1.0 输出 1KHz 和 500Hz 的音频信号驱动扬声器,作报警信号,要求 1KHz 信号响100ms, 500Hz 信号响 200ms,交替进行,P1.7 接一开关进行控制,当开关合上响报警信号

14、,当开关断开告警信号停止,编出程序。 2 电路原理图 图 1 3 程序设计内容 3.1 信号产生的方法 500Hz 信号周期为 2ms,信号电平为每 1ms 变反 1 次,1KHz 的信号周期为 1ms,信号电平每 500us 变反 1 次; 4 程序框图 图 2 5 汇编源程序FLAG BIT 00HORG 00HSTART: JB P1.7,STARTJNB FLAG,NEXTMOV R2,#200DV: CPL P1.0LCALL DELY500LCALL DELY500DJNZ R2,DVCPL FLAGNEXT: MOV R2,#200DV1: CPL P1.0LCALL DELY5

15、00DJNZ R2,DV1CPL FLAGSJMP STARTDELY500: MOV R7,#250LOOP: NOPDJNZ R7,LOOPRETEND实验 4 I/O 并行口直接驱动 LED 显示 1. 实验任务 如图 1 所示,利用 AT89S51 单片机的 P0 端口的 P0.0P0.7 连接到一个共阴数码管的 ah 的笔段上,数码管的公共端接地。在数码管上循环显示 09 数字,时间间隔 0.2秒。 2. 电路原理图 图 1 3 程序设计内容 (1) LED 数码显示原理 七段 LED 显示器内部由七个条形发光二极管和一个小圆点发光二极管组成,根据各管的极管的接线形式,可分成共阴极型

16、和共阳极型。 LED 数码管的 ga 七个发光二极管因加正电压而发亮,因加零电压而不以发亮,不同亮暗的组合就能形成不同的字形,这种组合称之为字形码,下面给出共阴极的字形码见表 2 “0” 3FH “8” 7FH“1” 06H “9” 6FH“2” 5BH “A” 77H“3” 4FH “b” 7CH“4” 66H “C” 39H“5” 6DH “d” 5EH“6” 7DH “E” 79H“7” 07H “F” 71H(2) 由于显示的数字 09 的字形码没有规律可循,只能采用查表的方式来完成我们所需的要求了。这样我们按着数字 09 的顺序,把每个数字的笔段代码按顺序排好!建立的表格如下所示:T

17、ABLE DB 3FH,06H,5BH,4FH,66H ,6DH,7DH,07H ,7FH, 6FH。4程序框图图 25 汇编源程序ORG 0START: MOV R1,#00HNEXT: MOV A,R1MOV DPTR,#TABLEMOVC A,A+DPTRMOV P0,ALCALL DELAYINC R1CJNE R1,#10,NEXTLJMP STARTDELAY: MOV R5,#20D2: MOV R6,#20D1: MOV R7,#248DJNZ R7,$DJNZ R6,D1DJNZ R5,D2RETTABLE: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07

18、H,7FH,6FHEND实验 5 按键识别方法之一1 实验任务 每按下一次开关 SP1,计数值加 1,通过 AT89S51 单片机的 P1 端口的 P1.0 到 P1.3显示出其的二进制计数值。 2 电路原理图 3 程序设计方法 (1)其实,作为一个按键从没有按下到按下以及释放是一个完整的过程,也就是说,当我们按下一个按键时,总希望某个命令只执行一次,而在按键按下的 过程中,不要有干扰进来,因为,在按下的过程中,一旦有干扰过来,可能造成误触发过程,这并不是我们所想要的。因此在按键按下的时候,图 2要把我们手上的干扰信号以及按键的机械接触等干扰信号给滤除掉,一般情况下,我们可以采用电容来滤除掉这

19、些干扰信号,但实际上,会增加硬件成本及硬件电路的体积,这是我们不希望,总得有个办法解决这个问题,因此我们可以采用软件滤波的方法去除这些干扰信号,一般情况下,一个按键按下的时候,总是在按下的时刻存在着一定的干扰信号,按下之后就基本上进入了稳定的状态。具体的一个按键从按下到释放的全过程的信号图如上图所示: 从图中可以看出,我们在程序设计时,从按键被识别按下之后,延时 5ms 以上,从而避开了干扰信号区域,我们再来检测一次,看按键是否真得已经按下,若真得已经按下,这时肯定输出为低电平,若这时检测到的是高电平,证明刚才是由于干扰信号引起的误触发,CPU 就认为是误触发信号而舍弃这次的按键识别过程。从而

20、提高了系统的可靠性。 由于要求每按下一次,命令被执行一次,直到下一次再按下的时候,再执行一次命令,因此从按键被识别出来之后,我们就可以执行这次的命令,所以要有一个等待按键释放的过程,显然释放的过程,就是使其恢复成高电平状态。 (1)对于按键识别的指令,我们依然选择如下指令 JB BIT,REL 指令是用来检测BIT 是否为高电平,若 BIT1,则程序转向 REL 处执行程序,否则就继续向下执行程序。或者是 JNB BIT,REL 指令是用来检测 BIT 是否为低电平,若 BIT0,则程序转向REL 处执行程序,否则就继续向下执行程序。 (2)但对程序设计过程中按键识别过程的框图如右图所示:图

21、34 程序框图 图 46 汇编源程序ORG 0START: MOV R1,#00H ;初始化 R1 为 0,表示从 0 开始计数MOV A,R1 ;CPL A ;取反指令MOV P1,A ;送出 P1 端口由发光二极管显示REL: JNB P3.7,REL ;判断 SP1 是否按下LCALL DELAY10MS ;若按下,则延时 10ms 左右JNB P3.7,REL ;再判断 SP1 是否真得按下INC R1 ;若真得按下,则进行按键处理,使MOV A,R1 ;计数内容加 1,并送出 P1 端口由CPL A ;发光二极管显示MOV P1,A ;JNB P3.7,$ ;等待 SP1 释放SJM

22、P REL ;继续对 K1 按键扫描DELAY10MS: MOV R6,#20 ;延时 10ms 子程序L1: MOV R7,#248DJNZ R7,$DJNZ R6,L1RETEND实验 6 一键多功能按键识别技术 1实验任务 如图 1 所示,开关 SP1 接在 P3.7/RD 管脚上,在 AT89S51 单片机的 P1 端口接有四个发光二极管,上电的时候,L1 接在 P1.0 管脚上的发光二极管在闪烁,当每一次按下开关 SP1 的时候,L2 接在 P1.1 管脚上的发光二极管在闪烁,再按下开关 SP1 的时候,L3 接在 P1.2 管脚上的发光二极管在闪烁,再按下开关 SP1 的时候,L4

23、 接在 P1.3 管脚上的发光二极管在闪烁,再按下开关 SP1 的时候,又轮到 L1 在闪烁了,如此轮流下去。 2电路原理图 图 1 3程序设计方法 (1)设计思想由来 在我们生活中,我们很容易通过这个叫张三,那个叫李四,另外一个是王五;那是因为每个人有不同的名子,我们就很快认出,同样,对于要通过一个按键来识别每种不同的功能,我们给每个不同的功能模块用不同的 ID 号标识,这样,每按下一次按键,ID 的值是不相同的,所以单片机就很容易识别不同功能的身份了。 (2)设计方法 从上面的要求我们可以看出,L1 到 L4 发光二极管在每个时刻的闪烁的时间是受开关SP1 来控制,我们给 L1 到 L4

24、闪烁的时段定义出不同的 ID 号,当 L1 在闪烁时,ID 0;当 L2 在闪烁时,ID 1;当 L3 在闪烁时,ID2;当 L4 在闪烁时,ID 3;很显然,只要每次按下开关 K1 时,分别给出不同的 ID 号我们就能够完成上面的任务了。下面给出有关程序设计的框图。 4程序框图 图 25 汇编源程序ID EQU 30HSP1 BIT P3.7L1 BIT P1.0L2 BIT P1.1L3 BIT P1.2L4 BIT P1.3ORG 0MOV ID,#00HSTART: JB K1,RELLCALL DELAY10MSJB K1,RELINC IDMOV A,IDCJNE A,#04,RE

25、LMOV ID,#00HREL: JNB K1,$MOV A,IDCJNE A,#00H,IS0CPL L1LCALL DELAYSJMP STARTIS0: CJNE A,#01H,IS1CPL L2LCALL DELAYSJMP STARTIS1: CJNE A,#02H,IS2CPL L3LCALL DELAYSJMP STARTIS2: CJNE A,#03H,IS3CPL L4LCALL DELAYSJMP STARTIS3: LJMP STARTDELAY10MS: MOV R6,#20LOOP1: MOV R7,#248DJNZ R7,$DJNZ R6,LOOP1RETDELAY

26、: MOV R5,#20LOOP2: LCALL DELAY10MSDJNZ R5,LOOP2RETEND实验 7 定时计数器 T0 作定时应用技术 1 实验任务 用 AT89S51 单片机的定时/计数器 T0 产生一秒的定时时间,作为秒计数时间,当一秒产生时,秒计数加 1,秒计数到 60 时,自动从 0 开始。硬件电路如下图所示 2 电路原理图 3程序设计内容 AT89S51 单片机的内部 16 位定时/计数器是一个可编程定时/ 计数器,它既可以工作在 13 位定时方式,也可以工作在 16 位定时方式和 8 位定时方式。只要通过设置特殊功能寄存器 TMOD,即可完成。定时/ 计数器何时工作也

27、是通过软件来设定 TCON 特殊功能寄存器来完成的。 现在我们选择 16 位定时工作方式,对于 T0 来说,最大定时也只有 65536us,即65.536ms,无法达到我们所需要的 1 秒的定时,因此,我们必须通过软件来处理这个问题,假设我们取 T0 的最大定时为 50ms,即要定时 1 秒需要经过 20 次的 50ms 的定时。对于这20 次我们就可以采用软件的方法来统计了。 因此,我们设定 TMOD00000001B,即 TMOD01H 下面我们要给 T0 定时/计数器的 TH0,TL0 装入预置初值,通过下面的公式可以计算出 TH0(21650000) / 256 TL0(2165000

28、0) MOD 256 当 T0 在工作的时候,我们如何得知 50ms 的定时时间已到,这回我们通过检测TCON 特殊功能寄存器中的 TF0 标志位,如果 TF01 表示定时时间已到。 5 程序 框图 图 2 6 汇编源程序(查询法)SECOND EQU 30HTCOUNT EQU 31HORG 00HSTART: MOV SECOND,#00HMOV TCOUNT,#00HMOV TMOD,#01HMOV TH0,#(65536-50000) / 256MOV TL0,#(65536-50000) MOD 256SETB TR0DISP: MOV A,SECONDMOV B,#10DIV AB

29、MOV DPTR,#TABLEMOVC A,A+DPTRMOV P0,AMOV A,BMOVC A,A+DPTRMOV P2,AWAIT: JNB TF0,WAITCLR TF0MOV TH0,#(65536-50000) / 256MOV TL0,#(65536-50000) MOD 256INC TCOUNTMOV A,TCOUNTCJNE A,#20,NEXTMOV TCOUNT,#00HINC SECONDMOV A,SECONDCJNE A,#60,NEXMOV SECOND,#00HNEX: LJMP DISPNEXT: LJMP WAITTABLE: DB 3FH,06H,5BH

30、,4FH,66H,6DH,7DH,07H,7FH,6FHEND实验 8 定时计数器 T0 作定时应用技术 1 实验任务 用 AT89S51 的定时/计数器 T0 产生 2 秒钟的定时,每当 2 秒定时到来时,更换指示灯闪烁,每个指示闪烁的频率为 0.2 秒,也就是说,开始 L1 指示灯以 0.2 秒的速率闪烁,当 2 秒定时到来之后,L2 开始以 0.2 秒的速率闪烁,如此循环下去。0.2 秒的闪烁速率也由定时/计数器 T0 来完成。 2 电路原理图 3.程序设计内容 (1)由于采用中断方式来完成,因此,对于中断源必须它的中断入口地址,对于定时/计数器 T0 来说,中断入口地址为 000BH,

31、因此在中断入口地方加入长跳转指令来执行中断服务程序。书写汇编源程序格式如下所示:ORG 00HLJMP STARTORG 0BH ;定时/计数器 T0 中断入口地址LJMP INT_T0START: NOP ;主程序开始.INT_T0: PUSH ACC ;定时/计数器 T0 中断服务程序PUSH PSWPOP PSWPOP ACCRETI ;中断服务程序返回END (2)定时 2 秒,采用 16 位定时 50ms,共定时 40 次才可达到 2 秒,每 50ms 产生一中断,定时的 40 次数在中断服务程序中完成,同样 0.2 秒的定时,需要 4 次才可达到 0.2 秒。对于中断程序,在主程序中要对中断开中断。 (3)由于每次 2 秒定时到时,L1L4 要交替闪烁。采用 ID 来号来识别。当 ID0 时,L1 在闪烁,当 ID1 时,L2 在闪烁;当 ID2 时,L3 在闪烁;当 ID3 时,L4 在闪烁 5 程序框图 T0 中断服务程序框图 主程序框图 6.汇编源程序TCOUNT2S EQU 30HTCNT02S EQU 31HID EQU 32HORG 00HLJMP STARTORG 0BHLJMP INT_T0START: MOV TCOUNT2S,#00H

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 往来文书

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报