ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:401.07KB ,
资源ID:11094244      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-11094244.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(proteus元件制作步骤及方法.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

proteus元件制作步骤及方法.docx

1、proteus元件制作步骤及方法一、Proteus VSM仿真模型简介 在使用Proteus仿真单片机系统的过程中,经常找不到所需的元件,这就需要自己编写。Proteus VSM的一个主要特色是使用基于DLL组件模型的可扩展性。这些模型分为两类:电气模型(Electrical Model)和绘图模型(Graphical Model)。电气模型实现元件的电气特性,按规定的时序接收数据和输出数据;绘图模型实现仿真时与用户的交互,例如LCD的显示。一个元件可以只实现电气模型,也可以都实现电气和绘图模型。 Proteus为VSM模型提供了一些C+抽象类接口,用户创建元件时需要在DLL中实现相应的抽象类

2、。VSM模型和Proteus系统通信的原理如下图:绘图模型接口抽象类:ICOMPONENTISIS内部一个活动组件对象,为VSM模型提供在原理图上绘图和用户交互的服务。IACTIVEMODEL用户实现的VSM绘图模型要继承此类,并实现相应的绘图和键盘鼠标事件处理。电气模型接口抽象类:IINSTANCE一个PROSPICE仿真原始模型,为VSM模型提供访问属性、模拟节点和数据引脚的服务,还允许模型通过仿真日志发出警告和错误信息。ISPICECKT(模拟)SPICE拥有的模拟元件,提供的服务:访问、创建和删除节点,在稀疏矩阵上分配空间,同时还允许模型在给定时刻强制仿真时刻点的发生和挂起仿真。ISP

3、ICEMODEL(模拟)用户实现的VSM模拟元件要继承此类,并实现相应的载入数据,在完成的时间点处理数据等。IDSIMCKT(数字)DSIM拥有的数字元件,提供的服务:访问数字系统的变量,创建回调函数和挂起仿真。IDSIMMODEL(数字)用户实现的VSM数字元件要继承此类,并实现相应的引脚状态变化的判断和回调事件的处理。IDSIMPIN(数字)数字组件的引脚,提供检测引脚状态和创建输出事务事件的服务。IDBUSPIN(数字)数字组件的数据或地址总线,提供检测总线状态和创建总线输出事务事件的服务。IMIXEDMODEL(混合)同时继承了ISPICEMODEL 和 IDSIMMODEL,元件既有

4、模拟特性,又有数字特性。 为了让Proteus访问用户模型中的成员函数,必须创建用户模型的一个实例。这不能通过类的接口来实现,只能通过从DLL中导出几个C函数来实现,在用户模型中必须实现这些C函数,达到构造和析构用户模型实例的效果。(1)构造和析构绘图模型实例:IACTIVEMODEL *createactivemodel (CHAR *device, ILICENCESERVER *ils)VOID deleteactivemodel (IACTIVEMODEL *model)(2)构造和析构模拟电气模型实例:ISPICEMODEL *createspicemodel (CHAR *devi

5、ce, ILICENCESERVER *ils)VOID deletespicemodel (ISPICEMODEL *model)(3)构造和析构数字电气模型实例:IDSIMMODEL *createdsimmodel (CHAR *device, ILICENCESERVER *ils)VOID deletedsimmodel (IDSIMMODEL *model)(4)构造和析构混合电气模型实例:IMIXEDMODEL *createmixedmodel (CHAR *device, ILICENCESERVER *ils)VOID deletemixedmodel (IDSIMMODE

6、L *model)二、Proteus VSM仿真模型开发流程1绘制元件图形、引脚和相关符号。2制作元件,设置元件属性。3用C+编写元件,实现电气和绘图模型,编译生成DLL。4搭建电路仿真测试。三、VSM模型开发实例下面以TG19264A点阵式液晶显示元件的开发为实例详细讲解开发过程。1打开Proteus,选择菜单 查看Snap 10 th,选择左边绘图工具栏的2D graphics box,绘制如图所示的三个图形。2选择2D graphics line,给出两条直线,设置width为36th,颜色为灰色。选择2D graphics circle,给四个角绘制安装孔。选择Markers for

7、component origin,给三个图形分别绘图符号原点(图中红色部分)。3选择Device pin,顺时针旋转90度,放置20个引脚,如图所示。GND、VCC、V0、Vee、LED+的电气类型选择PP-Power Pin,D/I、R/W、E、CS1、RET、CS2、CS3的电气类型选择IP-Input,D0D7的电气类型选择IO- Bidirectional。4右键拖出选择框选择第一个符号,选择菜单库制作符号,命名为LCD19264A_C,确定。同理,第二和第三个分别命名为LCD19264A_1 和LCD19264A_0。当用户调用drawsymbol (-1),将绘制LCD19264A

8、_C,调用drawsymbol (1),将绘制LCD19264A_1,调用drawsymbol (0),将绘制LCD19264A_0。5右键拖出选择框选择符号LCD19264A_C,选择菜单库制作元件,Device Properties设置如图,点击Next。跳过封装设置,点击Next。组件属性设置如图,点击Next。选择数据手册(可选),点击Next。选择器件库,点击OK。 6打开VC,新建工程,选择Win32 Dynamic-Link Library,给工程命名,建立空的DLL工程。从Proteus安装目录的INCLUDE文件夹中将VSM.HPP复制到当前工程目录,新建文件 LCD1926

9、4A.H和LCD19264A.CPP,编写如下代码。CODE:/* 文件:LCD19264A.H* 说明:不支持以下特性* (1) 不支持显示开关控制* (2) 不支持设置显示起始行*/i nclude vsm.hpp/LCD常量#define LCD_BLK_NUM 3 /lcd block number#define LCD_BLK_LEN 64 /lcd block length#define LCD_LINE_NUM 8 /lcd line number#define LCD_LENGTH (LCD_BLK_LEN*LCD_BLK_NUM) /lcd length#define LCD

10、_WIDTH 64 /lcd width#define BLANK_WIDTH 50 /the width of blank#define SYM_LINEWIDTH 28 /the width of symbol line/LCD命令掩码#define CMD_MASK 0xc0/LCD命令#define DISP_ONOFF 0x00 /开关背光#define SET_STARTLINE 0xc0 /设置起始行#define SET_XADDRESS 0x80 /设置X地址#define SET_YADDRESS 0x40 /设置Y地址/延时常量#define DELAY_1s 10000

11、00000000#define DELAY_1ms 1000000000#define DELAY_1us 1000000#define DELAY_1ns 1000#define DELAY_1ps 1/*LCD元件既有数字电气特性,也有绘图特性,所以要继承IACTIVEMODEL和IDSIMMODEL*/class LCD19264A : public IACTIVEMODEL,public IDSIMMODELpublic:/* 电气模型成员函数 */数字电路总是返回TRUEINT isdigital (CHAR *pinname);/当创建模型实例时被调用,做初始化工作VOID set

12、up (IINSTANCE *inst, IDSIMCKT *dsim);/仿真运行模式控制,交互仿真中每帧开始时被调用VOID runctrl (RUNMODES mode);/交互仿真时用户改变按键等的状态时被调用VOID actuate (REALTIME time, ACTIVESTATE newstate);/交互仿真时每帧结束时被调用,通过传递ACTIVEDATA数据与绘图模型通信,从而调用animate()进行绘图BOOL indicate (REALTIME time, ACTIVEDATA *data);/当引脚状态变化时被调用,主要用来处理数据输入和输出VOID simul

13、ate (ABSTIME time, DSIMMODES mode);/可通过setcallback()设置在给定时间调用的回调函数VOID callback (ABSTIME time, EVENTID eventid);/* 绘图模型成员函数 */当创建模型实例时被调用,做初始化工作VOID initialize (ICOMPONENT *cpt);/被PROSPICE调用,返回模拟电气模型ISPICEMODEL *getspicemodel (CHAR *device);/被PROSPICE调用,返回数字电气模型IDSIMMODEL *getdsimmodel (CHAR *device

14、);/当原理图需要重绘时被调用VOID plot (ACTIVESTATE state);/当相应的电气模型产生活动事件时被调用,常用来更新图形VOID animate (INT element, ACTIVEDATA *newstate);/用来处理键盘和鼠标事件BOOL actuate (WORD key, INT x, INT y, DWORD flags);private:IINSTANCE *instance; /PROSPICE仿真原始模型IDSIMCKT *ckt; /DSIM的数字元件ICOMPONENT *component; /ISIS内部一个活动组件对象/引脚定义IDSI

15、MPIN *di; /D/IIDSIMPIN *rw; /R/WIDSIMPIN *en; /EIDSIMPIN *cs1; /CS1IDSIMPIN *cs2; /CS2IDSIMPIN *cs3; /CS3IDSIMPIN *d8; /D0D7IBUSPIN *databus; /D0.7/LCD参数BYTE x_addr; /X地址(见手册)BYTE y_addr; /Y地址(见手册)BYTE status; /状态(见手册)BYTE cur_blk; /当前块号(总共分3块,见手册)BYTE DDRAMLCD_BLK_NUMLCD_BLK_LEN*LCD_WIDTH/8; /LCD显示

16、RAMBOOL new_flag; /新数据到达标志/显示参数BOX lcdarea; /LCD显示区域float pix_width, pix_height; /每象素对应矩形的宽和高;CODE:/* 文件:LCD19264A.CPP* 说明:不支持以下特性* (1) 不支持显示开关控制* (2) 不支持设置显示起始行*/i nclude i nclude LCD19264A.h/-/电气模型的实现/构造数字电气模型实例extern C IDSIMMODEL _declspec(dllexport) * createdsimmodel (CHAR *device, ILICENCESERVE

17、R *ils)/授权认证ils-authorize(0x88888888, 0x69); /版本为6.9return new LCD19264A; /创建模型实例/析构数字电气模型实例extern C VOID _declspec(dllexport) deletedsimmodel (IDSIMMODEL *model)delete (LCD19264A *)model; /删除模型实例/数字电路总是返回TRUEINT LCD19264A:isdigital (CHAR *pinname)return 1;/当创建模型实例时被调用,做初始化工作VOID LCD19264A:setup (II

18、NSTANCE *inst, IDSIMCKT *dsim)instance = inst; /PROSPICE仿真原始模型ckt = dsim; /DSIM的数字元件/获取引脚di = instance-getdsimpin(D/I,d/i, true);di-setstate(FLT); /FLOATrw = instance-getdsimpin(R/W,r/w, true);rw-setstate(FLT);en = instance-getdsimpin(E,e, true);en-setstate(FLT);cs1 = instance-getdsimpin(CS1,cs1, tr

19、ue);cs1-setstate(FLT);cs2 = instance-getdsimpin(CS2,cs2, true);cs2-setstate(FLT);cs3 = instance-getdsimpin(CS3,cs3, true);cs3-setstate(FLT);d0 = instance-getdsimpin(D0,d0, true);d0-setstate(FLT);d1 = instance-getdsimpin(D1,d1, true);d1-setstate(FLT);d2 = instance-getdsimpin(D2,d2, true);d2-setstate(

20、FLT);d3 = instance-getdsimpin(D3,d3, true);d3-setstate(FLT);d4 = instance-getdsimpin(D4,d4, true);d4-setstate(FLT);d5 = instance-getdsimpin(D5,d5, true);d5-setstate(FLT);d6 = instance-getdsimpin(D6,d6, true);d6-setstate(FLT);d7 = instance-getdsimpin(D7,d7, true);d7-setstate(FLT);/为方便操作,将D0D7映射为8位总线d

21、atabus = instance-getbuspin(LCD_DBUS, d, 8);databus-settiming(100,100,100); /设置时间延迟databus-setstates(SHI,SLO,FLT); /设置总线逻辑为1,0,三态时的驱动状态/lcd modelx_addr = 0; /X地址(见手册)y_addr = 0; /Y地址(见手册)status = 0; /状态(见手册)new_flag = TRUE; /新数据到达标志/仿真运行模式控制,交互仿真中每帧开始时被调用VOID LCD19264A:runctrl (RUNMODES mode)/交互仿真时用

22、户改变按键等的状态时被调用VOID LCD19264A:actuate (REALTIME time, ACTIVESTATE newstate)/交互仿真时每帧结束时被调用,通过传递ACTIVEDATA数据与绘图模型通信,从而调用animate()进行绘图BOOL LCD19264A:indicate (REALTIME time, ACTIVEDATA *data)if(new_flag) /有新数据到达 data-type = ADT_REAL; /call back animate() to refresh lcd data-realval = (float)time*DSIMTICK

23、;return TRUE;/当引脚状态变化时被调用,主要用来处理数据输入和输出VOID LCD19264A:simulate (ABSTIME time, DSIMMODES mode)BYTE data;if(en-isnegedge() /E的下降沿到达 if(rw-istate()=SLO)|(rw-istate()=WLO) /R/W为低表示写 /读块选择 if(cs1-istate()=SLO)|(cs1-istate()=WLO) cur_blk = 0; else if(cs2-istate()=SLO)|(cs2-istate()=WLO) cur_blk = 1; else

24、if(cs3-istate()=SLO)|(cs3-istate()=WLO) cur_blk = 2; else return; /not select block data = (BYTE)databus-getbusvalue(); /读数据 if(di-istate()=SHI)|(di-istate()=WHI) /D/I为高表示数据 DDRAMcur_blkx_addr*LCD_BLK_LEN+y_addr = data; /写入数据 new_flag = TRUE; /新数据到达标志 y_addr = (y_addr+1)%LCD_BLK_LEN); /y地址自动加1 if(y_

25、addr=0) x_addr = (x_addr+1)%LCD_LINE_NUM); /自动换行 else /D/I为低表示命令 switch(data&CMD_MASK) case DISP_ONOFF: /开关背光 break; case SET_STARTLINE: /设置起始行 break; case SET_XADDRESS: /设置X地址 x_addr = (data&0x07); /bit2bit0 break; case SET_YADDRESS: /设置Y地址 y_addr = (data&0x3f); /bit5bit0 break; default: break; els

