Proteus元件制作步骤及方法
- 格式:pdf
- 大小:1.07 MB
- 文档页数:29
Proteus 自建元件库转自: 一、Proteus VSM仿真模型简介在使用Proteus仿真单片机系统的过程中,经常找不到所需的元件,这就需要自己编写。
Proteus VSM的一个主要特色是使用基于DLL组件模型的可扩展性。
这些模型分为两类:电气模型(Electrical Model)和绘图模型(Graphical Model)。
电气模型实现元件的电气特性,按规定的时序接收数据和输出数据;绘图模型实现仿真时与用户的交互,例如LCD的显示。
一个元件可以只实现电气模型,也可以都实现电气和绘图模型。
Proteus为VSM模型提供了一些C++抽象类接口,用户创建元件时需要在DLL中实现相应的抽象类。
VSM模型和Proteus系统通信的原理如下图:绘图模型接口抽象类:ICOMPONENT――ISIS内部一个活动组件对象,为VSM模型提供在原理图上绘图和用户交互的服务。
IACTIVEMODEL――用户实现的VSM绘图模型要继承此类,并实现相应的绘图和键盘鼠标事件处理。
电气模型接口抽象类:IINSTANCE――一个PROSPICE仿真原始模型,为VSM模型提供访问属性、模拟节点和数据引脚的服务,还允许模型通过仿真日志发出警告和错误信息。
ISPICECKT(模拟)――SPICE拥有的模拟元件,提供的服务:访问、创建和删除节点,在稀疏矩阵上分配空间,同时还允许模型在给定时刻强制仿真时刻点的发生和挂起仿真。
ISPICEMODEL(模拟)――用户实现的VSM模拟元件要继承此类,并实现相应的载入数据,在完成的时间点处理数据等。
IDSIMCKT(数字)――DSIM拥有的数字元件,提供的服务:访问数字系统的变量,创建回调函数和挂起仿真。
IDSIMMODEL(数字)――用户实现的VSM数字元件要继承此类,并实现相应的引脚状态变化的判断和回调事件的处理。
IDSIMPIN(数字)――数字组件的引脚,提供检测引脚状态和创建输出事务事件的服务。
Proteus 的用法详解一、用Proteus的步骤:1、建模板点File→New Design,新建模板并选择模板大小。
点File→Save Design,保存模板。
点Design→Edit Design Properties,,编辑模板的标题和作者等。
点Template→Edit Design Defaults,编辑模板的背景颜色和栅格颜色。
点Template→Set Graphics Styles,编辑线的颜色、总线颜色等颜色。
也可以编辑元件的颜色,如下图:点Template→Set Text Styles,编辑文本的颜色,包括总线标号的颜色。
2、在库中选择所有要用的元器件。
3、画图。
4、点Tools→Global Annotator可以对整个或局部的元件自动编号5、如何把当要把Proteus中的图复制到word中时,需要背景色和元件的颜色都是黑白色。
方法:点File→Export Graphics→Export Bitmap,在颜色选项中选中“D isplay”或“Mono”,然后点Filename按钮,选择输出路径,然后点OK,输出BMP格式的图片。
然后打开word,点插入→图片→来自文件,就可以了。
注:如果在颜色选项中选中“D isplay”,则输出的图片,只背景色和元件的颜色是黑白的,其他的颜色不变;如果在颜色选项中选中“Mono”,则输出的图片中,所有的颜色都是黑白的。
6、如何隐藏元件的<TEXT>内容,如下图:方法:选择“Templa te→Set Design Defaults”在弹出的“Edit Design Defaults”窗口中左下角的“Hidden Objects”栏下,将“Show hidden text?”右边的选择框里的钩去掉就OK啦!如下图:7、仿真注:总线的用法:①总线按钮后,开始画总线,画完总线后双击鼠标,就完成了画总线。
②连接普通线和总线时,如果需要弯曲连线的,是在鼠标左键画出连线后,按下Ctrl键后连线就会自动弯曲,然后点击鼠标左键将连线连接到总线上。
PROTEUS下电路原理图设计绘制方法
首先,打开PROTEUS软件,并创建一个新的项目。
选择“File”菜单
中的“New Project”选项,然后选择“Schematic Capture”选项。
在弹
出的对话框中输入项目名称,并选择保存路径。
当添加完所有组件后,可以使用“Wire”工具将组件之间的连接线连
接起来。
选择“Place”工具栏上的“Wire”选项,或者直接按下快捷键“W”来选取该工具。
将鼠标放置在一个组件的引脚上,然后点击并拖动
鼠标到另一个组件的引脚上,这样就可以连接两个组件。
可以使用“Wire”工具连接多个组件,形成一个完整的电路。
还可以使用“Value”工具来给组件设置数值。
选择“Place”工具栏
上的“Value”选项,或者直接按下快捷键“V”来选取该工具。
将鼠标放
置在一个组件上,然后点击鼠标,输入数值。
在绘制完电路原理图后,可以选择“File”菜单中的“Save”选项来
保存原理图。
建议将原理图保存为一个可识别的文件名,方便以后的查找
和修改。
此外,PROTEUS还提供了一些其他功能,如添加注释、设置组件属性、导入和导出文件等。
可以根据需要使用这些功能来完善电路原理图的设计。
最后,PROTEUS还提供了电路仿真功能,可以通过添加测试点和信号
源来模拟电路的工作情况。
通过仿真可以验证电路的设计是否正确,并进
行性能分析和优化。
Proteus 7建造元件之杨若古兰创作在建造道理图器件前应先将器件所对应的PCB封装建造好,以便进行封装的指定.打开Proteus 7.4 ISIS 道理图绘制软件.单击右边工具栏中的2D Graphics Box Mode(2D图形框体模式)图标,在旁边的列表当选择“COMPONENT”画一个框.然后单击右边工具栏中的Device Pins Mode(器件引脚模式)图标,在旁边的列表当选择“ DEFAULT”画管脚.其中,DEFAULT暗示普通引脚;INVERT暗示低电平无效的引脚;POSCLK暗示脉冲降低沿无效的时钟输入引脚;NEGCLK暗示脉冲上升沿无效的时钟输入引脚;SHORT暗示端普通引脚;BUS暗示普通总线引脚.在选择元件引脚时应根据元件引脚实际功能进行选择,留意:在摆放引脚时应将有叉的一端放在外侧,由于,那是用于连接导线用的.当引脚放置完后,右键单击引脚,在弹出的下拉列表当选择“ Edit Properties”(即编辑属性),在弹出的对话框中输入引脚名称,引脚编号,引脚电气类型等,若不想显示引脚名称则可将“显示名称”后的对勾去掉,然后点击Next或OK退出.将所有引脚按上述方法进行设置.如下图所示:当所有引脚设置完成后,然后单击右边工具栏中的(选择模式)将所绘制的图形框选起来(酿成红色),点击菜单栏中的Library (库),鄙人拉列表当选择Make Device…(建造元件),在弹出的对话框中的Device Name(器件名称)中输入器件名,例如CSI24WC02;在Reference Prefix(参考前缀)中输入援用前缀(放置器件时的默认名称),例如U ,其他坚持不变,点击Next,如下图:接着点击“ADD/Edit”按钮为元件添加封装,如下图:在弹出的对话框中接着点击“Add”或直接输入封装名,如下图:在弹出的对话框当选择一个封装,然后点击确定.如下图所示:接着将元件引脚和封装引脚进行对应,方法如下:先点击“A”栏中的引脚号,然后点击右侧的焊盘号,如许便将道理图中的引脚与PCB图中的引脚对应好了,按照同样的方法将其它引脚进行对应.完成后单击Assign??Package s??(指定封装)按钮.如下图:点击Next出现器件属性与定义对话框,坚持默认值.如下图:点击Next出现器件数据手册和帮忙文件定义对话框,没无数据手册和帮忙文件的则不必进行指定,直接点击??Next.如下图:出现索引和库选择话框,在Device??Category 器件类??后单击New,在弹出的对话框中输入器件目录,例如myLIB.如下图:在Device SubCategory(器件子类)后点击New,在弹出的对话框中输入器件子类的目录,例如接插件.如下图:在Device Description (器件描述)项中输入对器件的说明,点击确定.如下图:到此,该器件建造完成.此刻就可以使用该元件了,从Pick Devices对话框中的类别中的myLIB中就可以找到该元件了.记着将刚才建造器件的图形删除掉.。
Proteus中制作元件的PCB封装对于封装库中没有的封装或者是与实际的元件不符的封装,就需要自己在Proteus中制作。
下面以制作一个轻触键的PCB封装为例进行说明,步骤如下:图1 轻触键的PCB封装1、打开PCB编辑软件Proteus 7.4 的ARES。
在Proteus ISIS 编辑环境下,选择“Tools”-- “ Netlist to ARES ”或是单击工具栏中的图标按钮,即可进入PCB设计软件ARES界面。
当然也可直接运行Proteus 7.4 ARES 软件进入其编辑界面。
2、放置焊盘在编辑界面中应根据元件的引脚间距放置焊盘及元件所占空间的大小画元件的边框。
在ARES软件界面中点击左侧工具栏中的或图标用于放置焊盘,这时在对象选择器中列出了所有焊盘的外径和内径的尺寸,我们选择S/C-70-30(其中S表示正方形焊盘,C表示圆形焊盘,70为焊盘的外径尺寸,30为内径的尺寸即钻孔直径)如下图:如果列表中没有该尺寸的焊盘,可单击列表上的图标新建焊盘,在弹出的对话框中输入焊盘的名称及选择焊盘的形状后点击确定,如下图:在接着弹出的对话框中设置好焊盘参数后单击确定即可完成焊盘的新建,如下图:除了新建焊盘外还可点击列表上的图标,即可弹出焊盘修改对话框进行已有焊盘的修改,如下图:现在我们开始放置焊盘,将第一个焊盘放在原点处(即X=0;Y=0),如下图:注意:在屏幕下方有光标的坐标显示,可根据该坐标来放置和复制焊盘即画元件边框。
左边的为X坐标,右边的为Y坐标。
单击工具栏中的图标,切换为光标操作模式,选中刚才放置的焊盘,然后选择“Edit / 编辑”- “Replicate / 焊盘复制”菜单项,在弹出的对话框中进行设置(其中,X-Step为X方向焊盘中心点的距离到焊盘中心点的距离;Y-Step为Y方向焊盘中心点的距离到焊盘中心点的距离;由于只在X方向复制一个焊盘,所以设置如下图所示)后点击确定即可复制焊盘到指定位置。
用PROTEUS绘制电路原理图PROTEUS是一款专业的电子电路仿真软件,它可以用于绘制电路原理图、进行电路仿真以及展示仿真结果。
本文将详细介绍如何使用PROTEUS 绘制电路原理图。
1.选择元件:2.布局和连接元件:在绘制电路原理图时,需要先进行元件的布局,然后再进行元件的连接。
通过鼠标左键点击选中元件,然后将其拖放到所需位置。
通过鼠标左键点击元件的引脚,并将其与其他元件的引脚进行连接。
可以通过点击工具栏上的“Draw Wire”按钮或者使用快捷键“W”来连接元件。
5.保存电路原理图:在绘制电路原理图后,需要保存电路原理图文件,以便进行电路仿真和展示。
通过点击菜单栏上的“File”选项,选择“Save”或者“Save As”选项即可保存电路原理图文件。
可以选择所需的保存路径和文件名。
以上就是使用PROTEUS绘制电路原理图的基本步骤。
在绘制电路原理图时,需要注意以下几点:1.选择合适的元件:根据电路设计需求,选择合适的元件进行绘制。
PROTEUS提供了丰富的元件库,可以根据需要选择所需的元件。
2.布局合理:在进行元件布局时,需要考虑元件之间的连接关系,尽量使电路原理图布局合理、清晰。
3.连接准确:在进行元件连接时,需要确保引脚连接准确,避免出现连接错误导致电路不正常工作。
5.保存文件:在绘制电路原理图后,及时保存文件,以免数据丢失。
总结:PROTEUS是一款功能强大的电子电路仿真软件,可以用于绘制电路原理图、进行电路仿真以及展示仿真结果。
通过上述步骤,可以快速、准确地绘制电路原理图,并进行后续的仿真和分析工作。
希望本文对您有所帮助!。
Proteus 7创造元件之阳早格格创做正在创造本理图器件前应先将器件所对于应的PCB启拆创造佳,以便举止启拆的指定.挨启Proteus 7.4 ISIS 本理图画造硬件.单打左边工具栏中的2D Graphics Box Mode(2D图形框体模式)图标,正在中间的列表中采用“COMPONENT”画一个框.而后单打左边工具栏中的Device Pins Mode(器件引足模式)图标,正在中间的列表中采用“ DEFAULT”画管足.其中,DEFAULT表示一般引足;INVERT表示矮电仄灵验的引足;POSCLK表示脉冲下落沿灵验的时钟输进引足;NEGCLK表示脉冲降高沿灵验的时钟输进引足;SHORT表示端一般引足;BUS表示一般总线引足.正在采用元件引足时应根据元件引足本质功能举止采用,注意:正在晃搁引足时应将有叉的一端搁正在中侧,果为,那是用于连交导线用的.当引足搁置完后,左键单打引足,正在弹出的下推列表中采用“ Edit Properties”(即编写属性),正在弹出的对于话框中输进引足称呼,引足编号,引足电气典型等,若不念隐现引足称呼则可将“隐现称呼”后的对于勾去掉,而后面打Next或者OK退出.将所有引足按上述要领举止树立.如下图所示:当所有引足树立完毕后,而后单打左边工具栏中的(采用模式)将所画造的图形框选起去(形成白色),面打菜单栏中的Library (库),正在下推列表中采用Make Device…(创造元件),正在弹出的对于话框中的Device Name(器件称呼)中输进器件名,比圆CSI24WC02;正在Reference Prefix(参照前缀)中输进引用前缀(搁置器件时的默认称呼),比圆U ,其余脆持稳定,面打Next,如下图:交着面打“ADD/Edit”按钮为元件增加启拆,如下图:正在弹出的对于话框中交着面打“Add”或者曲交输进启拆名,如下图:正在弹出的对于话框中采用一个启拆,而后面打决定.如下图所示:交着将元件引足战启拆引足举止对于应,要领如下:先面打“A”栏中的引足号,而后面打左边的焊盘号,那样便将本理图中的引足取PCB图中的引足对于应佳了,依照共样的要领将其余引足举止对于应.完毕后单打Assign??Package s??(指定启拆)按钮.如下图:面打Next出现器件属性取定义对于话框,脆持默认值.如下图:面打Next出现器件数据脚册战助闲文献定义对于话框,不数据脚册战助闲文献的则不必举止指定,曲交面打??Next.如下图:出现索引战库采用话框,正在Device??Category 器件类??后单打New,正在弹出的对于话框中输进器件目录,比圆myLIB.如下图:正在Device SubCategory(器件子类)后面打New,正在弹出的对于话框中输进器件子类的目录,比圆交插件.如下图:正在Device Description (器件形貌)项中输进对于器件的证明,面打决定.如下图:到此,该器件创造完毕.当前便不妨使用该元件了,从Pick Devices 对于话框中的类型中的myLIB中便不妨找到该元件了.记着将刚刚才创造器件的图形简略掉.。
Proteus制作一个元器件
摸索了一下,发现过程很简单,主要分以下几步:
1.画元件的外形,添加注释
2.定义元件的针脚
3.定义元件的PCB封装
为了保证像我一样的初学者能够看懂,所以尽量多放图
现在我就制作一个AT89C51的复制品,命名为AT89C18. 注意两者的颜色,先画一个矩形框,然后添加引脚
完成这一步之后,选中我做的(右边的那个)右键select all objects 后边框变成红色
在点击library 选择make device
点击NEXT
点击Add/Edit
点击Add
添加封装点击OK 封装添加完成点击后变成
NEXT:
一直NEXT直到出现:
填写相应的
点击OK,你成功可!接下查看一下
可以找到相应的元器件了!。
绘制原理图
启动proteus后将本是实例所需要的元件放入原理图编辑区中,并将位置摆放好.元件的添加可通过点击左边工具栏中的,然后点打开元件挑选对话框,在keywords框中输入所需元件的型号,按OK后元件就会在元件列表中显示出来,然后选择要添加的元件,将鼠标移到右边的原理图编辑区,点击左键即将元件添加到原理图编辑区中,(见下图中的红色框和红色字).这个例子中所需的元件型号有: 单片机AT89C51、显示组件LED-BARGRAPH-RED、电阻MINRES2OOR . 添加完元件后如下图:
元件添加完成
放置完元件后按照图1连好线.
仿真
1.添加仿真文件
按右键选择AT89C51,点左键即可打开AT89C51的元件编辑对话框,单击Program File 选项后面的,出现文件浏览对话框,选择所需仿真的程序文件,单击OK即完成仿真文件添加.
2.仿真
添加仿真文件后单击仿真工具栏中的即开始仿真.为单步运行,为暂停,为停止.
本文来自: 高校自动化网() 详细出处参考(转载请保留本链接):/html/PROTEUS/1403.html。
proteus元件制作步骤及方法一、Proteus VSM仿真模型简介在使用Proteus仿真单片机系统的过程中,经常找不到所需的元件,这就需要自己编写。
Proteus VSM的一个主要特色是使用基于DLL组件模型的可扩展性。
这些模型分为两类:电气模型(Electrical Model)和绘图模型(Graphical Model)。
电气模型实现元件的电气特性,按规定的时序接收数据和输出数据;绘图模型实现仿真时与用户的交互,例如LCD的显示。
一个元件可以只实现电气模型,也可以都实现电气和绘图模型。
Proteus为VSM模型提供了一些C++抽象类接口,用户创建元件时需要在DLL中实现相应的抽象类。
VSM模型和Proteus系统通信的原理如下图:绘图模型接口抽象类:ICOMPONENT――ISIS内部一个活动组件对象,为VSM模型提供在原理图上绘图和用户交互的服务。
IACTIVEMODEL――用户实现的VSM绘图模型要继承此类,并实现相应的绘图和键盘鼠标事件处理。
电气模型接口抽象类:IINSTANCE――一个PROSPICE仿真原始模型,为VSM模型提供访问属性、模拟节点和数据引脚的服务,还允许模型通过仿真日志发出警告和错误信息。
ISPICECKT(模拟)――SPICE拥有的模拟元件,提供的服务:访问、创建和删除节点,在稀疏矩阵上分配空间,同时还允许模型在给定时刻强制仿真时刻点的发生和挂起仿真。
ISPICEMODEL(模拟)――用户实现的VSM模拟元件要继承此类,并实现相应的载入数据,在完成的时间点处理数据等。
IDSIMCKT(数字)――DSIM拥有的数字元件,提供的服务:访问数字系统的变量,创建回调函数和挂起仿真。
IDSIMMODEL(数字)――用户实现的VSM数字元件要继承此类,并实现相应的引脚状态变化的判断和回调事件的处理。
IDSIMPIN(数字)――数字组件的引脚,提供检测引脚状态和创建输出事务事件的服务。
IDBUSPIN(数字)――数字组件的数据或地址总线,提供检测总线状态和创建总线输出事务事件的服务。
IMIXEDMODEL(混合)――同时继承了ISPICEMODEL 和IDS IMMODEL,元件既有模拟特性,又有数字特性。
为了让Proteus访问用户模型中的成员函数,必须创建用户模型的一个实例。
这不能通过类的接口来实现,只能通过从DL L中导出几个C函数来实现,在用户模型中必须实现这些C函数,达到构造和析构用户模型实例的效果。
(1)构造和析构绘图模型实例:IACTIVEMODEL *createactivemodel (CHAR *device, ILICENC ESERVER *ils)VOID deleteactivemodel (IACTIVEMODEL *model) (2)构造和析构模拟电气模型实例:ISPICEMODEL *createspicemodel (CHAR *device, ILICENCE SERVER *ils)VOID deletespicemodel (ISPICEMODEL *model)(3)构造和析构数字电气模型实例:IDSIMMODEL *createdsimmodel (CHAR *device, ILICENCES ERVER *ils)VOID deletedsimmodel (IDSIMMODEL *model)(4)构造和析构混合电气模型实例:IMIXEDMODEL *createmixedmodel (CHAR *device, ILICENCESERVER *ils)VOID deletemixedmodel (IDSIMMODEL *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 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,D0~D7的电气类型选择IO- Bidirectional。
4.右键拖出选择框选择第一个符号,选择菜单库>>制作符号,命名为LCD19264A_C,确定。
同理,第二和第三个分别命名为L CD19264A_1 和LCD19264A_0。
当用户调用drawsymbol (-1),将绘制LCD19264A_C,调用drawsymbol (1),将绘制LCD1926 4A_1,调用drawsymbol (0),将绘制LCD19264A_0。
5.右键拖出选择框选择符号LCD19264A_C,选择菜单库>>制作元件,Device Properties设置如图,点击Next>。
跳过封装设置,点击Next>。
组件属性设置如图,点击Next>。
选择数据手册(可选),点击Next>。
选择器件库,点击OK。
6.打开VC,新建工程,选择Win32 Dynamic-Link Library,给工程命名,建立空的DLL工程。
从Proteus安装目录的INCLU DE文件夹中将VSM.HPP复制到当前工程目录,新建文件LCD1 9264A.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) //lc d length#define LCD_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 1000000000000#define DELAY_1ms 1000000000#define DELAY_1us 1000000#define DELAY_1ns 1000#define DELAY_1ps 1/*LCD元件既有数字电气特性,也有绘图特性,所以要继承IACTIV EMODEL和IDSIMMODEL*/class LCD19264A : public IACTIVEMODEL,public IDSIMMOD EL{public:/* 电气模型成员函数*///数字电路总是返回TRUEINT isdigital (CHAR *pinname);//当创建模型实例时被调用,做初始化工作VOID setup (IINSTANCE *inst, IDSIMCKT *dsim);//仿真运行模式控制,交互仿真中每帧开始时被调用VOID runctrl (RUNMODES mode);//交互仿真时用户改变按键等的状态时被调用VOID actuate (REALTIME time, ACTIVESTATE newstate); //交互仿真时每帧结束时被调用,通过传递ACTIVEDATA数据与绘图模型通信,从而调用animate()进行绘图BOOL indicate (REALTIME time, ACTIVEDATA *data);//当引脚状态变化时被调用,主要用来处理数据输入和输出VOID simulate (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);//当原理图需要重绘时被调用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内部一个活动组件对象//引脚定义IDSIMPIN *di; //D/IIDSIMPIN *rw; //R/WIDSIMPIN *en; //EIDSIMPIN *cs1; //CS1IDSIMPIN *cs2; //CS2IDSIMPIN *cs3; //CS3IDSIMPIN *d[8]; //D0~D7IBUSPIN *databus; //D[0..7]//LCD参数BYTE x_addr; //X地址(见手册)BYTE y_addr; //Y地址(见手册)BYTE status; //状态(见手册)BYTE cur_blk; //当前块号(总共分3块,见手册)BYTE DDRAM[LCD_BLK_NUM][LCD_BLK_LEN*LCD_WIDTH/ 8]; //LCD显示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) * createdsimm odel (CHAR *device, ILICENCESERVER *ils){//授权认证ils->authorize(0x88888888, 0x69); //版本为6.9return new LCD19264A; //创建模型实例}//析构数字电气模型实例extern "C" VOID __declspec(dllexport) deletedsimmodel (IDSI MMODEL *model){delete (LCD19264A *)model; //删除模型实例}//数字电路总是返回TRUEINT LCD19264A::isdigital (CHAR *pinname){return 1;}//当创建模型实例时被调用,做初始化工作VOID LCD19264A::setup (IINSTANCE *inst, IDSIMCKT *dsi m){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", true); cs1->setstate(FLT);cs2 = instance->getdsimpin("CS2,cs2", true); cs2->setstate(FLT);cs3 = instance->getdsimpin("CS3,cs3", true); cs3->setstate(FLT);d[0] = instance->getdsimpin("D0,d0", true); d[0]->setstate(FLT);d[1] = instance->getdsimpin("D1,d1", true); d[1]->setstate(FLT);d[2] = instance->getdsimpin("D2,d2", true); d[2]->setstate(FLT);d[3] = instance->getdsimpin("D3,d3", true); d[3]->setstate(FLT);d[4] = instance->getdsimpin("D4,d4", true);d[4]->setstate(FLT);d[5] = instance->getdsimpin("D5,d5", true);d[5]->setstate(FLT);d[6] = instance->getdsimpin("D6,d6", true);d[6]->setstate(FLT);d[7] = instance->getdsimpin("D7,d7", true);d[7]->setstate(FLT);//为方便操作,将D0~D7映射为8位总线databus = 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){}//交互仿真时用户改变按键等的状态时被调用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 lc ddata->realval = (float)time*DSIMTICK;}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 if((cs3->istate()==SLO)||(cs3->istate()==WLO))cur_blk = 2;elsereturn; //not select blockdata = (BYTE)databus->getbusvalue(); //读数据if((di->istate()==SHI)||(di->istate()==WHI)){ //D/I为高表示数据DDRAM[cur_blk][x_addr*LCD_BLK_LEN+y_addr] = data; //写入数据new_flag = TRUE; //新数据到达标志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为低表示命令switch(data&CMD_MASK){case DISP_ONOFF: //开关背光break;case SET_STARTLINE: //设置起始行break;case SET_XADDRESS: //设置X地址x_addr = (data&0x07); //bit2~bit0break;case SET_YADDRESS: //设置Y地址y_addr = (data&0x3f); //bit5~bit0break;default:break;}}}else{ //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 = 1;else if((cs3->istate()==SLO)||(cs3->istate()==WLO))cur_blk = 2;elsereturn; //not select blockdata = DDRAM[cur_blk][x_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 eventi d){}//---------------------------------------------------------------------------- //绘图模型的实现// Exported constructor for active component models.extern "C" IACTIVEMODEL __declspec(dllexport) * createacti vemodel (CHAR *device, ILICENCESERVER *ils){ils->authorize (0x88888888,0x69); //6.9return new LCD19264A;}// Exported destructor for active component models. extern "C" VOID __declspec(dllexport) deleteactivemodel (IA CTIVEMODEL *model){delete (LCD19264A *)model;}//当创建模型实例时被调用,做初始化工作VOID LCD19264A::initialize (ICOMPONENT *cpt){//获取ICOMPONENT接口和初始化component = cpt;component->setpenwidth(0);component->setpencolour(BLACK);component->setbrushcolour(BLACK);//获取显示区域component->getsymbolarea(0,&lcdarea);//计算每象素对应矩形的宽和高pix_width = (float)(lcdarea.x2-lcdarea.x1-BLANK_WIDTH*2-SY M_LINEWIDTH*2)/LCD_LENGTH;pix_height = (float)(lcdarea.y2-lcdarea.y1-BLANK_WIDTH*2-SY M_LINEWIDTH*2)/LCD_WIDTH;}//被PROSPICE调用,返回模拟电气模型ISPICEMODEL *LCD19264A::getspicemodel (CHAR *){return NULL;}//被PROSPICE调用,返回数字电气模型IDSIMMODEL *LCD19264A::getdsimmodel (CHAR *){return this;}//当原理图需要重绘时被调用VOID LCD19264A::plot (ACTIVESTATE state){//绘制LCD19264A_C元件基本图形component->drawsymbol(-1);//刷新LCD数据显示new_flag = TRUE;animate (0, NULL);}//当相应的电气模型产生活动事件时被调用,常用来更新图形VOID LCD19264A::animate (INT element, ACTIVEDATA *dat a){BOX pix;BYTE dat,block,line,byte_off,bit_off;if(new_flag){ //当有新数据到达new_flag = FALSE;component->begincache (lcdarea); //打开缓冲component->drawsymbol(1); //显示LCD19264_1符号//显示各点数据for(block=0; blockfor(line=0; linefor(byte_off=0; byte_offdat = DDRAM[block][line*LCD_BLK_LEN+byte_off]; //get b yte datafor(bit_off=0; bit_off<8; bit_off++){if(dat&(1< pix.x1 = (int)(BLANK_WIDTH+(block*LCD_B LK_LEN+byte_off)*pix_width+0.5);pix.y1 = -(int)(BLANK_WIDTH+(line*8+bit_off)*pix_height+ 0.5);pix.x2 = pix.x1 + (int)(pix_width+0.5);pix.y2 = pix.y1 - (int)(pix_height+0.5);component->drawbox(pix); //绘制1个象素点}}}}}component->endcache(); //结束缓冲,显示数据}}//用来处理键盘和鼠标事件BOOL LCD19264A::actuate (WORD key, INT x, INT y, DWO RD flags){return FALSE;}7.搭建电路如下电路,新建Keil C工程,编写代码测试元件。