趣味電子產品設計與制作教案_第1頁
趣味電子產品設計與制作教案_第2頁
趣味電子產品設計與制作教案_第3頁
趣味電子產品設計與制作教案_第4頁
趣味電子產品設計與制作教案_第5頁
免費預覽已結束,剩余19頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、【首頁】課程名稱趣味電子產品設計與制作授課專業班級課程編號課程類型必修課校級公共課();基礎或專業基礎課();實驗課()選修課限選課();任選課(,)授課方式課堂講授(,);實踐課 (V)考核方式考試();考查(,)課程教學 總學時數32學分數2學時分配課堂講授16學時; 實踐課 16學時教材名稱單片機的C語言應用程 序設計(第4版)作者馬忠梅 等出版社及 出版時間北京航空 航天出版 社2007指aE參力書基于 Proteus的8051單 片機實例教程單片機C程序設計及應 用實例基于C語言編程 MCS-51單片機原理與應 用Protel99高級應用作者李學胡偉張培仁趙晶出版社及 出版時間電子工

2、業 出版社人民郵電 出版社2003清華大學 出版社2003人民郵電 出版社2000授課教師明顯誠汪科職稱工程師單位工程訓練 中心授課時間注:表中()選項請打教案【理、工科】第一章 8051 單片機基礎結構與內部資源一、教學目的和要求通過對單片機的基礎特點、 內部結構、 外部硬件擴展、 指令系統和簡單的程序介紹,讓同學們對8051 單片機有個基礎了解,同時由淺入深,進一步學習運用 8051 內部資源的 C 語言實現,包括中斷、定時器/計數器以及串口等等。二、教學重點2.1 8051 的內部基礎結構2.2 8051 的內部資源使用三、教學難點8051 單片機獨特的內部結構3.2 8051 中斷、定

3、時器/計數器和串行口的使用1.1 8051 的內部結構單片機是在一塊硅片上集成了各種部件的微型計算機, 這些部件包括中央處理器CPU數據存儲器RAM程序存貯器ROM定時器/計數器和多種IO接口電 路。8051是MCS-51系列單片機的一個產品。MCS-51系列單片機是Intel公司推 出的通用型單片機。它的基本型產品是8051、 8031 和 8751.這三個產品只是片內程序存儲器的制造工藝不同。 8051 片內程序存儲器為掩膜型,在制造芯片時已將應用程序固化進去了, 使它具有某種專用功能; 8031 片內無ROM, 使用時需外接ROM 8751片內ROhM EPROMS,固化的應用程序可以方

4、便的改寫。8051單片機內部結構可劃分為 CPU存貯器、并行口、用行口、定時器/計 數器、中斷邏輯幾部分。中央處理器核心單元,算術邏輯單元ALU (算術運算,邏輯運算),操作數存于累加器AC6E暫存器中。控制器執行程序指令過程,程序存貯器中取指令,進入指令寄存器IR ,指令譯碼器 ID 譯碼,微操作信號用于控制單片機各部分動作。時鐘包括內部時鐘和外部時鐘。 內部時鐘, 晶振和微調電容組成的并聯諧振電路構成穩定自激振蕩器。外部時鐘,引入外部脈沖信號。基本時序周期, 微操作信號在時間上有嚴格的先后次序。 振蕩周期是振蕩源周期; 時鐘周期是振蕩周期的 2 倍; 機器周期包括6 個時鐘周期; 而指令周

5、期指完成一條指令所占用的全部時間。指令部件包括程序計數器PG指令寄存器IR,指令譯碼器ID,數據指針DPTR 16位地址寄存器,尋址外部 RAM也可尋址外部ROW表格數據。8051 的存儲器組織將程序存貯器和數據存貯器分開,并各自有尋址機構和尋址方式(哈佛型結構單片機) 。8051單片機物理上有4個存貯空間,片內 ROM片外ROM片內RAM片外 RAM可在片外擴展 RAMffi ROM各有64Kb的尋址范圍。8051有256B數據存貯 器RAM 4KB程序存貯器 ROM 4KB的ROM片內RO防口片外RO泌用,地址為 0000H-0FFFH 1000H-FFFFhM址為片外ROM用。控制信號E

