软件课程设计课程设计.docx
软件课程设计课程设计沈阳航空航天大学电子信息工程学院电子设计应用软件训练总结报告专业:电子信息工程学院训练时间:2013年 7月1日至 2012年7月12日电子信息工程学院电子设计应用软件训练任务一 、训练任务1、PROTEL 部分(1) 熟练掌握PROTEL 软件的使用;(2) 按要求绘制电路原理图和PCB 版图(能够用自动布线和手动布线相结合);(3) 能够按要求建立元件库和封装库。2、软件设计部分按照给定的软件设计任务完成相应的软件设计(见软件设计任务部分)。二、基本要求及说明1、PROTEL 部分(1) 电路原理图图纸尺寸按照给定的任务作相应的设置;(2) 电路原理图见PROTEL 训练任务部分;(3) 按指定电路图在PROTEL 99 中绘制原理图和印制板图;(4) 按照给定要求创建原理图器件和该器件的相应的封装(见PROTEL训练任务部分)。查找资料, 按资料创建原理图中某一元件及其封装形式;2、软件设计部分按软件设计要求实现相应的功能(见软件设计任务部分)三、按照要求撰写总结报告成绩评定表评语、建议或需要说明的问题:指导教师签字: 日期:成 绩PROTEL 训 练 任 务Protel部分一、任务说明 1.熟练掌握PROTEL 软件的使用; 2.按要求绘制电路原理图和PCB 版图(能够用自动布线和手动布线相结合); 3.能够按要求建立元件库和封装库。二、原理图绘制说明并新建一个元件库1.新建设计数据库文件打开Protel 99,应先建立数据库,点击File中的new,Database File Name处可输入设计库存盘文件名,点击Browse改变存盘目录,单击OK,即可建立设计数据库。如下图1。图1新建设计数据库选取File/New.打开New Document对话框,如图,选取Schematic Document建立一个新的原理图文档。如图2。图2新建原理图文档选择菜单中的Ddesign/Options命令,系统将弹出Document Options对话框,并在其中选择Sheet Options选项卡进行设置接下来要设置电路图图纸信息,将电路原理图图纸设置为A4尺寸。如图3所示。 图3 页面大小设置Win7系统无法添加库,在EDA实验中心如果在library找不到对应元件,点击Add/Remove按钮,屏幕将出现“元件库添加、删除”对话框。在Design Explorer 99LibrarySch文件夹下选取元件库文件,然后点击Add按钮,此元件库就会出现在Selected Files框中,然后点击OK按钮,完成该元件库的添加。如图4所示。图4 元件库添加、删除2.元件库的建立由于有的元件在库中找不到,我们可以自己新建元件库,建好后的元件库如图5所示,共自建三个原件图5 自建的元件库3绘制导线单击Wiring Tools工具栏中的有两条线的图标,光标变成十字形,单击鼠标左键确定导线的起点,在导线的终点处单击鼠标左键确定终点,单击鼠标右键,则完成了一段导线的绘制,此时仍为绘制状态,将光标移到新导线的起点,单击鼠标左键,按前面的步骤绘制另一条导线,最后单击鼠标右键两次退出绘制状态。绘制好的原理图如图附录I所示。三、 印制板图绘制说明1生成网络表文件打开原理图文件,执行菜单命令Design|CreateNetlist,系统弹出Netlist Creation网络表设置对话框,如图6所示。 图6电气规则检查 如果此时检查没有错误,检查结果如图7所示 图7电气规则检查结果当我们设计好原理图,在进行了ERC电气规则检查正确无误后,就要生成网络表,为PCB布线做准备。在“Design”下选取“Create Netlist”对话框,设置为那种格式的网络表。网表生成后,就可以进行PCB设计了。如图8所示。 图8 网络表的生成 生成的网络表如图9所示图9生成的网络表2元件封装的创建如果原理图中的元件的封装形式在封装库中没有,需要自己建立,在自己的封装库中建立如下:首先根据任务书中给的尺寸距离,开始在封装库中放置焊点,放置焊点时光标变为十字,中间带有一个焊盘,移动光标使焊盘到达合适的位置后,单击鼠标将其定位,将工作层面切换到顶层布线层,执行菜单命令画线,然后画出绘制元件的外形轮廓方形。将原件重新命名,这样该元件的封装就成功创建了。3. 绘制印制板图新建PCB文件,在“Documents”中新建“Sheet1.Pcb”,如图10所示。图10 新建Sheet1.Pcb 在PCB文档界面下点击“Design”菜单下的“Netlist”,然后通过浏览找到自己新建的扩展名为.NET的文件,这样就把网络表导入到PCB文件中了,如果没有错误就开始布线,选择自动布线。完成布线结果见附录图。四、 总结通过这次protel课程设计,我基本了解了软件的使用,同时在老师的指导下能够完成两张图的制作,学到了不少知识,也开拓了视野。五、参考文献.赵建领Protel 99 SE设计宝典第2版 ,M北京:电子工业出版社,2011.邓奕Protel 99 SE原理图与PCB设计,M北京:人民邮电出版社,2011.杜刚电路板设计与制作:Protel应用教程主编,M清华大学出版社 2010 .陈强Protel电路设计入门与实例,M中国电力出版社 2009 .蔡杏山零起步轻松学Protel99 SE电路设计,M人民邮电出版社 2007 附录I 电路原理图附录II 印制板图软 件 设 计 任 务题目猴子吃桃子问题内容及要求:有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第10天就只余下一个桃子。用多种方法实现求出原来这群猴子共摘了多少个桃子。要求:1. 采用数组数据结构实现上述求解2. 采用链数据结构实现上述求解一、任务说明根据题目要求,设猴子共摘的桃子个数为n即是第一天桃子的个数n1, 第第二天时桃子个数n2,第三天时桃子个数n3,第四天时桃子个数n4,第五天时桃子个数n5,第六天时桃子个数n6,第七天时桃子个数n7,第八天时桃子个数n8,第九天时桃子个数n9,第十天时桃子个数n10。由题中“每天都吃当前桃子的一半且再多吃一个”很容易知道n10=1,n9-(n9/2+1)=n10,n8-(n8/2+1)= n9 依次推出公式:ni-1-(ni-1/2+1)= ni(0。即ni-1= 2*(ni+1)(0。二、软件设计过程及流程图1软件设计过程数组求解法分析分析:声明一个长度为10的整形数组a10,分别存放各天猴子吃前的桃子数。下图1所示:n1n2n3n4n5n6n7n8n9n10a0 a1a2a3a4a5a6a7a8a9图1 数组元素分布图先将a9赋值为1,用一个循环语句for(inti=8;i>=0;i-)ai=2*(ai+1+1);为其余各数组元素赋值,则数组元素a0的值便是该问题的解。数据类型定义:int a10;a9=1;链表求解法分析分析:建立单链表,声明一个类用来对链表的结点指针进行定义,在初始化函数中利用头插法创建具有10个元素的链表,并依次安公式ni-1= 2*(ni+1)(0。赋值得到一个如图2所示的链表。headN3 nextN4 nextN5 nextN1 NULLN2 nextN7 nextN8 nextN9 nextN10 nextnextN6 next图2 链表结点逻辑结构图那么N1便是要求问题的解。数据类型定义:class listpublic:int data;class list *next;void push();typedef class list node; /建立单链表(将class重定义为node)typedef node *link; /定义结点指针2流程图数组求解法初始a9=10<i<10?ai-1=ai+1)*2i-输出ai(0=<i,10)开始NY返回主菜单图三链表求解法开始初始day=10,num=1,定义头结点L并申请储存空间day>0?NY申请节点S并赋值S->next=L->next,L->next=Snum=(num+1)*2,day-Printf(),输出每天的桃子数返回主菜单图四三、程序调试过程以及实验结果数组求解法 图五链表求解法图六调试分析数组求解模块的时间复杂度:因为其中循环for(i=8;i>=0;i-),因此其时间复杂度为O(9).数组求解模块的空间复杂度:因为不需要输入任何数据,所以该算法为原地工作。链表求解模块的时间复杂度:因为算法中用到一个循环来输出,因此其时间复杂度为O(9).链表求解模块的空间复杂度:原地工作。调试基本无错误,仅字体及符号的错误,很容易便改正过来。软件可以很快算出猴子吃桃的个数四、结论各算法特点及在例题功能扩展:数组的使用要先确定其长度,有时候会造成空间浪费,但是存取方便;用链式存储方式是一种动态的存储,长度是不用规定的,需要用指针来找到元素所在存储单元;而递归算法,存储空间要得少,但要知道准确计算函数,相对比较难。在本例题中,我们可以通过对各种方法,利用for循环进行输出,就得到每一天桃子的剩余量。五、参考文献1 李云清,杨庆红.数据结构(C语言版).北京:人民邮电出版社,2004.2 严蔚敏,吴伟民.数据结构(C语言版).北京:清华大学出版.1997.3 苏光奎,李春葆.数据结构导学.北京:清华大学出版.2002. 4 周海英,马巧梅,靳雁霞.数据结构与算法设计.北京:国防工业出版社,2007.5 张海藩. 软件工程导论. 北京:清华大学出版社.2003.六、程序清单用数组数据结构实现上述求解#include<stdio.h>void main()inti,tao10;tao9=1;/tao9代表第10天剩的桃子数for(i=8;i>=0;i-)taoi=2*(taoi+1+1); printf("共摘了%d个桃子!n",tao0);用链数据结构实现上述求解#include<stdio.h>#include<stdlib.h>#define NULL 0typedefstructlinknode int data; structlinknode *next;node;node *head;void creat() node *p,*s; int peaches=1; int day=10; head=(node*)malloc(sizeof(node); p=head; while(day>0) s=(node*)malloc(sizeof(node); s->data=peaches; p->next=s; p=s; peaches=(peaches+1)*2; day-; p->next=NULL; p=head; head=head->next; free(p); void print() node *p; p=head; int day=10; while(p&&day>0)printf("%d:%dn",day,p->data); p=p->next; day-; void main() creat(); print();