proteus自制元件实例
- 格式:doc
- 大小:858.50 KB
- 文档页数:23
Proteus虚拟仿真案例-——流水灯制作一、原理图设计1.打开proteus,新建文件2.选择元器件(1)选择单片机芯片左侧快捷菜单栏里按下,按下P,在“关键字”栏中输入“8951”,选择AT89C51(2)选择晶振:输入crystal,选择CRYSTAL(3)选择电容:输入22p,左边类别中选择Capacitors,右边选择CERAMIC22P(4)选择电阻:输入10k,左边类别中选择Resistors,右边选择RESISTORS库的3WATT10K(5)选择led:输入led,左边类别中选择Optoelectronics,右边选择led—yellow(6)选择按钮:输入button,选择USERDVC库的BUTTON(7)选择好的元器件如图所示3.放置器件振荡电路:(1)放置AT89C51单片机:在DEVICES栏中选中AT89C51,然后在绘制区放置到合适的位置(2)放置晶振,隐藏text属性(菜单-模板—设置设计默认值—显示隐藏文本不勾选)(3)分别将晶振的两脚与AT89C51的19、18脚相连(4)放置两个22p的电容,一端与晶振相连,另一端互连(5)放置地节点(左侧快捷菜单栏里按下—-GROUND),与两个电容相连复位电路:a.放置电源节点(左侧快捷菜单栏里按下——POWER)b.放置地节点c.放置电容,电阻,电阻一端接地,一端与电容相连,电容一端接+5V电源d.AT89C51第9脚接电阻、电容中间e.放置按钮,接电容两端f.右击按钮——编辑属性——元件参考:BUTTON,并取消“本元件不用于PCB制版”g.修改C3电容的值:右击——编辑属性—-Capacitance改为10u绘制流水灯:a.放置电阻、led,右击led——编辑属性——隐藏元件值,连接电阻和ledb.使用块复制,复制7组电阻和ledc.放置电源,分别与D1—D8的一端连接d.总线绘制:左侧选择“总线模式”,绘制一条总线,连接P1口与R2-R9e.使用属性分配工具进行快速网络标号:按下a,出现属性分配窗口,“字符串”框输入“net=D#”,单击P0口的8条线,进行编号,再次按下a,出现属性分配窗口,“字符串”框输入“net=D#”,单击R2—R9的8条线,进行编号f.批量修改R2-R9的值:按下a,出现属性分配窗口,“字符串”框输入“VALUE=100”,确定二、系统仿真1.编写源代码(1)菜单——源代码——添加/删除源文件—-new——文件名输入pmd。
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 7制作元件时间:2021.02.03 创作:欧阳体在制作原理图器件前应先将器件所对应的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”或直接输入封装名,如下图:在弹出的对话框中选择一个封装,然后点击确定。
PROTEUS入门实例教程3--添加电池、可调电阻、电流、电压表1.- 新建一个文档2.- 使用Pick Devices添加以下元件(方法见例1)- BATTERY- LAMP- POT-LIN这里介绍一个更快捷的方法,就是使用Pick Devices的搜索功能(前提是你知道要找的元件的名字至少知道名字的前几个字母),该功能位于Pick Devices 对话框的左上角。
3.- 搭好以下电路POT-LIN的电阻值设为200BATTERY的电压值设为123.- 添加直流电流表和直流电压表a.- 找到这个工具条,红色圈的那个就是INSTRUMENTS(仪表元件)了。
b.- 单击这个按钮,会在The Object Selector(元件列表框)列出所有仪表,其中的DC AMMETER和DC VOLTMETER是我们要用到的,选中DC AMMETER并在原理图的适当位置单击左键,这样DC AMMETER就被放置到原理图中了。
同理放置DC VOLTMETER。
最终电路:c.- 设置DC AMMETER和DC VOLTMETER,DC AMMETER和DC VOLTMETER 不会根据电路的实际电流、电压值来自动改变量程(比如DC AMMETER默认的单位是A,它能测量的最小电流值是0.01A,如实际电路的电流值为9mA,那它就显示为0.00A),需要手动修改。
操作跟修改一般元件一样。
Display Range 有三个值A、mA、uAe.- 仿真结果。
在仿真过程中,你可以点击可调电阻POT-LIN上方的两个红色箭头来调节电阻值,这时LAMP的亮度也随之改变,DC AMMETER 和DC VOLTMETER的显示值也随之改变。
注意到了没有?!这个图好像有点特别,对了!!它就是例1后面介绍Set Animation Options中选择Show Wire Voltage by Colour?和Show Wire Current with Arrows?后的效果。
例子1:简易串联电路演示为了快速掌握PROTEUS设计与仿真操作,我们先从一简单实例入手带你入门。
让我们首先来熟悉一下仿真软件的主界面:图1-1 仿真软件的主界面运行protues的ISIS模块,进入仿真软件的主界面,如图1-1所示,区域①为菜单及工具栏,区域②为元器件预览区,区域③为对象选择器窗口,区域④为编辑窗口,区域⑤为绘图工具栏,区域⑥为元器件调整工具栏,区域⑦为运行工具条。
Proteus是一种集单片机仿真和SPICE分析于一身的仿真软件。
其功能非常强大,不仅能仿真模拟电路、数字电路以及模拟数字混合电路,更重要的是可以仿真51系列、AVR、PIC等常用主流单片机。
Protues提供了丰富的资源:(1)Proteus拥有的元器件资源:Proteus可提供30多种元件库,超过8000种模拟、数字元器件。
(2)Proteus可提供的仿真仪表资源:仿真仪器仪表的数量、类型和质量是衡量仿真实验室是否合格的一个关键因素。
Proteus可提供常用的示波器(本文的实例中示波器被用来观察产生的波形)、逻辑分析仪、虚拟终端、SPI调试器、I2C调试器、信号发生器、模式发生器、交直流电压表、交直流电流表。
步骤一:PROTEUS电路设计整个设计都是在ISIS编辑区中完成的。
(1)单击工具栏上的“新建”按钮,新建一个设计文档。
单击“保存”按钮,弹出如图5-2所示的“Save ISIS Designe File”对话框,在文件名框中输入“简易串联电路演示”(简单实例的文件名),再单击“保存”按钮,完成新建设计文件操作,其后缀名自动为.DSN。
图1-2保存ISIS设计文件(2)选取元器件此简单实例需要如下元器件:直流电源:BA TTERY熔断器(保险丝):FUSE灯泡:LAMP可变电阻器:POT-HG开关:SWITCH单击图1-3中的“P”按钮,弹出如图1-4所示的选取元器件对话框,在此对话框左上角“keywords(关键词)”一栏中输入元器件名称,如“BA TTERY”,系统在对象库中进行搜索查找,并将与关键词匹配的元器件显示在“Results”中。
Proteus制作一个元器件
摸索了一下,发现过程很简单,主要分以下几步:
1.画元件的外形,添加注释
2.定义元件的针脚
3.定义元件的PCB封装
为了保证像我一样的初学者能够看懂,所以尽量多放图
现在我就制作一个AT89C51的复制品,命名为AT89C18. 注意两者的颜色,先画一个矩形框,然后添加引脚
完成这一步之后,选中我做的(右边的那个)右键select all objects 后边框变成红色
在点击library 选择make device
点击NEXT
点击Add/Edit
点击Add
添加封装点击OK 封装添加完成点击后变成
NEXT:
一直NEXT直到出现:
填写相应的
点击OK,你成功可!接下查看一下
可以找到相应的元器件了!。
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中就可以找到该元件了.记着将刚才建造器件的图形删除掉.。
arduino 用proteus仿真基础知识和实例Proteus 是一款功能强大的电子设计自动化软件,它可以帮助我们进行电路设计、仿真和制板。
在使用 Proteus 进行 Arduino 仿真时,需要了解一些基础知识和实例。
首先,需要在 Proteus 中创建一个新的项目,并选择适当的模板。
然后,可以在原理图编辑器中绘制电路原理图,添加 Arduino 芯片和其他元件。
在添加 Arduino 芯片时,需要选择正确的型号和引脚布局。
Proteus 提供了多种Arduino 芯片型号可供选择,例如 Uno、Nano、 Mega 等。
选择芯片后,可以将其放置在原理图上,并连接其他元件。
为了进行仿真,需要在 Proteus 中添加 Arduino 程序代码。
可以使用 Proteus 的 AVR 编译器来编译和上传代码到 Arduino 芯片中。
在编译和上传代码之前,需要设置正确的编译器路径和 Arduino 芯片型号。
一旦添加了代码,就可以开始进行仿真。
Proteus 提供了一个虚拟的 Arduino 芯片,可以模拟 Arduino 的行为。
可以通过观察虚拟芯片的输入和输出来验证电路的正确性。
以下是一个简单的 Proteus 仿真实例:1. 创建一个新的 Proteus 项目,并选择 AVR 模板。
2. 在原理图编辑器中绘制一个简单的电路,例如一个 LED 和一个电阻。
3. 添加 Arduino Uno 芯片,并将 LED 和电阻连接到相应的引脚。
4. 使用 Proteus 的 AVR 编译器编译并上传一个简单的 Arduino 程序,例如使 LED 闪烁。
5. 开始仿真,观察 LED 是否按照预期闪烁。
通过这个实例,可以了解如何使用 Proteus 进行简单的 Arduino 仿真。
需要注意的是,Proteus 仿真只是一种辅助工具,实际的 Arduino 硬件测试仍然是必要的。
《单片机C语言程序设计实训100例—基于8051+Proteus仿真》案例第01 篇基础程序设计01 闪烁的LED/* 名称:闪烁的LED说明:LED按设定的时间间隔闪烁*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intsbit LED=P1^0;//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){while(1){LED=~LED;DelayMS(150);}}02 从左到右的流水灯/* 名称:从左到右的流水灯说明:接在P0口的8个LED从左到右循环依次点亮,产生走马灯效果*/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){P0=0xfe;while(1){P0=_crol_(P0,1); //P0的值向左循环移动DelayMS(150);}}03 8只LED左右来回点亮/* 名称:8只LED左右来回点亮说明:程序利用循环移位函数_crol_和_cror_形成来回滚动的效果*/#include<reg51.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){uchar i;P2=0x01;while(1){for(i=0;i<7;i++){P2=_crol_(P2,1); //P2的值向左循环移动DelayMS(150);}for(i=0;i<7;i++){P2=_cror_(P2,1); //P2的值向右循环移动DelayMS(150);}}}04 花样流水灯/* 名称:花样流水灯说明:16只LED分两组按预设的多种花样变换显示*/#include<reg51.h>#define uchar unsigned char#define uint unsigned intuchar code Pattern_P0[]={0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe, 0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff};uchar code Pattern_P2[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0xff,0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff};//延时void DelayMS(uint x){uchar i;while(x--){for(i=0;i<120;i++);}}//主程序void main(){uchar i;while(1){ //从数组中读取数据送至P0和P2口显示for(i=0;i<136;i++){P0=Pattern_P0[i];P2=Pattern_P2[i];DelayMS(100);}}}05 LED模拟交通灯/* 名称:LED模拟交通灯说明:东西向绿灯亮若干秒,黄灯闪烁5次后红灯亮,红灯亮后,南北向由红灯变为绿灯,若干秒后南北向黄灯闪烁5此后变红灯,东西向变绿灯,如此重复。
在Proteus 8 Professional 库中添加可以仿真的元器件如何在Proteus 8 Professional 库中添加可以仿真的元器件,我在网上找了许久都没有找到答案。
迫不得已之下,只得自己研究添加可以仿真的元器件。
通过多次尝试终于添加成功,现在我以infineon公司的Power MOSFET管IPW90R120C3为例,将在Proteus 8 Professional 库中添加可以仿真元器件的方法记录下来、并分享给大家供大家参考。
一、下载仿真文件。
地址:https:///dgdl/Infineon-Power_CoolMOS_C3_MOSFET_900V_Spice-SimulationModels-v01_00-EN.zip?fileId=db3a30433d346a2d013d4498c5f54ba8二、在Proteus中找一个与IPW90R120C3电器符号相同的器件放入图纸编辑区。
如下图:三、选中该器件,点击菜单中的“库->分解”或工具栏中的按钮将该器件分解。
四、分别编辑三个管教的针号和名称与仿真文件保持一致。
如下面图片:五、圈选该器件,点菜单中的“库->制作元件”或点工具栏中的按钮,弹出“制作元件”对话框。
并按下面图片中的内容填写。
六、点“下一步”,点“添加/编辑”打开添加封装页面。
七、点“增加”,输入“TO247”,然后选择“TO247”。
八、点“确定”,点“分配封装”。
然后点“下一步”。
九、点“新建->PRIMITIVE”,然后按下图输入:十、点“新建->SPICEPINS”,然后按下图输入:十一、点“新建->SPICEMODEL”,然后按下图输入:十二、将上面下载的仿真SPICE模型文件解压重命名为“IPx90xxx_Spice.lib”,并保存到“C:\PROTEUS\LIB”。
这个路径可由你自己定义,只要与下面的输入一致就可以了。
在用Proteus设计原理图的过程中,当需要的元件在库中不能直接找到时,除了可以自己制作原理图元件外,也可以利用现有元件,在现有元件的基础上进行修改,使其符合我们的需要。
以74LS373为例,利用库中自带的元件,如图1所示,将其修改成如图2所示的,".bus”接口的元件。
图1 库中自带图2
在Proteus 7 ISIS原理图编辑环境下,添加元件74LS373,选中74LS373,再右击的选中74LS373,在下拉菜单中选中分解元件,出现如图3所示画面,于是此元件处于可修改状态下。
图3
对元件的各部分进行修改,与新建元件操作相同,选中引脚直接修改完成后保存。
通过proteus软件自带的一些例子,了解软件的应用:例1:点击工具条中的打开按钮,则会打开默认的Sample目录(案例),在目录中,找到文件夹“Interactive Simulation”——“Animated Circuits”打开其中的文件AC01得到下图所示例子一个交流电源和一个灯泡。
点击“启动”按钮,运行仿真,查看效果在交流电源的正半周期和负半周期,可以看到电流有不同的方向,但是灯泡一直都是亮着的。
例2:按上述方法,打开“Animated Circuits”文件夹中的AC02启动仿真查看效果例3:打开AC03增加了变压器、电压表(测量电压)例4:Basic01增加了开关按钮。
与我们做的电路类似例6:Basic03两个灯泡串联例7:Basic04两个灯泡并联双联开关,类似家中进门一个开关,床头一个开关,都可控制电灯。
例9:Basic06电动机正反转控制例10:Basic07保险丝短路仿真直流电路串联电容仿真效果例12:Caps02电容充放电仿真电容充放电仿真+电压表、电流表测量例14:Comb01逻辑门“与”门仿真例15:Comb02“或”门仿真例16:Comb03非门与非门(NAND)和与门+非门(AND和NOT)例17:Comb05或非门(NOR)和或门+非门(OR和NOT)例18:Comb06异或门(XOR)例19:Counter——计数器例20:DIODE01二极管正向导通例21:DIODE02二极管反向截止。
交流电半周期导通——整流例23:DIODE04——同上,加了电流表测试电流例24:DIODE05——加电阻和电压表测试电压电路中,增加电容,作用是——稳压!例26:DIODE074个二极管组成整流桥,使电源在正半周和负半周都能够给电路提供电流。
用波形图绘制出来就是:图中,横线为0V电压线,黄色为左侧交流电压,蓝色为右侧灯泡电压效果就是,不管在交流电的正半周或者负半周,经过整流桥输出的电压均为正电压!!例27:DIODE08整流稳压电路,比上例多了电容,起到“稳压”的作用。
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的51单片机仿真实例四、第一个proteus仿真实例现在来做第一个基于proteus的仿真实例,同时也了解、熟练一下proteus的使用方法1、打开proteus的智能原理图输入系统ISIS,进入工作环境,2、这个实例中,我们建立如下的电路图。
下面就开始一步一步的实现这个目标吧。
3、单击菜单栏“文件”--“新建设计”选项,弹出模板选择窗口,如下图所示,选择默认模板“DEFAULT”,选择“OK”按钮,即可创建一个新的设计文件。
4、文件创建成功后,要养成立即保存的习惯。
点击“保存”选项,选择保存的路径和文件名。
5、元件的选取。
操作步骤如下图6、点击“P”按钮后,弹出元器件选择对话框。
元器件的选取有两种方法:输入关键字查找、在分类元件中查找。
如下图所示7、添加单片机,在关键字文本框中输入“at89c51”,然后从搜索结果中选择所需要的型号,如下图所示。
选中元件后双击该元件名,该元件就被自动添加到对象选择器。
8、添加电阻。
输入关键字“resistors 470r”,搜索结果栏中将显示所有的匹配元件。
在这里我们选择参数为470R,0.6W的电阻,双击元件名将其添加到对象选择器中。
用同样的方法添加10K电阻(0.6W)到对象选择器中。
9、添加发光二极管。
输入关键字“led-yellow”,在搜索结果栏中选择所需的发光二极管,双击将其放入对象选择器。
10、添加晶振。
输入关键字“cycrtal”,结果搜索栏内只有一种晶振类型,双击将其加入对象选择器。
11、添加电容。
添加33P电容:输入关键字“capacitors”,在搜索结果栏内列出了各种类型的电容,接着输入“33pF”。
则列出各种33pF的电容,选择耐压为50V的电容,双击将其加入对象选择器。
添加10U电容,输入关键字“capactions 10u”,选择“50V radial electrolytic”(圆柱形电解电容),双击将其添加到对象选择器。
自制元件例一- CSI24WC02CSI24WC02是串行E2PROM,兼容400 kHz I2C 总线控制。
一个元件可以只实现绘图模型或电气模型,也可以电气和绘图模型都实现。
该例子我们只实现绘图模型。
详细信息见帮助的Styles :Component creation或Styes: Component creation部分。
管脚描述CSI24WCXX系列E2PROM提供标准的8脚DIP封装和8脚表面安装的SOIC封装。
其管脚功能描述如下:●SCL 串行时钟这是一个输入管脚用于产生器件所有数据发送或接收的时钟●SDA串行数据/地址这是一个双向传输端用于传送地址和所有数据的发送或接收它是一个漏极开路端因此要求接一个上拉电到Vcc 端典型值为100KHz 是为10K 400KHz 时为1K 对于一般的数据传输仅在SCL为低期间SDA才允许变化在SCL为高期间变化留给指示START开始和STOP停止条件●A0 A1 A2 器件地址输入端这些输入端用于多个器件级联时设置器件地址当这些脚悬空时默认值为0 CSI24WC01 除外●WP 写保护如果WP管脚连接到Vcc所有的内容都被写保护只能读当WP 管脚连接到Vss或悬空允许器件进行正常的读/写操作绘制元件●单击2D Graphics Box Mode > COMPONENT,画一个框。
●单击Device Pins Mode > DEFAULT,画管脚。
●右击引脚> Edit Properties,输入管脚名称,例如A0;输入默认管脚号,例如1,确定。
●选择所设计的图形(翻红)> Library > Make Device…,在Device Name中输入器件名,例如CSI24WC02;在Reference Prefix中输入引用前缀(放置器件时的默认名称),例如U ,其他保持不变,Next>。
●单击ADD/Edit添加封装●选择一个封装,例如DIL08,单击Assign Package(s),指派封装。
●Next●组件属性与定义,保持默认,Next>。
●器件数据手册和帮助文件定义,没有手册和帮助,略过,Next>。
●索引和库选择,单击New,输入器件目录,例如My Device,OK,OK。
完成。
现在就可以使用该元件了,从Pick Devices的目录My Device中也可以找到该元件。
自制元件例二– 7段数码管我们也可以通过改造原有器件来创建新器件,这样我们就不必从头开始创建一个新器件。
下面我们以7段共阳绿色数码管7SER-COM-AN-GRN为例创建一个新器件。
这个数码管原来不带封装,我们通过改造给它加上封装,并重新命名为新器件。
●在设计图纸上防置一个7SER-COM-AN-GRN。
●右击该器件> Decompose,分解该器件。
下面是分解后的器件。
●选择所设计的图形(翻红)> Library > Make Device…,保持Device Name中的器件名;在Reference Prefix中输入引用前缀(放置器件时的默认名称),例如D,其他保持不变,Next>。
●单击ADD/Edit添加封装1)先在Packabe Device对话框中的A列中随意输入管脚编号,例如1、2、3…(原来没有管脚编号)。
2)单击Add,选择一个封装,例如7SEG.3+A。
3)依据封装重新输入管脚编号。
4)单击Assign Package(s),指派封装。
组件属性与定义,指定默认封装为7SEG.3+A,Next>。
●器件数据手册和帮助文件定义,没有手册和帮助,略过,Next>。
● 索引和库选择,单击New ,输入器件目录,例如My Device ,OK ,OK 。
完成。
现在就可以使用该元件了,从Pick Devices 的目录My Device 中也可以找到该元件。
●如果以前图上有该器件,更新图中该器件的实例,OK 。
●将以前器件的PCB Package 属性改为7SEG .3+A ,并添加组件引用名,例如:D1。
注意:器件必须有引用名才能在ARES 中布局。
一、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 和IDSIMMODEL,元件既有模拟特性,又有数字特性。
为了让Proteus访问用户模型中的成员函数,必须创建用户模型的一个实例。
这不能通过类的接口来实现,只能通过从DLL中导出几个C函数来实现,在用户模型中必须实现这些C函数,达到构造和析构用户模型实例的效果。
(1)构造和析构绘图模型实例:IACTIVEMODEL *createactivemodel (CHAR *device, ILICENCESERVER *ils)VOID deleteactivemodel (IACTIVEMODEL *model)(2)构造和析构模拟电气模型实例:ISPICEMODEL *createspicemodel (CHAR *device, 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 (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,确定。
同理,第二和第三个分别命名为LCD19264A_1 和LCD19264A_0。
当用户调用drawsymbol (-1),将绘制LCD19264A_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复制到当前工程目录,新建文件LCD19264A.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_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元件既有数字电气特性,也有绘图特性,所以要继承IACTIVEMODEL和IDSIMMODEL */class LCD19264A : public IACTIVEMODEL,public IDSIMMODEL{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显示RAM BOOL new_flag; //新数据到达标志//显示参数BOX lcdarea; //LCD显示区域float pix_width, pix_height; //每象素对应矩形的宽和高};CODE:/****************************************************************** 文件:LCD19264A.CPP* 说明:不支持以下特性* (1) 不支持显示开关控制* (2) 不支持设置显示起始行*****************************************************************/#i nclude <string.h>#i nclude "LCD19264A.h"//----------------------------------------------------------------------------//电气模型的实现//构造数字电气模型实例extern "C" IDSIMMODEL __declspec(dllexport) * createdsimmodel (CHAR *device, ILICENCESERVER *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 (IINSTANCE *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", 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(FL T);d[1] = instance->getdsimpin("D1,d1", true);d[1]->setstate(FL T);d[2] = instance->getdsimpin("D2,d2", true);d[2]->setstate(FL T);d[3] = instance->getdsimpin("D3,d3", true);d[3]->setstate(FL T);d[4] = instance->getdsimpin("D4,d4", true);d[4]->setstate(FL T);d[5] = instance->getdsimpin("D5,d5", true);d[5]->setstate(FL T);d[6] = instance->getdsimpin("D6,d6", true);d[6]->setstate(FL T);d[7] = instance->getdsimpin("D7,d7", true);d[7]->setstate(FL T);//为方便操作,将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 lcddata->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地址自动加1if(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地址自动加1if(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 *device, ILICENCESERVER *ils){ils->authorize (0x88888888,0x69); //6.9return new LCD19264A;}// Exported destructor for active component models.extern "C" VOID __declspec(dllexport) deleteactivemodel (IACTIVEMODEL *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-SYM_LINEWIDTH*2)/LCD_LENGTH;pix_height = (float)(lcdarea.y2-lcdarea.y1-BLANK_WIDTH*2-SYM_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 *data){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; block<LCD_BLK_NUM; block++){ //blockfor(line=0; line<LCD_LINE_NUM; line++){ //linefor(byte_off=0; byte_off<LCD_BLK_LEN; byte_off++){ //line offdat = DDRAM[block][line*LCD_BLK_LEN+byte_off]; //get byte datafor(bit_off=0; bit_off<8; bit_off++){if(dat&(1<<bit_off)){ //bit=1pix.x1 = (int)(BLANK_WIDTH+(block*LCD_BLK_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, DWORD flags) {return FALSE;}7.搭建电路如下电路,新建Keil C工程,编写代码测试元件。