6、A=1時,先片內ROM(4KB,指令地址超過0FFFH自動轉向片外ROM EA=Q只從片外ROW指令。 程序存儲器ROM勺某些單元僅供系統使用,0000H-0002H所有執行程序的入口地 址,0003H-002AHt勻勻分為5段,5個中斷服務程序的入口,用戶不應進入上述 區域。RAMfc地址上和ROM1疊,8051通過不同信號選通 ROM RAM從外部ROM 取指令時用選通信號PSEN而從外部RAM實寫數據采用RD?口 W砒通。8051內 部256B的RAM?節,00H-7FH,真正的RAMK; 80H-FFH專門用于特殊功能寄存 器(SFR。低128字節分三個區域(00H-7FH), 00H

7、-1FH四組工作寄存器,每組 占用8個RAM?節,記為R0-R7,某一時刻,CPUR能使用其中一組工作寄存器。 20H-2FH共16個字節,128位,除做一般RAM賣寫外,還可對每一個字節的每一 位進行操作。30H-7FH, 80個字節,一般的用戶RAMK域。8051單片機特殊功能 寄存器中包含有堆棧指針SR 8051單片機復位后,堆棧指針SP總是初始化到內 部RAM勺07H位置。8051堆棧屬于向上生長型,數據壓入堆棧,SP內容自動加1 作為本次進棧的地址指針,然后存信息。8051 并行接口P0-P3, P0 口采用總線復用技術,P2 口作地址的高 8 位, P1口只作IO 口,P0, P2

8、, P3有第二功能。8051的內部資源包括用行口,定時器/ 計數器,中斷。 8051 的工作方式包括復位方式,程序執行方式,單步執行方式,低功耗操作方式,EPROMI程和校驗方式。8051 的系統擴展主要包括外部程序存儲器的擴展和數據存儲器的擴展。8051 的尋址方式,指令中給出的地址尋找真實操作數地址的方式。 8051 包 括 7 種尋址方式,寄存器尋址。直接尋址、寄存器間接尋址、立即尋址、變址尋址、相對尋址和位尋址。 8051 指令系統包括數據傳輸指令、轉移指令、算術運 算指令和邏輯運算指令等。1.2 8051 的內部資源一、中斷8051 有 5 個中斷源, 有兩個中斷優先級, 每個中斷優

9、先級可以編程控制, 中 斷允許受到CPUFF中斷和中斷源開中斷的兩級控制。5 個中斷源包括:外部中斷請求0、外部中斷請求1、片內定時器/ 計數器 0溢出中斷請求、片內定時器/ 計數器溢出中斷請求1、片內串口發送/ 接收中斷請求。為了了解每個中斷源的是否產生了中斷, 中斷系統對應設置多個中斷請求觸發器實現記憶。這些觸發器包括定時器/計數器控制寄存器TCON串口控制寄存 器SCON中斷優先級寄存器IP,中斷允許寄存器IE。中斷響應, 8051 單片機的每個機器周期采樣各中斷源的中斷請求標志位, 如 果沒有下述阻止條件:1. CPUE在處理同級或更高級的中斷;2. 現行機器周期不是所執行指令的最后一

10、個機器周期;3. 正在執行的是RETI 或是訪問 IE 或 IP 的指令。將在下一個機器周期響應被激活了的最高級中斷請求。CPUS中斷響應后完成如下操作:1. 硬件清除相應的中斷請求標志;2. 執行一條硬件子程序,保護斷點,并轉向中斷服務程序入口;3. 結束中斷時執行RETI 指令,恢復斷點,返回主函數。同一優先級設置時,優先級由高至低的順序是:INT0-T/C0-INT1-T/C1-Serial 。寄存器組切換,當一個特定的任務正在執行,可能有更緊急的任務需要CPU處理,在一個具有優先級的系統里,CPU是等待第一個任務完成,而是假定前一個任務已經完成, 立即處理新任務。 若程序流程立即轉向新

11、任務, 新任務使用的各寄存器破壞了第一個任務使用的中間信息。 當第一個任務重新執行時, 寄存器的值可引起錯誤發生, 解決的方法每次發生任務變化時執行一些指令, 被稱為上下文切換。高優先級的中斷可以中斷正在處理的低優先級程序,因而必須注意寄存器組。 最好給每個優先級程序分配不同的寄存器組。 因此, 中斷服務函數的完整語法如下:返回值 函數名(參數) 模式 重入 interrupt n using n當調用中斷函數時,SFR中的ACC B、DPH DPL PS隧棧。二、定時器/ 計數器(T/C)8051 系列單片機至少有兩個16 位內部定時器/計數器, 8052有三個定時器/計數器,兩個基本定時器

12、/計數器是T/C0和T/C1。它們既可以編程為定時器使 用,也可以編程為計數器使用。若做定時器用,計數內部晶振驅動時鐘;若做計數器使用, 計數輸入管腳的脈沖信號。 定時器實際上也是工作在計數方式下, 只 不過對固定脈沖計數,由計數值可計算出時間,有定時功能。T/C 作定時器用時, 對振蕩源 12 分頻的脈沖計數, 每個機器周期計數值加1,1/12fosc= 計數率,每2us 計數值加 1。T/C作計數器用時,計數脈沖來自外部脈沖輸入管腳T0、T1,當T0/T1腳上出現負跳變時, 計數值加 1, 識別管腳上的負跳變需要2 個機器周期, 24 個振蕩周期,可計數最高外部脈沖頻率為 1/24fosc

13、 。高于此計數率,計數出錯。與T/C有關的特殊功能寄存器包括計數寄存器TH和TL,控制寄存器TCON方式控制寄存器TMOD定時器/計數器2控制寄存器(T/C2)。定時器 / 計數器的工作方式如下:1. 方式0,為13位T/C,由TH提供高8位,TL提供低5位的計數器, 滿計數值為2 13 ,但啟動前可以預置計數初值;2. 方式 1, 方式 1 與方式 0 基本相同, 唯一區別在于計數寄存器的位數是16位,由TH和TL寄存器各提供8位,滿計數值為216;3. 方式2,是 8 位可自動重裝載的 T/C, 滿計數值為 28 。4. 方式3,只適用于T/C0,當T/C0工作在方式3時,TH0和TL0成

14、為 兩個獨立的 8 位計數器。只有將T/C1 用作串口的波特率發生器時,T/C0才能工作在方式3,相當于增加了一個定時器。5. T/C2 的工作方式, T/C2 包含一個 16 位重裝載方式,計數溢出后, 自動在瞬間重裝載。 T/C2 還有捕獲方式,它把瞬時計數值傳到另外 的CPK讀取的寄存器對。定時器/計數器的初始化,包括編程 TMOD置初值TH和TL,編輯TE,啟動T/C。計數初值計算,定時器工作方式下: T/C 對機器周期脈沖進行計數,根據晶振頻率算出機器周期,一個機器周期為 12/fosc 。那么自然可算出需要的計數初值。計數器工作方式下,由于計數器向上計數,所以可置負數。三、串行口8

15、051單片機片上有UART(通用異步接收/發送)用于串行通信,發送時數據 由TXD端送出,接收時數據由RXD®輸入。有兩個緩沖器SBUF 一個作發送緩 沖器, 另一個作接收緩沖器。 它是可編程的全雙工的串行口。 短距離的機間通信 可使用UART勺TTL電平,使用驅動芯片可接成RS232G口通用微機進行通信。波 特率時鐘必須從內部定時器1 或定時器 2 獲得。與用行口有關的SFR包括串口控制寄存器 SCO恃口電源控制寄存器PCON用 行口的工作方式包括:1. 方式0,為移位寄存器輸入/輸出方式,串行數據通過RXD俞入輸出, TXD則用于輸出移位時鐘脈沖;2. 方式1,是 10 位異步通

16、信方式, 1 位起始位(0) , 8 位數據位和1位停止位(1) ,其中的起始位和停止位是在發送時自動插入;3. 方式 2 和方式3,都是11 位異步接收/ 發送方式,不同在于波特率不同。串行口的初始化包括,定時器1 工作方式, T/C1 置初值, T/C1 啟動,串行口控制SCON開CPU+斷和源中斷。第二章8051的C語言編程一、教學目的和要求要求學生通過本章學習,了解8051 的編程語言,掌握C51 的數據與運算、流程控制語句、構造數據類型、函數以及模塊化程序設計。二、教學重點2.1 8051 編程語言和 C51 程序結構2.2 C51 的數據以及運算2.3 C51 的構造數據類型2.4

17、 函數的使用和模塊化程序設計三、教學難點C51 的程序結構和相關的編寫規則C51 數據與運算一、數據與數據類型數據, 具有一定格式的數字或數值叫做數據。 數據類型, 數據的不同格式叫做數據類型。數據結構,數據按一定的數據類型進行的排列、組合、架構稱為數據類型。數據類型分為基本類型、 構造類型、 指針類型和空類型。 基本類型分為位型、字符型、整型、長整型、浮點型和精度浮點型。構造類型分為數組類型、結構體類型、共用體和枚舉。二、C51運算符、表達式以及規則常量,在程序運行的過程中,其值不能改變的量。與變量一樣,常量也有不 同的數據類型。變量,在程序運行過程中,其值可以改變的量。一變量主要由兩部分組

18、成, 一是變量名,一是變量值。每一個變量都有一個變量名,在內存中占據一定的存 儲空間,并在該內存單元存放該變量的值。在程序編制中使用大量不必要的變量類型, 會導致C編譯器相應的增加所調用的 庫函數的數量,以處理大量增加的變量類型。 最終會使程序變得過于龐大,運行 速度減慢,甚至會在連接時,出現因程序過大裝不進代碼區的情況。 通常使用的 數據變量包括位變量、字符變量、整型變量、長整型變量、浮點型變量。地址為00H-7FH的低128字節片內RAMK被戈U分為3個區域。通用寄存器區, 可位尋址區,用戶RAMK。通用寄存器區被劃分為4組寄存器,0組(00H-07H), 1 組(08H-0FH), 2

19、組(10H-17H), 3 組(18H-1FH);每組含 8 個通用寄存器 R0-R7, 共32個通用寄存器。尋址采用寄存器名尋址;字節地址尋址。當用寄存器名來尋址時,程序狀態字中的PSWW勺RS1和RS0兩位的值來決定 寄存器組。RS1 (PSW.4RS0 (PSW.33組1r 12組101組10r 10組00可位尋址區包括20H-2FH;用戶RAMK 30H-7FH;編譯器會通過將變量、常 量定義為不同的存貯類型,將它們定位在不同的存貯區中。data/bdata ,定義常量和變量時,編譯器會將它們定義在片內 RAME,片內 RAME存放臨時性傳遞變量或使用頻率較高的變量。Code存貯數據類

20、型時,編譯器將其定位在 ROM® EPRO附,這里存放指令 代碼或其它非易變信息。如果定義數據和變量時缺省存貯類型標識符, 編譯器會自動選擇默認的存貯 類型,有SMALL COMPACT LARGE旨令限定。8051單片機片內有21個特殊功能寄存器(SFR,它們分散在片內RAME的高128 字節中,地址80H-0FFH Xt SFR的操作,只能用直接尋址方式。C51與標C不同之處之一在于引入關鍵字“ sfr ”Sfr SCON=0x98;Sfr16 T2=0xcc ;需經常單獨訪問SFR中的位時,使用關鍵字“ sbit ”。8051單片機芯片內帶有4個8位的并行口,共32根I/O 口

21、線。每個口主要 由4部分組成:端口鎖存器,即 SFR中的P0 口-P3 口;輸入緩沖器;輸出緩沖 器;引致芯片外的端口引腳。其中 P1-P3 口為準雙向口,P0 口為雙向3態口。8051單片機芯片引腳中沒有專用的地址總線和數據總線,向外擴展存貯器 和接口時,由P2 口輸出地址總線的高8位(A15-A8)。由P0 口輸出地址總線的 低8位(A7-A0);同時對P0 口采用總線復用技術,P0 口又兼作8位雙向數據數 據總線D7-DQ即由P0分時輸出低8位地址或輸入輸出8位數據。在不做總線擴展時,P0口和P2 口可以作為普通的IO 口使用。除8051芯片上的4個I/O 口以外,還可以在片外擴展硬件I

22、/O 口。8051沒有專用的 I/O 指令, 其口地址與數據存貯器地址是統一編址的, 即把一個口當作數據存貯器中的一個單元來看待。8051 的內部口是可以位尋址的,而大部分外部口是字節尋址的。在給口指定硬件擴展電路時, 可以在內部口中設置I/O 控制線和信號線, 而將外部口定義為字節寬度I/O 口, 這樣在編程時可大大簡化尋址, 并避免使用許多邏輯屏蔽位。在使用 C51 進行編程時, 8051 片內 I/O 口與片外擴展的 I/O 口可以統一在頭文件中定義,也可在程序中定義。對于片外擴展I/O 口, 根據硬件譯碼地址, 將其視為片外數據存貯器的一個單元,使用“ #define ”語句進行定義。

23、位變量的 C51 定義的語法和語義。函數課包含類型為“ bit ”的參數,也可將其作為返回值。 位變量不能定義為一個指針, 不存在位數組, 在位定義中允許定義存貯類型,位變量都被放入一位段中。但存貯類型被限制為 data 或 idata 。可位尋址對象指可以字節或位尋址的對象,該對象應位于 8051 片內可位尋址的RAME。C51算術運算符包括+, - , X, /, %。乘除,求余運算符優先級大于加減。可以用強制類型轉換運算符改變運算優先級。 C51 關系運算符包括<, >, <=, >=,=, ! =,前4 個優先級相同大于后 2 個。關系運算符低于算術運算符,高于

24、賦值運算符。C51邏輯運算符包括&& | ,!。C51位操作運算符,&和|。自增減運算 符+i , -i , i+ , i-。C51 流程控制語句一、C51程序的基本結構及流程圖C51程序基本架構包括順序結構,選擇結構,循環結構。選擇結構又包括申行多分支和并行多分支。順序結構是一種基本的, 簡單的編程結構。 這種結構中, 程序由低地址向高地址順序執行指令代碼。選擇結構中,程序首先對一個條件語句進行測試。當條件為“真”時,執行一個方向上的程序流程。所有的分支結構都使程序流程一直向前執行而使用循環結構可使分支流程重復地執行。二、選擇語句選擇語句之一if 語句的三種形式:if

25、 (表達式) 語句 ;if (表達式) 語句 1else 語句 2 ;if (表達式 1) 語句 1else if( 表達式2)語句2else語句m;if 語句嵌套:if()if() 語句 1else 語句 2elseif()語句3else 語句4switch/case 語句switch()case常量表達式1: 語句1break ;case常量表達式2: 語句2break ;Default : 語句 nbreak ;三、循環語句作為構成循環結構的循環語句,一般是由循環體及循環終止條件兩部分組成。 一組被重復執行的語句成為循環體, 能否繼續執行下去取決于循環終止條件。實體循環語句包括以下三種,

26、 while 語句, do-while 語句, for 語句。while 語句的一般形式:while( 表達式 ) 語句 / 循環體 /do-while 語句的格式:do 執行語句 / 循環體 /While( 表達式 )for 循環語句的一般形式:for( 表達式1;表達式2;表達式3) 執行語句 C51 構造數據類型一、數組C 語言具有使用戶能夠定義一組有序數據項的能力。 這組有序的數據即數組。數組是一組具有固定數目和相同類型成分分量的有序集合。 其成分分量的類型為該數組的基本類型。 如整型變量的有序集合稱為整型數組, 字符型變量的有序集合稱為字符型數組。 這些整型或字符型變量是各自所屬數組

27、的成分分量, 稱為數組元素。一維數組的定義方式:類型說明符,數組名 整型表達式 例如 int idata a6= ;二維數組的定義方式: 類型說明符,數組名 常量表達式 1 常量表達式 2存取方式,順序,按行存取,先存取第一行,依次下來。字符數組的存儲兩種方式:一種方式例如: char a10=B , E , I , , J , I , N , G , O ;另一種方式例如: char a10=“BEI JING” ; C 編譯器會自動在字符末尾加上結束符 O ( NULL) ,因此,字符數組的元素數目一定要比字符多一個。二維字符數組,第一下標是字符串個數,第二個下標是每個字符串長度。如, u

28、charcode msg17= ;第二個下標個數必須指定。二、指針指針是C語言中的一個重要概念,也是C語言的重要特色之一。C語言區別于其他高級設計語言的主要特點就是它在處理指針時所表現出的能力和靈活性。使用指針可以有效地表示復雜的數據結構, 有效而方便的使用數組; 動態的分配存貯器,直接處理內存地址,在調用函數時還能輸入或返回多于 1 個的變量值。使用指針可以使程序簡潔、緊湊、高效。為了了解指針的基本概念, 必須了解數據在內存中是如何存貯和讀取的。 一 且程序中定義了一個變量,C編譯器在編譯時就給這個變量在內存中分配相應的 內存空間。通常C語言系統對一個整型變量分配兩個字節的內存空間單元,對一

29、個字符型變量分配一個字節內存單元,一個浮點型變量分配4 個字節內存單元。對于變量需要區分變量名和變量值的概念。 前者是一個數據的符號, 后者是一個數據的內容。對于內存單元區分兩個概念,一個是內存單元地址,一個是內存單元內容。前者是內存對該單元的編號, 它表示著該單元在整個內存中的位置。 后者指在該內存單元中存放著的數據。 在變量和內存單元的對應關系中, 變量的變量名與內存單元的地址相對應,變量的變量值與內存單元的內容相對應。內存中變量名 a,b,c 是不存在的, 對于變量值的存取通過地址進行。 兩種訪問方式,直接訪問和間接訪問。直接訪問找地址,取變量值。間接訪問,找存放變量 a 的地址的內存單

30、元的地址。 取出變量 a 的地址, 然后從找到的 a 的地址中 再取數據變量值。對于指針弄清兩個概念,變量的指針和指向變量的指針變量(指針變量) 。變量的指針就是變量的地址, 指向變量的指針變量, 一個變量專門用來存放另一 個變量的地址。指針變量的定義:類型識別符 * 指針變量名例如 int *ap; float *pointer指針變量的賦值, 指針變量的引用是通過取地址運算符&來實現。ap=&a;( ap為指針變量, a 為變量,&為取地址運算符)通過指針和指針變量來對內存進行間接訪問,就需要用到指針運算符“ *” 。“ * ”在指針變量定義和指針運算所代表的含義不

31、同。當定義時, *ap 中的“ *”是指針變量類型說明符;當 x=*ap 時, “* ”是指針運算符。例如: int *ap, int a, ap=&a; *ap=a; &*ap=&a; *&a 與 a 等價。*ap+=a+。uchar data *xdata zz ,外部RAMM旨針指向內部 RAMft據。數組指針和指向數組的指針變量,數組的指針=數組的起始地址,指向數組的指針變量。例如: int a10;int *app; app=&a0;app=a( 數組名 a 可以代表數組 a10 的首地址 ) 。合起來定義: int *app=&a0;

32、int *app=a;當定義完后, app=&a0 ;通用指針引用數組元素: app=&a0 , 則 app+i=a+i 是數組元素 ai 的地址。* ( app+i )或 * ( a+i )是 app+i 或 a+i 所指向的數組元素,即 ai ;指針變量可帶下標 appi=*(app+i) ; app+1 是指向數組首地址的下一個元 素。指針變量的運算: p+, p 指向下一個單元*p+=*( p+)*p+,*+p(*p)+,指向的元素值加1,而非指針變量加 1。指向多維數組的指針和指針變量:p-a34 , p=a, p+1=a+1; p+2=a+2;指向第幾行首址。* (

33、p+1)+3=&a13 ,指向 a13 的地址;* (*(p+1)+3)=a13 ,表示 a13 的值;* (p+i)+j 相當于 &aij ,第 i 行第 j 列地址;* (*(p+i)+j) 相當于 aij;“基于存貯器的”指針和“一般”指針,兩種類型“基于存貯器的” 指針以存貯器類型為參量, 存貯器類型定義即可放在定義的開頭,也可直接放在定義的對象名之前。例如: char xdata *data pdxdata char xdata *pdx兩者等價。一般指針(包含 3 個字節, 2 個字節偏移和 1 個字節存貯器類型) ;將常數值 0x41 寫入地址為 0x8000 的

34、外部數據存貯器。#define XBYTE(char *)0x20000l)XBYTE0x8000=0x41三、結構C 語言的重要特點之一,是具有構造數據類型的能力,它可以在諸如字符,整型, 浮點型等簡單數據類型的基礎上, 按層次產生各種構造數據類型, 如數組、指針、 結構和共用體等。 前面已經討論了數組和指針兩種構造數據類型, 但是僅有這些是不夠的, 有時還需將不同類型的數據組成一個有機的整體, 這些組合在一起的數據就是結構。C 語言中的結構,就是把多個不同類型的變量結合在一起形成的一個組合型變量,稱為結構變量。這些不同類型的變量可以是基本類型、枚舉類型、指針類型、 數組類型或其它結構類型的

35、變量。 這些構成一個結構的各個變量稱為結構元素,它們定義規則與變量名相同。結構類型的一般形式為:struct 結構名結構成員說明;結構成員說明的格式為:類型標識符 成員名;例如: struct dateint month;int day;int year;定義一個結構的變量的方法有三種:1. 先定義結構的類型,再定義該結構的變量名struct dateint month;int day;int year;date date1,date2;/ 定義結構的變量名 /2. 在定義結構類型的同時定義該結構的變量struct dateint monthint day;int year;date1,dat

36、e2;3. 直接定義結構類型變量 struct int year;int month;int day;date1,date2, ,date n;結構類型變量的引用, 對于結構類型變量的引用遵守如下規則: 結構不能作為一個整體參加賦值、 存取和運算, 也不能整體的作為函數的參數, 或函數的返 回值。對結構所執行的操作,只能用&運算符取結構的地址,或對結構變量的成員分別加以引用。引用的方式:結構變量名 . 成員名;如果結構類型變量的成員本身又屬于一個結構類型變量, 則要用若干個成員運算符“ . ” ,一級一級的找到最低一級成員,只有最低一級成員才能參加賦值、存取或運算。 “->” 和

37、“ . ”符號等同。結構數組的定義,當數組中的每個元素都具有相同的結構類型的結構變量,則稱該數組為結構數組。結構數組與變量數組不同之處, 就在于結構數組的每一個元素, 都是具有同一個結構類型的結構變量,它們都具有同一個結構類型,都含有相同的成員項。例如: struct dateint month;int day;int year;struct date date110;指向結構類型數據的指針, 一個指向結構類型數據的指針, 就是該數據在內存中的首地址。 我們也可以設一個指針變量, 把它指向一個結構數組, 此時該指 針變量的值就是結構數組的起始地址。指向結構體變量的指針變量的一般形式為:stru

38、ct 結構類型名 * 指針變量名;或 struct 結構成員說明* 指針變量名;指向結構變量的指針變量的一個實際的應用例子就是對信息進行傳輸, 一個任務使用 “傳送一條信息” 的方法與另一個任務進行通信。 這個傳送操作包括傳 送信息結構變量的指針變量,這個指針變量是向接收任務傳遞的信息或指針。指向結構數組的指針變量的一般形式:struct 結構數組名* 結構數組指針變量名;或: struct 結構成員說明* 結構數組指針變量名 ; 共用體和枚舉在這不做重點講解。函數一、函數的調用函數調用的一般形式為:函數名(實際參數列表) ;對于有參數函數, 若包含多個實際參數, 應將各參數之間用逗號分隔開。

39、 主 調用函數的數目與被調用函數的形式參數的數目應該相等。 實參和形參按照實際 順序一一對應傳遞數據。如果調用的是無參數函數, 則實際參數表可以省略, 但函數名后面必須有一 對空括號。函數調用的方式有以下三種:1函數調用語句,即把被調用函數名作為主調用函數中的一個語句。此時并不要求被調用函數返回結構數值,只要求函數完成某種操作。2函數結果作為表達式的一個運算對象,此時被調用函數以一個運算對象的身份出現在一個表達式中,就要求被調用函數帶有return 語句,以便返回一個明確的數值參加表達式的運算。4. 函數參數。即被調用函數作為另一個函數的實際參數。對被調用函數的說明:1. 被調用函數必須是已經

40、存在的函數(庫函數或用戶自定義函數)2. 如果函數中使用了庫函數,或不在同一個文件中的另外自定義函數,則應該在程序的開頭處用 #include 進行包含語句, 將所需要的函數信息包 含到程序中來。3. 如果程序中使用了自定義函數, 則該函數與調用函數同在一個文件里面,則應根據主調用函數和被調用函數在文件中的位置,決定是否對被調用函數作出說明。用函數指針變量調用函數,一個函數在編譯時,C編譯器會給它分配一個入口地址。 這個入口地址被稱為函數的指針。 我們可用一個指針變量指向函數, 然 后通過該指針變量調用函數。例如: int (*p)( ); 函數指針變量定義int factorial(n)p=

41、factorial / 函數指針變量指向函數的入口地址/使用時直接用指針變量調用函數即可:C=factorial(j);C=(*p)(j);如果一個函數指針變量不對他進行賦值, 是不能固定指向某個函數的, 它是專門用來存放函數的入口地址的。 給函數指針變量賦值時, 只需給出函數名, 不必給出參數。二、數組、指針作為函數的參數當用數組名作為函數的參數時, 應該在調用函數和被調用函數中分別定義數組。 只有這樣, 作為調用函數的實際參數數組全部元素, 才能順利地傳遞到被調用函數的形式參數數組中。實參數組和形參數組的類型應該一致,否則導致結果出錯。實參和形參的大小可以一致也可以不一致,形參數組不應大于

42、實參數組。用指向函數的指針變量作為函數的參數。 函數指針變量常用途之一就是把指針作為參數傳遞給其他函數。例如:主函數: main()sub(f1,f2);子函數: sub(x1,x2)int (*x1)( ), (*x2)( );a=(*x1)(i);b=(*x2)(i,j);形參被定義為指向函數的指針變量。用指向結構的指針變量作為函數的參數。 用指向結構變量的指針變量作為實際參數,將結構變量的地址傳遞給被調用函數的形式參數。例如: struct record;void show(p)struct record *pmain()struct record note;show (&not

43、e);第三章EDA軟件、教學目的和要求通過本章節的講解要求學生掌握電子產品設計研發所必備的軟件。 具體包括KEIL編程編譯調試軟件、Proteus電路仿真設計軟件、PROTEL99SE制電路板設計軟件等。二、教學重點2.1 KEIL 編程編譯調試軟件學習2. 2 PROTEUS 電路仿真設計軟件學習2.3 PROTEL99SE 印制電路板設計軟件學習三、教學難點如何將KEIL與PROTEUS合搭建仿真平臺KEIL uVision3 編程、編譯、調試軟件KEIL uVision3 是德國 KEIL Software 公司針對 51 系列單片機推出的基于32位windows環境,高效率的C語言開發

44、平臺。它是一個功能強大的單片機集 成開發環境,主要包括:C51交叉編譯器、A51宏匯編器、BL51連接/重定位器、 LIB51 庫管理器、 OH51 Intel HEX 格式文件轉換器、 RTX-51 實時操作系統以及單片機軟件仿真器Dscope51。uV3將項目管理、源代碼編輯、程序調試等集成到 了一個功能強大的windows32平臺中。具C編譯工具在產生代碼的準確性和效率 方面達到了較高的水平,對C語言的編譯支持幾乎達到了完美的程度,當然它也同樣支持 A51 宏匯編。uV3 內嵌多種靈活的控制選項,作為大項目的開發尤其理想。我們將通過上機實踐來講授KEIL 軟件的使用,如何在編輯器模塊里面

45、建立項目,編寫、編譯、調試應用程序,同時會結合PROTE脂真軟件,搭建仿真平臺, 再不接觸到任何硬件的前提下完成電路原理圖的仿真, 檢驗編寫程序的效率 和可行性。基于8051的C語言編程的Proteus仿真軟件一、Proteus概述Proteus是一款集單片機仿真和SPICE分析于一身的EDA©真軟件,于1989 年由英國Labcenter Electronics Ltd研發成功。除具備和其他 EDAX具一樣的 原理圖設計、PCB自動生成及電路仿真的功能外,最大特點是 Proteus VSMK現 了混合模式的SPICE電路仿真,他將虛擬儀器、高級圖標仿真、微處理器軟仿真 器、 第三方

46、的編譯器和調試器等有機結合起來, 實現了在硬件物理模型搭建成功 之前, 即可在計算機上完成原理圖設計、 電路分析與仿真、 處理器代碼調試及實 時仿真、系統測試、以及功能驗證。二、KEIL與Proteus結合搭建仿真平臺KEIL 本身帶有調試、軟件仿真,但并沒有跟硬件結合起來,因此,即使軟件調試運行的再好,也沒辦法跟驗證是否適合于硬件,因此將KEIL軟件與Proteus 仿真軟件結合,搭建仿真平臺,通過繪制硬件原理圖,調用實際的仿真工具,通 過在 KEIL 中對程序的調試,直接就可以輸出測試在硬件原理圖中的運行效果, 觀測輸出結果的正確與否來判斷我們編寫的應用程序的可行性和硬件電路的可 行性,

47、做到完全未接觸到物理硬件器件時就已經完成了仿真調試工作。 為后續搭 建硬件平臺,測試硬件電路打下良好的基礎。在調試過程中我們會講解具體的仿真器件的使用,調試方法和步驟,讓同學們做到有的放矢,輕松自如的學習、實踐和操作這兩款軟件。PROTEL99SE制電路板設計軟件印制電路板為硬件電路的實現搭建了一個良好的平臺, 因此一款印制電路板設計的好壞直接關系到我們是否能實現硬件原理圖的功能。 以下是整個印制電路板的設計流程。我們的任務就是讓同學們一天時間學會PROTEL99SE業級的原理圖繪制和印制板設計,做到游刃有余,輕松自如。第一課:元件庫制作1. 創建相關工作目錄;2. 下載安裝軟件;3. 制作

48、SCH 元件庫;4. 制作 PCB 元件庫。第二課:原理圖和PCB®作1. 設計原理圖的準備工作;2. 添加元件庫;3. 頁面設置,圖紙設置;4. 設計原理圖(層次原理圖設計)5. 自動編號;6. DRg能;7. 全局更改功能添加封裝;8. 輸出原件清單;9. PCBS計準備工作;10. 規劃版框;11. 設置安裝孔;12. 導入網絡表;13. 原理圖交互布局;14. 布線規則設置;15. 自動布線;16. 手工布線;17. 布線推擠;18. 添加文字;19. PCB 鋪銅;20. PCB DRC;第三課:相關經驗介紹1. 如何把大的 IC 在 PROTEL99SE 中分開做;2.

49、如何在Protel99SE PCB 中新增加一個元件;3. 如何在PROTEL99SE PCB文件中快速提取封裝;4. PROTEL 如何打開 ORCAD 原理圖文件;5. AD8 如何使用 99SE 的庫;6. 四層板和多層板的設計方法;7. PROTEL99SE 輸出 CAM 的方法;8. 英文版 99SE 如何加漢字;9. PROTEL 另外一種鋪銅的方法;10. PROTEL99SE 如何為沒有網絡的PCB 添加網絡;11. 在PCB中加入圖片;12. 如何在PCB中制作出方孔;13. AD6.9中如何使用PROTEL99SE的原件庫;第四章 趣味電子產品設計與制作一、教學目的和要求要

50、求學生在掌握上述已有教學內容的基礎上,實際動手設計制作2、3款小型電子產品。做到獨立設計項目書編制、硬件器件選型、電路原理圖繪制、印制 電路板設計制作、程序編制、軟件仿真、搭載焊接硬件電路、調試實現其功能。二、教學重點2.1原理圖的論證實現、硬件器件的選型2. 2運用設計軟件進行原理圖繪制、PCB印制板設計、電路仿真等 三、教學難點如何將整個設計項目從頭到尾設計制作完成,培養具備整體項目設計思維和能力。實作電子產品1電子時鐘軟硬件設計1、電子時鐘硬件電路設計任何電子產品設計都無外乎從硬件和軟件兩方面來考慮。兩者相互之間是有機配合,當兩者配合良好時就是產品設計成功時。硬件設計綜合考慮的因素較多,

51、 按照項目設計研發的要求,應該首先根據市場需求初步設計電子時鐘產品應該具 備的基礎功能;其次完善項目設計書;再次考慮成本、效率、和可行性問題來對 硬件器件進行選型;然后設計硬件電路,通過繪制硬件電路圖來實現;再未搭建 物理硬件之前進行硬件電路的仿真(需結合后續編寫的控制程序共同完成);最后設計印制電路板作為硬件電路搭建的平臺。 本次電子時鐘產品設計的硬件電路 如圖1所示。尸二二 HL F 二二 f*2! FA圖1電子時鐘硬件電路圖L.nHXI: i NWId r i TTiI I WI7 imIf I M I' MGIrIr111T lr-ll;u,-«>T32、電子時

52、鐘軟件設計控制程序的編寫無疑是對一個人綜合邏輯思維能力的一次考驗,需具備良好的數學邏輯思維能力,良好的程序語言編寫基礎,掌握一定的編寫技巧。首先是 根據電子鐘實現的功能和已經做了的硬件元器件選型進行項目任務書編制;其次根據任務書繪制程序流程框圖;再次根據程序流程框圖的定義進行 C應用程序的 編制;然后調試應用程序,并借助仿真軟件一起聯調,最后在無任何錯誤的情況 下搭載硬件電路,焊接元器件,燒寫下載應用程序,調試實現其功能。電子時鐘軟件設計的程序流程框圖如圖 2所示。定時器0中斷入口時間及日期運行處理按鍵處理返回主函數結果顯示圖2程序流程框圖實作電子產品2數字溫度計軟硬件設計1、數字溫度計硬件電

53、路設計用一片DS18B20構成測溫系統,測量的溫度精度達到0.1度,測量的溫度的 范圍在一20度到+50度之間,用4位數碼管顯示出來。具體的硬件電路圖如 圖3所示。4DS18B2OPidVCCPl.lMOPl JPCIPJ JP02PI 4P03Pl .5Pfi4Pl.d Pl:PC 5K6RSIA'PDPt' 7P3 .( RxDEA'VppPMlxALt PROGP: 2INI0PSENP3 3INT1P2.7Pi.4 10P2.6pr F門5P3.d WBP2.4巴RDP2JXFAI2P?2XFAL1P2.1GNDP2.01 TT TT u TT TF 1_ IT

54、 n=AT89s52圖3數字溫度計硬件電路圖DS18B20 數字溫度計是DALLAS公司生產的1Wire,即單總線器件,具有 線路簡單,體積小的特點。因此用它來組成一個測溫系統,具有線路簡單,在一 根通信線,可以掛很多這樣的數字溫度計。DS18B20產品的特點(1)、只要求一個I/O 口即可實現通信。(2)、在DS18B20中的每個器件上都有獨一無二的序列 號。(3)、實際應用中不需要外部任何元器件即可實現測溫。(4)、測量溫度范圍 在一55°C到+125。C之間。(5)、數字溫度計的分辨率用戶可以從 9位到12位 選擇。(6)、內部有溫度上、下限告警設置。DS18B20詳細弓唧功能描述1 GND地信號;2 DQ數據輸入/輸出引腳。開漏 單總線接口弓I腳。當被用著在寄生電源下,也可以向器件提供電源;3 VDD可選擇的VDD引腳。當工作于寄生電源時,此引腳必須接地。DS18B20的使用方法。由于DS18B20采用的是1Wire總線協議方式,即在一根數據線實現數據的雙 向傳輸,而對AT89S51單片機來說,我們必須采用軟件的方法來模擬單總線的 協議時序來完成對DS18B20芯片的訪問。由于DS18B20是在一根I/O線上讀

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論