




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、電子設計應用軟件訓練總結報告xxxxxx大學xxxxxx學院電子設計應用軟件訓練總結報告 學生姓名: 專 業(yè): 班 級: 學 號: 指導教師: 訓練時間:20xx年 6月22日至 20xx年7月3日PROTEL部分一、 任務內容及要求說明訓練任務(1) 熟練掌握PROTEL軟件的使用;(2) 按要求繪制電路原理圖和PCB版圖(能夠用自動布線和手動布線相結合);(3) 能夠按要求建立元件庫和封裝庫?;疽蠹罢f明(1) 電路原理圖圖紙尺寸按照給定的任務作相應的設置;(2) 電路原理圖見PROTEL訓練任務部分;(3) 按指定電路圖在PROTEL 99中繪制原理圖和印制板圖;(4) 按照給定要求創(chuàng)
2、建原理圖器件和該器件的相應的封裝圖 1.1 要求原理圖二、 原理圖繪制說明Ø 新建工程1. 在菜單欄選擇 File New Project;2. New Projects 面板出現(xiàn);3. 選擇“PCB project”;4. 更改工程名稱和存儲位置。圖1.2 新建PCB工程選項窗口Ø 新建原理圖紙1. 單擊 File New Schematic,或者在 Files 面板的 New 單元選擇:Schematic Sheet;2. 在圖紙界面右擊選擇 Options Document Options;3. 將圖紙大小改為A4;4. 通過選擇 File Save As 來將新原理
3、圖文件重命名(擴展名為*.SchDoc)圖1.3 Files 面板的 New 單元圖1.4 Document Options 選項窗口Ø 新建元件庫1. 在菜單欄選擇File New Library Schematic Library;2. 通過選擇 File Save As 來將新元件庫文件重命名(擴展名為*.SchLib);3. 在左側面板下方選擇SCH library選項, 點擊“Add”按鈕新建元件并為新元件命名;4. 按照所需元件要求繪制元件。圖1.5 選擇元件庫選項圖1.6 添加元件并命名Ø 新建封裝庫1. 在菜單欄選擇File New Library PCB
4、Library;2. 通過選擇 File Save As 來將新封裝庫文件重命名(擴展名為*.PcbhLib);3. 在左側面板下方選擇PCB library選項, 右擊選擇“New Blank Component”新建封裝,雙擊元件名進行重命名和相關參數(shù)設置;4. 按照元件給定的參數(shù)繪制封裝。5圖1.7 選擇PCB庫選項并新建封裝Ø 元器件的查找1. 點擊右側面板Libraries,選擇,在Project選項下找到建好的元件庫,將所需要用的庫文件添加進 Libraries;2. 直接在 Libraries 面板中查找元器件;圖1.8將所需要用的庫文件添加進 Libraries圖1.
5、9 在Libraries 面板中查找元器件Ø 繪制原理圖1. 找到所需元器件后,直接將其拖動至原理圖中的相應位置。在拖動過程中,可以使用快捷鍵對元器件進行一些操作:1) Space、Shift Space 旋轉元件2) X、Y 翻轉元件3) Tab 修改元件屬性4) G 切換捕捉柵格(10、5、1)5) 左鍵單擊放置元件6) 右鍵單擊停止放置2. 按照要求修改元件屬性放置元件時按“Tab”鍵修改,也可以在放置好的元件雙擊修改3. 按照給定的引腳標號進行對應用導線連接,在一些不便連線的地方放置網(wǎng)絡標號。4. 檢查所畫原理圖與給定原理圖是否一致。Ø 元器件封裝的選擇常用元件的封
6、裝系統(tǒng)默認都已給定,自己繪制的元件需要手動添加繪制的封裝1. 雙擊需添加封裝的元件,在屬性面板中選擇“Add”添加封裝;2. 點擊“Browse”選擇封裝庫及所需封裝;3. 點擊菜單欄File Save 或者用快捷鍵Ctrl+ S 保存原理圖。 圖1.10 為元件添加封裝圖1.11 選擇封裝庫及封裝三、 印制板圖繪制說明1. 在菜單欄中選擇File New PCB 新建一個PCB文檔;2. 通過選擇 File Save As 來將文件重命名(拓展名為*.PcbDoc);3. 選擇Design Import Changes From 課程設計.PrjPcb;4. 點擊“Validate Chan
7、ges”檢測,如有錯誤需更改原理圖;5. 點擊“Execute Changes”執(zhí)行更改導入原理圖;6. 通過原理圖在pcb板上對原器件的位置進行調整,盡量減少更多布線的長度和交叉;7. 進行自動布線;8. 對自動布線未連接和不符合布線規(guī)則的連線進行手動布線之完成整個PCB版圖的繪制;9. 保存。圖1.12 原理圖的檢測及導入圖1.13 導入的元件四、 總結此次課程設計是一項比較浩大的“工程” ,在此之前,我從未進行過這樣的設計,因此這次算得上是一次不大不小的突破?;仡櫛敬握n程設計,難點頗多,主要集中于以下幾點:1) 之前從未接觸過類似Protel 99 SE , Altium Designe
8、r 這樣的電子電路設計軟件,且沒有過相關使用電腦進行電路設計的經(jīng)驗。2) 對于元器件的認識和對于 PCB 板、封裝的基本概念不夠成熟,致使進度推進比較緩慢。3) PCB 布線對于整體布局能力的要求較高。通過幾天的課程設計,以上的問題大都得到了較為圓滿的解決。我也認識到了計算機技術對于電子設計的強大輔助能力和EDA技術的巨大發(fā)展前景,這更加激發(fā)了我對于該軟件和本專業(yè)相關課程學習的興趣。我在本次課程設計過程中也積累了一定的 PCB 設計繪制經(jīng)驗和能力, 這對于解決日后學習工作中遇到的相關問題都是難能可貴的財富。五、 參考文獻1.袁鵬平,何志剛,羅開玉.快速精通 Altium Designer 6
9、電路圖和PCB設計,M北京:化學工業(yè)出版社,2008.12.2.劉強.Altium Designer原理圖與PCB設計及仿真.M杭州:電子工業(yè)出版社,2003.3.張偉、王力.Protel99SE基礎教程.M北京:人民郵電出版社,2006年.4.劉天旺. Protel99SE電路設計應用教程.M杭州:電子工業(yè)出版社,2008年.5.談世哲. Protel99SE電子工程實踐基礎與典型范例.M杭州:電子工業(yè)出版社, 2008.6.吉雷.Protel99從入門到精通.第二版.M西安:西安電子科技大學出版社,2002.附錄I 電路原理圖附錄II 印制板圖軟件設計部分一、 問題描述利用哈夫曼編碼進行信
10、息通信可以大大提高信道利用率,縮短信息傳輸時間,降低傳輸成本。試寫一個哈夫曼碼的編譯碼系統(tǒng)。 一個完整的系統(tǒng)應具有以下功能: (1)I:初始化(Initialization)。從終端讀入字符集大小n,以及n個字符和n個權值,建立哈夫曼樹,并將它存于文件hfmTree中。 (2)E:編碼(Encoding)。利用已建好的哈夫曼樹(如不在內存壩u從文件hfmTree中讀人),對文件ToBeTran中的正文進行編碼,然后將結果存入文件CodeFile中。 (3)D:譯碼(Decoding)。利用已建好的哈夫曼樹將文件CodeFile中的代碼進行譯碼,結果存入文件TextFile中。 (4)P:打印代
11、碼文件(Print)。將文件CodeFile以緊湊格式顯示在終端上,每行50個代碼。同時將此字符形式的編碼文件寫入文件CodePrin中。 (5)T:打印哈夫曼樹(TreePrinting)。將已在內存中的哈夫曼樹以直觀的方式(樹或凹人表形式)顯示在終端上,同時將此字符形式的哈夫曼樹寫入文件TreePrint中。 二、 設計過程1.儲存結構typedef structint weight;int flag;int parent;char ch;int lchild;int rchild;HafNode; typedef structint bitMAX;int start;int w
12、eight;char ch;Code;2.關于主要算法的想法 A、編碼算法: 1)根據(jù)輸入的數(shù)據(jù),從中選取兩棵根結點權值最小且沒有被選的樹作為左右子樹構造一棵新的二叉樹,且置新的二叉樹的根結點的權值為左右子樹上根結點的權值之和。 2)哈夫曼樹已經(jīng)建立后,從葉子到根逆向求每一個字符的哈夫曼編碼。 B、譯碼算法:譯碼的過程是分解電文中的字符串,從根出發(fā),如果為字符0就找左孩子,如果為字符1就找右孩子,直至葉子結點,得到該子串相應的字符并輸出。main()Init()初始化函數(shù)menu()菜單函數(shù)Encoding()編碼函數(shù)Decoding()譯碼函數(shù)Code_printing()打印編碼函數(shù)Tre
13、e_printing()打印哈夫曼樹Haffman()生成哈夫曼樹函數(shù)HaffmanCode ()生成哈夫曼編碼函數(shù)PrintTree()生成樹狀結構的函數(shù)3. 系統(tǒng)模塊劃分圖2.1 過程或函數(shù)調用關系圖4. 流程圖圖2.2 生成哈夫曼樹流程圖圖2.3 生成哈夫曼編碼流程圖圖2.4 打印代碼流程圖圖2.5 初始化流程圖圖2.6 編碼過程流程圖圖2.7 譯碼過程流程圖三、 調試過程及實驗結果1. 在程序根目錄下建立“abc.txt”將字符集和頻度的實際統(tǒng)計數(shù)據(jù)放入,其中第一個數(shù)字為字符個數(shù),字符與頻度輸入格式為:“A 64”;2. 在程序根目錄下建立“ToBeTran.txt”將所需編碼的正文“
14、THIS PROGRAM IS MY FAVORITE”放入其中;圖2.8 字符集與頻度和編碼正文3. 運行程序;4. 對程序各功能進行調試;5. 打開根目錄檢查各輸出文件是否正確。圖2.9 程序主菜單圖2.9 初始化標注:編碼過程中可以選擇手動輸入和從文件輸入兩種輸入類型圖2.10 文件輸入編碼過程圖2.11 手動輸入編碼過程圖2.12 譯碼過程圖2.13 打印代碼文件圖2.14 打印哈弗曼樹圖2.15 保存在文件里的哈夫曼編碼圖2.16 編碼、譯碼、代碼打印結果四、 心得體會通過這次課程設計,我了解到:“數(shù)據(jù)結構”在計算機科學中是一門綜合性的基礎課。而在這次課程設計中所用到的數(shù)據(jù)結構知識是
15、C語言基礎之上的,若是C語言基礎知識不牢固,要想做好這次課程設計是有一定的困難的。所以在設計編寫這個程序的時候,也順便復習了C語言的相關內容,加深了我對C語言的理解和應用,并且也深深體會到了數(shù)據(jù)結構的重要性。在本次課程設計過程中,我體會到自己以前所學的東西太少太淺顯了,很多知識都不知道,也遇到了不少實際問題,使我發(fā)現(xiàn)了在學習過程中的不足。在代碼設計時,也出現(xiàn)了一些基本的C語言語法錯誤,如函數(shù)的嵌套定義,結構體的定義等,在老師和同學的幫助下都一一解決了,但是這也反映了我的C語言基礎知識不夠扎實,在以后學習過程中要加強這方面的學習。通過本次課程設計,我對編寫程序的過程有了進一步的理解。數(shù)據(jù)結構的問
16、題最主要的內容在于算法思想,而程序編寫次之。在編寫程序時,如果算法思想是正確的,那么這個程序就已經(jīng)成功了一多半。算法思想在數(shù)據(jù)結構中占有重要地位。五、 參考文獻1. 嚴蔚敏、吳偉民.數(shù)據(jù)結構題集(C語言版),M北京:清華大學出版社,1992.2. 嚴蔚敏 吳偉名編著,數(shù)據(jù)結構M.,清華大學出版社,2001年.3. 譚浩強.C程序設計.第三版,M北京:清華大學出版社,2005.4. 秦鋒.數(shù)據(jù)結構(C語言版). M北京:清華大學出版社,20115. 裘宗燕.從問題到程序科學,M北京:北京大學出版社,1999年六、 程序清單#include <stdio.h>#include <
17、stdlib.h>#include <string.h>#define MAX 100#define MAXVALUE 10000typedef struct int weight; int flag; int parent; char ch; int lchild; int rchild;HafNode;typedef struct int bitMAX; int start; int weight; char ch;Code;typedef struct char bitMAX; char ch; int weight;Coding;void haffman(int we
18、ight,char ch,int n,HafNode haffTree) /生成哈夫曼樹的函數(shù) int i,j,m1,m2,x1,x2; for (i=0;i<2*n-1;i+) if(i<n) haffTreei.weight=weighti; haffTreei.ch=chi; else haffTreei.weight=0; haffTreei.parent=-1; haffTreei.flag=0; haffTreei.lchild=-1; haffTreei.rchild=-1; for (i=0;i<n-1;i+) m1=m2=MAXVALUE; x1=x2=0;
19、 for (j=0;j<n+i;j+) if (haffTreej.weight<m1&&haffTreej.flag=0) m2=m1; x2=x1; m1=haffTreej.weight; x1=j; else if(haffTreej.weight<m2 && haffTreej.flag=0) m2=haffTreej.weight; x2=j; haffTreex1.parent= n + i; haffTreex2.parent = n + i; haffTreex1.flag = 1; haffTreex2.flag = 1;
20、haffTreen+i.weight = haffTreex1.weight + haffTreex2.weight; haffTreen+i.lchild = x1; haffTreen+i.rchild = x2; FILE *fp; fp=fopen("huffman.txt","w+"); printf("%dn",n); fprintf(fp,"%dn",n); for (i=0;i<n;i+) fprintf(fp,"%c %d %d %dn",haffTreei.ch,haf
21、fTreei.parent,haffTreei.lchild,haffTreei.rchild); for (i=n;i<2*n-1;i+) fprintf(fp,"%d %d %dn",haffTreei.parent,haffTreei.lchild,haffTreei.rchild); fclose(fp);void HaffmanCode (HafNode haffTree,int n,Code haffCode)/*生成哈夫曼編碼的函數(shù)*/ Code *cd=( Code *) malloc (sizeof (Code); int i,j,child,par
22、ent; for (i=0; i<n; i+) cd->start=n-1; cd->weight=haffTreei.weight; cd->ch=haffTreei.ch; child=i; parent=haffTreechild.parent; while (parent !=-1) if (haffTreeparent.lchild=child) cd->bitcd->start=0; else cd->bitcd->start=1; cd->start-; child =parent; parent=haffTreechild.
23、parent; for (j=cd->start+1; j<n; j+) haffCodei.bitj=cd->bitj; haffCode i.start = cd->start+1; haffCode i.weight=cd->weight; haffCode i.ch=cd->ch; void Init(int weight,char ch) /初始化操作,生成哈夫曼樹及哈夫曼編碼 FILE *fp; int i,j,n; char ch1,wj15; printf("現(xiàn)在進行初始化操作,請導入文件,輸入In"); scanf(&q
24、uot;%c",&ch1); if (ch1='I') printf("請輸入文件名:n"); scanf("%s",wj); fp=fopen(wj,"r"); fscanf(fp,"%d",&n); HafNode *myHaffTree=(HafNode *)malloc(sizeof (HafNode)*(2*n+1); Code *myHaffCode =(Code *)malloc (sizeof (Code)*n); for (i=0;i<n;i+) i
25、f (ch1='I') fscanf(fp,"%c %d",&chi,&weighti); if (ch1='I') fclose(fp); haffman(weight,ch,n,myHaffTree); HaffmanCode(myHaffTree,n,myHaffCode); fp=fopen("hfmtree.txt","w+"); for (i=0;i<n;i+) printf("%c %d ",myHaffCodei.ch,myHaffCodei.w
26、eight); fprintf(fp,"%c %d ",myHaffCodei.ch,myHaffCodei.weight); for ( j=myHaffCodei.start; j<n; j+) printf("%d",myHaffCodei.bitj); fprintf(fp,"%d",myHaffCodei.bitj); fprintf(fp,"n"); printf("n"); fclose(fp); printf("初始化成功,哈夫曼樹存于文件hfmtree.txt中
27、n");void Caozuo_E() /哈夫曼編碼過程的函數(shù),用于將文件編碼 FILE *fp,*fp1,*fp2; char zf500; fp=fopen("hfmtree.txt","r"); Coding ch100; char c; int i=0; while (feof(fp)=0) fscanf(fp,"%s %d %s",&chi.ch,&chi.weight,&chi.bit); i+; fclose(fp); printf("現(xiàn)在進行編碼操作。n請選擇:nA.鍵盤輸入
28、 B.文件輸入n"); scanf("%s",&c); if (c='A') printf("請輸入字符串:n"); scanf("%s",zf); int j; if (c='B') printf("對文件ToBeTran.txt中的正文進行編碼n"); fp1=fopen("ToBeTran.txt","r"); printf("編碼結果存入文件CodeFile.txt中并顯示如下:n"); fp2=f
29、open("CodeFile.txt","w+"); if (c='A') int len,k; len=strlen(zf); for (k=0;k<len;k+) for (j=0;j<i;j+) if (chj.ch=zfk) fprintf(fp2,"%s",chj.bit); printf("%s",chj.bit); printf("n"); if (c='B') while(feof(fp1)=0) fscanf(fp1,"%c
30、",&c); for (j=0;j<i;j+) /對文件中的每一個字符進行編碼 if (chj.ch=c) fprintf(fp2,"%s",chj.bit); printf("%s",chj.bit); fprintf(fp2,"n"); printf("n"); fclose(fp1); fclose(fp2); printf("編碼過程完成!nn");void Caozuo_D() /譯碼操作 FILE *fp,*fp1; fp=fopen("huffma
31、n.txt","r"); int i,n; fscanf(fp,"%d",&n); HafNode *myHaffTree=(HafNode *)malloc(sizeof (HafNode)*(2*n+1); for (i=0;i<n;i+) fscanf(fp,"%s %d %d %dn",&myHaffTreei.ch,&myHaffTreei.parent,&myHaffTreei.lchild,&myHaffTreei.rchild); for (i=n;i<2*
32、n-1;i+) fscanf(fp,"%d %d %dn",&myHaffTreei.parent,&myHaffTreei.lchild,&myHaffTreei.rchild); fclose(fp);printf("將文件CodeFile.txt中的代碼進行譯碼n"); fp=fopen("CodeFile.txt","r");printf("結果存入TextFile.txt中并顯示如下:n"); fp1=fopen("TextFile.txt"
33、,"w+"); char ch; i=2*n-2; while (!feof(fp) fscanf(fp,"%c",&ch); if (ch='0') /若編碼為,則找此結點的左孩子; i=myHaffTreei.lchild; if (ch='1') /若編碼為,則找此結點的右孩子; i=myHaffTreei.rchild; if (i<n) printf("%c",myHaffTreei.ch); fprintf(fp1,"%c",myHaffTreei.ch);
34、 i=2*n-2; printf("n"); fprintf(fp1,"n"); fclose(fp); fclose(fp1); printf("譯碼過程完成!n");void Caozuo_P() /打印代碼文件的操作; FILE *fp1,*fp2;printf("顯示CodeFile.txtn"); fp1=fopen("CodeFile.txt","r"); printf("打印文件寫入文件CodePrin.txt并顯示如下:n"); fp2=f
35、open("CodePrin.txt","w+"); int count=0; char ch; while (!feof(fp1) fscanf(fp1,"%c",&ch); printf("%c",ch); fprintf(fp2,"%c",ch); count+; if (count=50) printf("n"); fprintf(fp2,"n"); count=0; printf("n"); fprintf(fp2,&
36、quot;n"); fclose(fp1); fclose(fp2); printf("打印代碼過程完成!nn"); void PrintTree(HafNode *huf,int n,int p,FILE *fp) int i; if (n=-1) return; PrintTree(huf,hufn.rchild,p+1,fp); for (i=0;i<p;i+) printf(" "); fprintf(fp," "); if (p>=0&&hufn.rchild=-1) printf(&q
37、uot;-"); printf("%cn",hufn.ch); /如果此結點為葉子結點,則將此結點輸出; fprintf(fp,"-%cn",hufn.ch); else printf("n"); /如果此結點為非葉子結點,則輸出"" fprintf(fp,"n"); PrintTree(huf,hufn.lchild,p+1,fp);void Caozuo_T() /打印哈夫曼樹的操作 FILE *fp; fp=fopen("huffman.txt","r"); int i,n; fscanf(fp,"%d",&n); HafNode *myHaffTree=(Haf
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 商標使用權轉讓合同(三):長期合作
- 簡易勞動合同簡易合同
- 合同糾紛處理與學生實踐活動方案
- 水運聯(lián)運代理合同及條款
- 鋼結構加工承攬合同模板
- 林業(yè)用地承包轉讓合同樣本
- 大學合同審簽表
- 抽紗工藝的環(huán)保與可持續(xù)性考核試卷
- 天然氣開采業(yè)的可再生能源轉型實踐與方案考核試卷
- 機床附件的標準化與規(guī)范化生產(chǎn)考核試卷
- 家校共育之道
- DeepSeek入門寶典培訓課件
- 西安2025年陜西西安音樂學院專職輔導員招聘2人筆試歷年參考題庫附帶答案詳解
- 《作文中間技巧》課件
- 廣東省2025年中考物理仿真模擬卷(深圳)附答案
- 2025屆八省聯(lián)考 新高考適應性聯(lián)考英語試題(原卷版)
- 新蘇教版一年級下冊數(shù)學第1單元第3課時《8、7加幾》作業(yè)
- 2024年山東電力高等??茖W校高職單招職業(yè)技能測驗歷年參考題庫(頻考版)含答案解析
- 《平面廣告賞析》課件
- 人教鄂教版六年級下冊科學全冊知識點
- (正式版)HGT 22820-2024 化工安全儀表系統(tǒng)工程設計規(guī)范
評論
0/150
提交評論