摘 要:本文阐述了在单片机动态显示的原理方法,以8051为中心给出了其硬件电路的构成,并着重阐述了在Multisim10中进行单片机动态显示仿真设计的具体方法。
关键词:Multisim10;单片机;8051;仿真;编译
Multisim10是 美国国家仪器公司(NI,National Instruments)推出的计算机电子仿真软件。Multisim10实现计算机仿真时设计和实验用的元器件和测试仪器和仪表齐全,可以完成各种类型的电路设计与实验;可以方便地对电路参数进行测试和分析;设计与实验可以同步进行,可以边设计边实验,修改调试方便;可直接打印输出实验数据、测试参数、曲线和电路原理图;实验中不消耗实际的元器件,实验所需的元器件和数和数量不受限制,实验成本低,实验速度快,效率高;设计和实验成功的电路可以直接在产品中使用。
Multisim10版本可用于单片机和可编程逻辑器件的仿真分析,为单片机系统的仿真设计提供了较好的解决方案。multisim10提供了805x、PIC、RAM和ROM等4个系列的单片机芯片和可编程逻辑器件,使得该软件的实际应用得到了大大的增强。本文使用Multisim10为辅助设计工具,做以单片机8051为中心的单片机动态显示电路的仿真设计。
1.设计要求和分析
显示单元是单片机常见的控制功能,凡是遇到显示输出时都会用到显示单元,如数字管的显示,点阵的显示等。为了提高单片机输入输出端口的效率,一般显示单元都使用动态显示技术。所谓动态显示方式,就是一位一位地轮流点亮各个数码管(动态扫描方式)。对于每一位数码管来说,每隔一定时间点亮一次,当扫描的时间间隔足够小时,利用人的视觉暂留特性,观察者就不会感到数码管的闪烁,看到的现象是所有的数码管一起发光,就如同看电影的道理一样。
如果要做4个数码显示管的动态显示时,其实现方法是将所有的数码管的a......g连接在一起,接在单片机的某个输出端口上,各个数码管的公共端作为片选信号接在单片机的另一个输出端口上,这样做可以大大地节省了硬件资源。
2.硬件电路的设计
单片机模块8051的工作电源电压为5V; Multisim10中的8051模块内部已经具备了12MHz,所以仿真外围电路可以省略晶振;故其最小系统需要加一只电容和一只电阻,实现单片机的上电复位功能。
如图1所示是根据这一思路做的4位共阳数码管动态显示的电路原理图。图中四个数码管的a......g共同连接到了8051的P0.7-P0.1,4个数码显示管的公共端分别接到P1.0-P1.3,电阻器R1和电容器C1构成了简单的上电复位电路。
在动态扫描显示方式中,数码管的亮度同 LED点亮导通时的电流大小,每一位点亮的时间和扫描间隔时间三个因素有关。
3.Multisim10中绘制仿真电路原理图
3.1放置单片机模块8051
(1)单击"元件"工具栏上的"Place MCU"按钮,在弹出的"选择元件"对话框的"系列"栏中选择"805x",在"元件"栏中选择"8051"。
(2)鼠标处出现一个"8051",在绘图区单击鼠标,便放置了一个"8051",同时打开MCU向导对话框。在其中输入工作区的路径和名称,单击"下一步"。
(3)弹出MCU向导第二步,在"Progranning language"栏中选择编程语言,可以选择汇编或C语言。若选择C语言时,"Assembler/conplier tool"栏中会出现"Hi-Tech C51-Lite complier";若选择了汇编语言(Assenbly)时,"Assembler/conplier tool"栏中会出现"8051/8052 Metalink assenbler"。在"项目名称"栏中输入项目名称,单击"下一步"按钮。
(4) 弹出MCU向导第三步,可以选择Creat empty project(建立空项目)或Add Source file(添加源文件),当选择了Add Source file时,可在其下面的文本框中输入源文件名,默认为"main.asm"。点击"完成"按钮结束放置。
3.2放置其他元件,这里略去。
3.3连线,完成原理图的绘制。
4.编写MCU源程序
4.1如图2所示,打开设计工具箱,展开8051及其项目,双击"main.asm",打开汇编源程序窗口,窗口中出现以下代码,在第一行和最后一行插入源程序。
4.2输入源程序
$MOD51 ; This includes 8051 definitions for the metalink assembler
START:
MOV P1, #0FFH ;关闭所有的LED
MOV P0, #9FH ;送"1"的字形码
MOV P1, #0FEH ;打开第1个LED
ACALL DELAY ;延时
MOV P1, #0FFH ;关闭所有的LED,否则显示混乱
MOV P0, #27H ;送"2"的字形码
MOV P1, #0FDH ;打开第2个LED
ACALL DELAY
MOV P1, #0FFH
MOV P0, #0DH ;送"3"的字形码
MOV P1, #0FBH ;打开第3个LED
ACALL DELAY
MOV P1, #0FFH
MOV P0, #99H ;送"4"的字形码
MOV P1, #0F7H ;打开第4个LED
ACALL DELAY
AJMP START
DELAY:MOV R6,#2 ;延时1ms
TEMP:MOV R5,#0FFH
DJNZ R5,$
DJNZ R6,TEMP
RET
END
5.编译与仿真
单击仿真按钮,若程序还未经编译则会弹出编译提示消息框,点击"是"进行编程的编译。若程序正确,编译通过,则在电路中显示仿真结果;若未通过,则要修改程序,直至编译通过。编译后会形成一系列的目标文件。
在multisim10中可直接对汇编程序或C语言程序进行编译,不需要其他编译软件,使得仿真操作变得简单,这一点是它优于其他单片机仿真软件的地方。如Protues也是目前比较流行的单片机仿真软件,其优点是单片机芯片类型多,结果直观,但它只能执行已编译好的二进制和十六进制的目标文件,需要其他的程序编译软件进行编译。但multisim10提供的单片机芯片种类少,也限制了它的应用。相信比multisim10高的版本会提供更多的单片机芯片种类,使之也能成为单片机仿真的利器。
参考文献:
[1]覃奈新主编,单片机应用技术,电子工业出版社,2008
[2]李良荣主编,现代电子设计技术,机械工业出版社,2005