26、e /E的下降沿到达,R/W为高表示读结束 databus-drivetristate(time); /驱动总线为三态 else if(en-isposedge() /E的上升沿到达 & (rw-istate()=SHI)|(rw-istate()=WHI) /R/W为高表示读 if(di-istate()=SHI)|(di-istate()=WHI) /D/I为高表示数据 /读块选择 if(cs1-istate()=SLO)|(cs1-istate()=WLO) cur_blk = 0; else if(cs2-istate()=SLO)|(cs2-istate()=WLO) cur_blk

27、 = 1; else if(cs3-istate()=SLO)|(cs3-istate()=WLO) cur_blk = 2; else return; /not select block data = DDRAMcur_blkx_addr*LCD_BLK_LEN+y_addr; databus-drivebusvalue(time, data); /输出数据 y_addr = (y_addr+1)%LCD_BLK_LEN); /y地址自动加1 if(y_addr=0) x_addr = (x_addr+1)%LCD_LINE_NUM); /自动换行 else /D/I为低表示命令 databus-drivebusvalue(time, status); /输出状态 /可通过setcallback()设置在给定时间调用的回调函数VOID LCD19264A:callback (ABSTIME time, EVENTID eventid)/-/绘图模型的实现/ Exported constructor for active component models.extern C IACTIVEMODEL _declspec(dllexport) * createactivemodel (CHAR

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2