multisim10仿真单片机控制数码管动态显示
- 格式:pdf
- 大小:479.35 KB
- 文档页数:2
第30卷第3期Multisim10在单片机仿真中的应用吴凌燕(海军航空工程学院青岛分院 青岛 266041)摘 要:M ultisim10中M CU 模块可实现对8051、8052及PI C 系列单片机的仿真。
介绍了M ultisim10的基本情况,应用M u-l tisim10的M CU 模块仿真了单片机8051控制LED 灯的点亮过程,并通过该实例介绍了M ultisim10M CU 仿真模块的基本操作流程以及仿真的过程、方法及注意事项。
最后,总结了M ultisim10M CU 仿真模块进行单片机仿真的优点及不足之处。
关键词:M ultisim10;M CU ,单片机仿真中图分类号:T P399 文献标识码:AThe application of Multisim 10insingle -chip microcomputer simulationWu L ingyan(Naval Aeronautical Engineering Institure Qingdao Branch,Qingdao 266041,china)Abstr act :T he M CU module of M ult isim10can be used to sim ulate 8051,8052and t he PIC series micro -cont rollers.T hebasic informat ion of M ultisim10is introduced,and it s M CU module is used to sim ulate the process that a LE D is con -trolled by 8051.In th is sim ulation,the basic operating procedures,mothodand notes are proposed.Meanw hile,the advan -tage and disadvange of M CU simulat ing applicat ion are given.Keywor ds:Mult isim 10;MCU ;sngle -chip microcom puter sim ulation收稿日期:2010-80 引 言M ult isim10是NI 公司下属的Electronics Work bench Group 发布的交互式SPICE 仿真和电路分析的软件,前期发展经历了EWB5.0、EWB6.0、Multisim 2001、M ult-i sim 7、M ultisim8、M ult isim9等版本。
详解Multisim 10仿真实验步骤时间:2010-06-22 04:19:17 来源:作者:一、实验目的熟悉并掌握Multisim10对单片机的仿真过程。
加深对单片机硬件以及软件理论知识的理解。
二、实验原理1、Multisim10美国国家仪器公司下属的ElectroNIcs Workbench Group在今年年初发布了Multisim 10。
新版的Multisim10,加入了MCU模块功能,可以和8051等单片机进行编程联调,该软件元件丰富,界面直观,虚拟仪器的逼真度达到了让人相当高的程度,是电子设计、电路调试、虚拟实验必备良件。
工程师们可以使用Multisim 10交互式地搭建电路原理图,并对电路行为进行仿真。
Multisim提炼了SPICE仿真的复杂内容,这样工程师无需懂得深入的SPICE技术就可以很快地进行捕获、仿真和分析新的设计,这也使其更适合电子学教育。
通过Multisim和虚拟仪器技术,PCB设计工程师和电子学教育工作者可以完成从理论到原理图捕获与仿真再到原型设计和测试这样一个完整的综合设计流程。
下面将简单介绍一下Multisim10刚加进来的MCU模块的使用方法。
双击桌面上的multisim10图标,由于软件比较大,需要等待一定的时间才能进入以下界面(图一):图一Multisim10界面和Office工具界面相似,包括标题栏、下拉菜单、快捷工具、项目窗口、状态栏等组成。
标题栏用于显示应用程序名和当前的文件名。
下拉菜单提供各种选项。
快捷工具分为:文件工具按钮,器件工具按钮,调试工具按钮,这些按钮在下拉菜单中都有,并经常用到,现在放在工具栏里是为了方便使用。
项目窗口中的电路窗口是用来搭建电路的,Design Toolbox工具栏是用来显示全部工程文件和当前打开的文件。
状态栏用于显示程序的错误和警告,如果有错误和警告那还还需要重新修改程序。
直到没有错误为止才能正常加载程序。
在电路窗口的空白处点击鼠标右键,将出现如下菜单(图二):图二菜单包括:放置元件(place component)、连接原理图(place schematic)、放置图形(place graphic)、标注(place comment)等,这里我们最常用到的只有第一个放置元件:点击菜单中第一个选项或者按“CTRL+W”会出现以下元器件选择对话框(图三):图三在Group中选择我们需要的器件的类别,在Family中选择我们需要的器件,点击“OK”即可。
数码管动态显示实验一、实验要求1.在Proteus软件中画好51单片机最小核心电路,包括复位电路和晶振电路2.在电路中增加四个7段数码管(共阳/共阴自选),将P1口作数据输出口与7段数码管数据引脚相连,P2.0~P2.3引脚输出选控制信号3.在Keil软件中编写程序,采用动态显示法,实现数码管显示变量unsigned intshow_value的值(show_value的值范围为0000~9999),即把show_value的千百十个位的值用数码管显示出来。
二、实验目的1.巩固Proteus软件和Keil软件的使用方法2.学习端口输入输出的高级应用3.掌握7段数码管的连接方式和动态显示法4.掌握查表程序和延时等子程序的设计三.实验说明(条理清晰,含程序的一些功能分析计算)如下图(五)所示,由P1口将要显示的数字输给七段数码管;再由P2第四位输给数码管的公共端,作为扫描输入信号;用外部中断P3.2和P3.3分别接PB1与PB2,实现数字的增减。
所要实现的功能是,开始运行电路功能图时,四个数码管分别显示0000,按下PB1增1,直到9999回到0000,相反按下PB2减1,直到0000回到9999。
在算相关数据时,由于要显示个十百千的不同数字,要调用disp函数,disp[0]=show/1000; //显示千位的值 disp[1]=show%1000/100; //显示百位的值disp[2]=show%100/10; //显示十位的值 disp[3]=show%10; //显示个位的值本实验需要用到IE寄存器与TCON寄存器。
四、硬件原理图及程序设计(一)硬件原理图设计图(五)开始运行proteus,四个数码管显示0000,按下PB1数码管增1,按下PB2数码管减1。
(二)程序流程图设计三)程序设源代码#include<reg51.h> //定义8051寄存器头文件#define SEG7P P1 // 定义数码管输入信号接P1 #define SCANP P2 //定义数码管扫描信号接P2 char code TAB[10]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, //数字0~4 0x92, 0x83, 0xf8, 0x80, 0x98 };//数字5~~9 char disp[4]={0,0,0,0}; //显示数组void delay_ms(int x); //声明延迟函数char scan[4]={0xfe,0xfd,0xfb,0xf7}; //声明输入扫描信号char i,j; //声明变量void display(); //显示数组diso的内容int show=0000; //定义初始值void get_disp(); //声明返回diap main() //主程序开始{IE=0X85; //开IE寄存器,允许INT0和INT1中断TCON=0X05; //开INT0,INT1while(1) //无穷循环{get_disp();display();}void delay_ms(int x) //声明延迟函数{ int i,j; //定义变量for (i=0;i<x;i++) //开始计数,计数x次for (j=0;j<120;j++); //计数120次,延迟1ms }void display() //声明显示函数{for(i=0;i<4;i++) //开始计数,计数4次{ j=disp[3-i]; //diap的值附到变量j SCANP=scan[i]; //显示扫描信号SEG7P=TAB[j]; //显示数字到数码管delay_ms(4); //延迟4ms}}void INT0_ISR(void) interrupt 0 //INT0中断子程序开始 {if(show<9999) //如果显示数值小于9999show++; //显示数值自增1else show=0; //否则显示数值0}void_INT1_ISR(void) interrupt 2 //INT1中断子程序开始{if(show>0) //如果显示数值大于0show--; //显示数值自减1else show=9999; //否则显示数值9999}void get_disp (){disp[0]=show/1000; //显示千位的值disp[1]=show%1000/100; //显示百位的值disp[2]=show%100/10; //显示十位的disp[3]=show%10; //显示个位的值}五.实验总结实验过程中遇到的问题及解决方法、体会问题1:运行电路原理图时,数码管都不亮。
高等教育 课程教育研究·47·过勤工俭学知道父母挣钱的不易,有利于学生的成长也能让学生返校后更加勤奋的学习,其二可以对他们日后的工作多多少少做一些铺垫,至少,熟悉了现在的工作环境后,日后到了工作单位,也不至于太陌生,也就更容易适应新的工作岗位了。
因此在这个立场上许多职校、家长以及学生本人都能坦然接受并鼓励学生本人参与勤工俭学这一成长过程。
二、参与工程中正确看待利与弊,找准自己的位置然而任何事情有利就有弊,就像力的原理力是相互性的;在勤工俭学这一社会活动上同样的在这一点,在这些年职校学生中,做得也不是尽善其美。
在这一活动中有这样一部分学生存在,扛着背包去了一个单位。
一看,啊!怎么就这样啊!和自己想的差的太远了,这是人呆的地方嘛,不干了,就走了。
当然,这算是比较极端的例子。
更多的是,干上一个礼拜、一个月,干上一段时间就走了的,是大有人在。
这里面,学生有原因,某些施工单位也有一定原因。
这个原因,余学生而言、只能说他们初出茅庐、把一切想象的太美好,在真正经历现实社会的时候才会被社会一巴掌扇醒;也不怪学生想象的太美好只能说他们还没经历过社会没有那么好的心态去承受、去迎接新事物。
对此我只是想说:贵在坚持。
每回我都鼓励学生,要坚持,不要老是想着换个单位就好了。
勤工俭学多为电子厂、一天两班制上班时间比较长,大都是这个样子,远离市区,早出晚归,没有星期六、星期天,少有节假日,……定要根据自身的情况,看看是不是真的不能适应。
换而言之不是逃避回家而是就算换一家单位,或许等你换了新的工作环境心里倒又觉得,咋还不如我前面那一家哩!每回有这种情况,我都要调侃学生:“都说人比人气死人,可是你有没有想过别的同学都能做下来为什么自己不能呢?难道自己就比别人差!”对方只是苦笑着摇头,没有言语了。
其实在人生的路上怎么可能一帆风顺,当你感觉累的时候或许你只是在走上坡路,你看见坐在路边休息的同伴很是轻松你心里难道就松懈?可是你忘了他已经在原地踏步,而你还在不断向前;近期网上有段很火的话,砍柴人和放羊人的故事,有人认为砍柴人应该放弃跟放羊人的无效社交,也有人认为砍柴人是在跟放羊人交流经验好知道哪里的柴多,这个故事只是想告诉我们端正自己的心态端正自己的角度;在人生的路上人们或许会选择不同的路走,但唯有一点不该前行的道路上一碰到石头就掉头往家里走,一旦养成这样的心理,想要到达目的地着实有些困难。
搭建电路设置MCU建好的电路图如图1所示,各器件的名称等信息如附表所示。
需要说明的是电路图中的单片机不用连接晶振也可以进行仿真,时钟频率(速度)的设置见下文。
图1 带复位功能的简单计数器的电路图附表搭建电路时,当将单片机U1放入电路图中时,会出现MCU向导,如图2所示。
第一步,分别输入工作区路径和工作区名称。
工作区名称任意,这里输入MCUCosimWS。
第二步,如图3所示,在项目类型(Proj ect type)下拉框有两个选项:标准(Standard)和加载外部Hex文件(Load External Hex File),你可以在Kei l等环境下编写汇编和C源程序,然后生成Hex文件,再通过“加载外部Hex文件”导入。
限于篇幅这里选标准(Standard),接着在“编程语言”(Programming language)下拉框里会有两个选项:C和汇编(Asse mbly),如果选择C,则在汇编器/编译器工具(Assembler/Compiler tool)下拉框会出现Hi-Tech C51-Lite c ompiler,我们这里选择汇编(Assembly),则出现8051/8052 Metalink assembler。
接下来在项目名称(Pr oject name)里输入名称,如CosimProject。
第三步,如图4所示,对话框里有两个选项:创建空项目(Cr eate empty project)和添加源文件(Add source file)。
选择添加源文件,点击完成。
保存文件,键入M10C osim作为文件名,然后查看“设计工具箱”(Design Toolbox),应如图5所示。
你可能更愿意用C来编写程序,而不是汇编,或两个都用,或还想引入外部Hex文件,这都可以通过用“MCU代码管理器”添加MCU项目来解决。
在设计工具箱里右键单击MCUCosimWS,选择“MCU代码管理器”(MCU Code Manager),点击“新MCU项目”(New MCU Project)按钮,选择“项目类型”(Proje ct Type),可以是标准(Standard)或加载外部Hex文件(Load External Hex File),这里选“标准”,接着输入名称,如Cosim_C_Project,确定后就可以在MCU代码管理器对话框里进行下一步设置了,可以创建新文件,设置汇编器/编译器等等。
动态显示1.掌握LED数码管显示及其一般电路结构;2.掌握LED动态显示程序的一般设计方法。
一、实验内容动态显示,也称为扫描显示。
显示器由6个共阴极LED数码管构成。
单片机的P0口输出显示段码,由一片74LS245输出给LED管;由P1口输出位码,经74LS04输出给LED显示。
二、实验步骤1、打开Proteus ISIS编辑环境,按下表所列的元件清单添加元件。
图1 动态显示实验电路原理图2、按实验要求在KeilC中创建项目,编辑、编译程序。
3、将编译生成的目标码文件(后缀为.Hex)传入Proteus的实验电路中。
4、在Proteus ISIS仿真环境中运行程序,观察实验运行结果并记录。
三、实验要求1.编写一显示程序显示201071;2.显示特殊字符good;3.调整软件延时子程序的循环初值,逐渐加大每一位LED点亮的时间,观察程序运行结果。
四、参考程序dbuf equ 30h ;置存储区首址temp equ 40h ;置缓冲区首址org 00hmov 30h,#2 ;存入数据mov 31h,#0mov 32h,#1mov 33h,#0mov 34h,#7mov 35h,#1mov r0,#dbufmov r1,#tempmov r2,#6 ;六位显示器mov dptr,#segtab ;段码表首地址dp00: mov a,@r0 ;取要显示的数据movc a,@a+dptr ;查表取段码mov @r1,a ;段码暂存inc r1inc r0djnz r2,dp00disp0: mov r0,#temp ;显示子程序mov r1,#6 ;扫描6次mov r2,#01h ;从第一位开始dp01: mov a,@r0mov p0,a ;段码输出mov a,r2 ;取位码mov p1,a ;位码输出acall delay ;调用延时mov a,r2rl amov r2,ainc r0djnz r1,dp01sjmp disp0segtab: db 3fh,06h,5bh,4fh,66hdb 6dh,7dh,07h,7fh,6fhdelay: mov r4,#03h ;延时子程序aa1: mov r5,0ffhaa: djnz r5,aadjnz r4,aa1retend实验原理MCS-51单片机内设置了两个可编程的16位定时器T0和T1,通过编程,可以设定为定时器和外部计数方式。