狠狠干影院/欧美午夜电影在线观看/高黄文/国产精品一区二区在线观看完整版

西安郵電大學嵌入式板級電路裝配課程設計實驗報告

| 瀏覽次數:

 西 安 郵 電 大 學

  (計算機學院)

 嵌入式系統板級電路裝配

 課程設計實驗報告

 專業名稱:

 計算機科學與技術 班

 級:

  計科 1405

  學

 號:

  XXXXXXX 姓

 名:

  XXX 指導教師:

  XXX 實驗日期:2017 年 12 月 11 日—12 月 22 日 第一周: : 開發板硬件裝配

 一、

 開發板硬件結構

 開發板由 PACK 板與底板構成,PACK 板板載一枚 LCP2132 芯片,該芯片就是 NXP 公司(飛利浦創建)設計得一款基于 ARM7TDMIS 得高性能 32 位 RISC 微控制器,具有 Thumb 擴展功能,64KB 片內 Flash ROM,具有在系統編程(ISP)與應用編程(IAP),16KB RAM,向量中斷控制器,兩個 UART,一個帶全調制解調器接口。

 兩個 I2C 串行接口,兩個 SPI 串行接口三個 32 位定時器,瞧門狗定時器,帶有備用電池備份得實時時鐘,欠壓檢測電路通用 I/O 引腳。

 CPU 時鐘高達 60 MHz,片內晶體振蕩器與片內 PLL。

 板子總體分了電源電路,晶振電路,復位電路,LED 電路,按鍵電路,串口電路,JTAG 調試電路等幾部分,如下圖所示

 圖 1 Easy ARM 2132 開發板底板元件布局圖

 二、

 硬 件 原 理組成及分 析

 開 發 板 完整電路圖如下圖所示 圖 2 Easy ARM 2132 開發板完整電路圖 1. 電源電路: LPC2132 電源電路部分采用了一個 DC 接口得 POWER1 供電口與一個5V 得 USB 供電口,內部采用了一個

 1N5819 二極管來穩流,采用 SPX1117M33、3 低壓差穩壓器, 如右圖所示。

 電路另一邊有一個紅色得發光二極管,當電源接通后,二極管會點亮。

 2. 復位電路

 復位電路采用一顆 CAT1025 芯片,CAT1025 就是基于微控制器系統得存儲器與電源監控得完全解決方案。它們利用低功耗 CMOS 技術將 2K 位得串行 EEPOM 與用于掉電保護得系統電源監控電路集成在一塊芯片內。存儲器采用 400KHz 得 I2C 總線接口。

 CAT1025 包含 1 個精確得 Vcc 監控測電路與 2 個開漏輸出:RESET與!RESET。當 Vcc 低于復位門檻電壓時,!RESET 引腳將變為高電平,RESET 將變為低電平。CAT1025 還包含一個寫保護輸入(WP)。如果 WP 連接高電平,則寫操作被禁止。

 nRST 連接到芯片 LPC2132 得復位引腳,當復位按鍵 RST1 按下時,CAT1025 得復位引腳輸出有效信號,使芯片 LPC2132 復位。

 3. 系統時鐘電路

 LPC2132 微控制器可使用外部晶振或外部時鐘源,片外晶振頻率范圍:1~30MHz,如 下 圖 中Y111、0592MHz,內部鎖相環電路 PLL 可調整系統時鐘,通過片內 PLL 可實 現 最 大 為60MHz 得 CPU操作頻率,實時時鐘具有獨立得時鐘源,如下圖中 Y232、768KHZ 晶振。

  4. G JTAG 接口電路

 采用 ARM 公司提出得標準 20 腳 JTAG 仿真調試接口,JTAG 信號得定義以及與 LPC2132 得連接如下圖:

 5. 按 按鍵及顯示電 路

 LPC2132 開發板具有 4 個按鍵、4 個 LED 燈。4 個 LED 燈一邊已經與 DP3V3 連接,另一邊經過 1 個 470R 得電阻后與 JP1 跳線相連,當

 JP12 連通得時候,LED1 得一側與芯片得 P0、17 口就會連通,P0、17口輸出低電平,LED1 就會點亮,如果 P0、17 輸出高電平,LED1 就會熄滅。

 4 個按鍵中復位鍵已經在前面介紹了,剩下三個按鍵 KEY1、KEY2、KEY3 一邊接地,另一邊接了 4K7 得電阻然后與正極相連,還接了 JP2跳線組,如果 JP2 得 12 連通,那么 P0、16 就與 KEY1 連通,當按鍵按下得時候,P0、16 輸出低電平,當按鍵沒有按下得時候 P0、16 輸出高電平,因為按鍵檢測電路可以編寫為檢測就是否有低電平來判斷按鍵就是否按下。

 6. T UART 接口電路

 CH340G 就是一個USB轉串口芯片,可以把電腦得USB口映射為串口用。

  當 使 用串 口電路進行UART 調試得時 候 , 需 要 將JP6 短 接 , 連 通P0、 0 與 CH340G得 TXD 口,連通P0、 1 與 CH340G得 RXD 口。另一邊 CH340G 得 X1與 X0 接 入 了X112MHz 得晶 振。

 三、

 開發板硬件安裝調試過程

 ① 焊接最小 系統

 首先焊接電源模塊,復位電路模塊,晶振模塊,構成最小系統,然后對最小系統進行測試。

 測試方法:將電源線與開發板得電源模塊連接,觀察電源指示燈就是否點亮,如果點亮,使用萬用表測量 U1 點電壓,數值范圍為:3、29V~3、31V,標準值為 3、30V,表明電源電路模塊正常。然后用示波器觀察晶振引腳得波形,查瞧晶振就是否正常。

?、?焊接外接電路板 。

 在洞洞板上面焊接一個LED燈,然后引出接口,一個為正,一個為負,然后將正負極分別與排針焊接在一起;將蜂鳴器得正負極分別于排針焊接;將按鍵得兩邊與排針焊接在一起。

 測試方法:將 LED 正負極分別與開發板得 DP3、3V 與 GND 連接,可以觀察到 LED 燈點亮。蜂鳴器得正負極與開發板得 DP3、3V 與 GND 連接,可以聽到蜂鳴器發聲。將開發板正極與蜂鳴器正極相連,蜂鳴器負極與開關一邊相連,然后開關另一邊接低電平,按下按鍵后蜂鳴器會發出聲音,證明開關電路完好。

?、?焊接 D LED 燈

 焊接LED電路,將LED1LED7焊接在開發板上面,然后焊接R4R7四個電阻,這就是二極管得分壓電阻。

 測試方法: 給開發板通電,然后依次給 JP1 得 1、3、5、7 接低電平,會發現 LED1LED4依次點亮,如果有不亮得,說明焊接有誤,檢查二極管得正負就是否正確,用萬用表檢測就是否有短路。

?、?焊接 開關

 將 KEY1、KEY2、KEY3 焊接到開發板上面,然后將 3 個 4K7 得電阻焊接到R1、R2、R3 三個位置,最后在 JP2 上面焊接一組排針。

 測試方法: 給開發板供電,用萬用表檢測 KEY1KEY3 得電壓,正常范圍應該就是 3、28V3、31V,當 KEY1 鍵按下得時候,JP2 得 1 電壓應該為 0V;當 KEY2 鍵按下得時候,JP2 得 3 電壓應該為 0V;當 KEY3 鍵按下得時候,JP2 得 4 電壓應該為 0V。

 ⑤ 焊接 串口模塊

 將CH340G焊接到開發板對應位置,要注意焊接得時候容易將周圍引腳連接在一起,必須非常小心得操作。

 測試方法: 給開發板供電,然后USB口與電腦連接,電腦得設備管理器可以檢測到串口輸入,如下圖:

?、?焊接 G JTAG 模塊

 JTAG 模塊很簡單,只需要將 JTAG 后面得引腳依次焊接即可。

 檢測方法: 開發板供電后,用 JTAG 線連接開發板得電腦,然后打開 HJTAG Server,

 點擊搜索可以檢測到芯片。如下圖:

 在 HFlasher 窗口得“Flash Selection”項選擇仿真得器件型號LPC2132,在 HFlasher 窗口得“Programming”項窗,點擊<Check>按鈕,HJTAG 將檢測到得器件類型顯示于本窗口。

 四、

 遇到問題分析及硬件調試體會

 1、 遇到得問題 焊接好 LED 燈模塊后,測試 LED 燈得時候發現 LED3 不亮,用萬用表檢測后發現就是 LED3 得引腳虛焊,重新焊接后問題解決。

 2、硬件調試體會 焊接過程中需要足夠得耐心,不能瞧到別得同學進度比自己快就急躁,急于求成做出來得產品只能就是差得甚至就是壞得,我們應該從焊接中總結經驗,提高自己得焊接能力,掌握焊接技巧,焊接出最好,最完美得電路板。

 第二周: : 軟件編程與調試

 一、調試環境搭建

?、?啟動 ADS1、2IDE 集成開發環境。

 ② 在 ADS 主窗口主菜單選擇 File>New,使用 asm for lpc2132 工程模板建立一個工程(圖例中工程名稱為:ZQL_LIB1),指定工程路徑(圖例中工程路徑為 D:\ARM_Lib_Bak\ARM_asm)。

 ③ 點擊確認<按鈕>,創建工程。

 ④ 在 ZQL_LIB1 工程窗口,雙擊模板文件 main、S,打開該文件。

?、?可在主窗口菜單選擇 Edit>Perferences,設置字體與字號。

?、?在 main、S 文件編輯窗得 “add the user code here、 添加用戶代碼”行下建立用戶匯編程序代碼 。

?、?選擇 Project>Make(或快捷鍵<F7>),編譯鏈接整個工程。若編譯成功,則 Erros & Warnings 對話框會報告編譯錯誤為 0,此時即可對工程進行仿真。

 二、 調試方法

?、?單步運行;在 AXD 調試器主窗口,選擇 Execute > Step (或快捷鍵<F10>),處理器執行一行代碼; ② 設置斷點;在 AXD 調試器“代碼調試窗口”雙擊目標代碼行,若出現紅色實心圓點,則表示斷點設置成功;然后選擇 Execute>Go 全速運行,處理器執行程序停止在斷點行; ③ 運行到光標行;在 AXD 調試器“代碼調試窗口”單擊選擇目標代碼行,然后在 AXD調試器主窗口,選擇 Execute>Run to Cursor 運行到光標處;通過斷點調試可以觀察ARM 寄存器與存儲單元得數值變化,具體操作方法在后面得實驗中會作詳細介紹。

 二、完成實驗內容

 本人主要負責內容:GPIO 輸入輸出基礎實驗,交通燈綜合實驗中得蜂鳴器、中斷服務程序、GPIO 初始化模塊以及鍵盤掃描部分編寫。

 1 1 、O GPIO 輸入輸出實驗

 (1)實驗目得 ① 掌握 LPC2132 工程模板得使用。

?、?掌握 EasyJTAG 仿真器得安裝與使用。

?、?能夠在 EasyARM 教學實驗開發平臺上運行第一個程序。

?、?熟悉 LPC2000 系列 ARM7 微控制器得 GPIO 控制。

 (2)實驗原理 LPC2132 系列得 ARM7 微控制器得所有 GPIO 口,均為雙向 I/O 口。引腳可以根據需要配置為 I/O 口或其它功能,與 GPIO 相關得寄存器一共有 6 個見下表:

  通過編程控制 BEEP(P0、7)輸出低電平,從而實現蜂鳴器持續發聲。

 (3)實驗過程 ① 啟動 ADS1、2IDE 集成開發環境,選擇 ARM Executable Image for lpc2132 工程模板建立一個工程 BeepCon_C。

?、?在 user 組里編寫主程序代碼 main、c。

?、?選用 DebugInRam 生成目標,然后編譯鏈接工程。

?、?將 EasyARM 教學實驗開發平臺上得 P0、7 管腳與 Beep 跳線短接 ⑤ 選擇 Project>Debug,啟動 AXD 進行 JTAG 仿真調試。

?、?全速運行程序,程序將會在 main、c 得主函數中停止(因為 main 函數起始處默認設置有斷點)。

 ⑦ 單擊 Context Variable 圖標按鈕(或者選擇 Processor Views>Variables)打開變量觀察窗口,通過此窗口可以觀察局部變量與全局變量。選擇 System Views>Debugger Internals 即可打開 LPC2000 系列 ARM7 微控制器得片內外寄存器窗口。

 ⑧ 可以單步運行程序,可以設置/取消斷點;或者全速運行程序,停止程序運行,觀察變量得值,判斷蜂鳴器控制就是否正確。

 (4)問題分析與解決方法

 GPIO 功能選擇之后沒有進行 IO0DIR 方向選擇,導致 P0、7 口依然為輸入口,無法輸出低電平信號,故而蜂鳴器沒有發聲,添加這行代碼后,成功實現功能。

 2 2 、 定時器與中斷控制

 (1)實驗目得 ① 熟悉 LPC2000 系列 ARM7 微控制器得定時器 0 得基本設置及匹配輸出應用。

 (2)實驗原理 使用定時器 0 實現 1 秒定時,控制蜂鳴器蜂鳴。采用中斷方式實現定時控制。

 備注:EasyARM2132 實驗板上得系統時鐘默認為 11、0592MHz;系統中已定義了符號常量 Fpclk = 11059200 ;

  (3)實驗過程 ① 啟動 ADS 1、2,使用 ARM Executable Image for lpc2132 工程模板建立一個工程TimeOut_C。

 ② 在 user 組中得 main、c 中編寫主程序代碼。

 ③ 選用 DebugInExram 生成目標,然后編譯連接工程。

 ④ 選擇【Project】>【Debug】,啟動 AXD 進行 JTAG 仿真調試。

?、?將 LPC2132 開發板上得 P0、7 接入蜂鳴器 ⑥ 全速運行程序,蜂鳴器會響一秒,停一秒,然后再響一秒……依次循環。

 代碼如下: :

 #include "config、h" #define BEEP

 1 << 7

 /* P0、7 控制 BEEP,低電平蜂鳴 */ /***************************************************************************************** ** 函數名稱 :IRQ_Timer0 ** 函數功能 :定時器 0 中斷服務程序,取反 LED2 控制口。

 ** 入口參數 :無

 ** 出口參數 :無 ****************************************************************************************** */ void __irq IRQ_Timer0 (void) {

 if ((IO0SET & BEEP) == 0)

  IO0SET = BEEP;

  /* 關閉 BEEP */

 else

  IO0CLR = BEEP;

 T0IR = 0x01;

 /* 清除中斷標志 */

 VICVectAddr = 0x00;

  /* 通知 VIC 中斷處理結束 */ } /* ***************************************************************************************** ** 函數名稱 :main ** 函數功能 :使用定時器實現 1 秒鐘定時,控制 LED9 閃爍。中斷方式。

 ** 調試說明 :需要將跳線 JP11 連接 BEEP。

 ***************************************************************************************** */ int main (void) {

 PINSEL1 = 0x00000000;

  /* 設置管腳連接 GPIO */

 IO0DIR

 = BEEP;

 /* 設置 BEEP 控制口輸出 */

 IRQEnable;

  /* IRQ 中斷使能 */

 /* 定時器 0 初始化 */

 T0TC

  = 0;

  /* 定時器設置為 0 */

 T0PR

  = 0;

  /* 時鐘不分頻 */

 T0MCR

 = 0x03;

 /* 設置 T0MR0 匹配后復位 T0TC,并產生中斷標志 */

 T0MR0

 = Fpclk;

 /* 1 秒鐘定時;系統中已定義 Fpclk = 11059200 */

 T0TCR

 = 0x01;

 /* 啟動定時器 */

 /* 設置定時器 0 中斷 IRQ */

 VICIntSelect = 0x00;

 /* 所有中斷通道設置為 IRQ 中斷 */

 VICVectCntl0 = 0x20 | 0x04;

 /* 設置定時器 0 中斷通道分配最高優先級 */

 VICVectAddr0 = (uint32)IRQ_Timer0; /* 設置中斷服務程序地址 */

 VICIntEnable = 1 << 0x04;

  /* 使能定時器 0 中斷 */

 while (1);

 return 0; } (4)問題分析與解決方法

 下板后蜂鳴器不發聲, 檢查后發現就是蜂鳴器一邊接了低電平,另一邊接了P0、7 引腳,輸出低電平后,倆邊都就是低,所以蜂鳴器不發聲,重新接線后恢復正常。

 3 3 、 外中斷控制

 (1)實驗目得

 學習 LPC2000 系列 ARM7 微控制器得向量中斷控制器及外中斷得應用技術。

 (2)實驗原理 主程序閃爍 LED,EINT 使能/停止 BEEP 得鳴響。

  (3)實驗過程 ① 跳線 LED1、Key1 與 Beep 分別連接到 P1、18、P0、16 與 P0、7 管腳;使用 KEY1 模擬外中斷; ② 啟動 ADS 1、2,使用 ARM Executable Image for lpc2132 工程模板建立一個工程TimeEINT_C。

?、?在user 組中得main、c 中編寫主程序代碼;使用系統宏IRQEnable,使能IRQ 中斷。

?、?裝載并使能外中斷; ⑤ 選用 DebugInExram 生成目標,然后編譯連接工程。

?、?選擇【Project】>【Debug】,啟動 AXD 進行 JTAG 仿真調試。

?、?全速運行程序,LED 閃爍; ⑧ 每一次按鍵 Key,蜂鳴器就會轉換靜音或鳴響狀態。

 代碼如下: #include "config、h" #define

 BEEPCON

 1<<7

 // P0、7 引腳控制 Beep,低電平蜂鳴 #define

 LED1

  1<<18

 // P1、18 引腳控制 LED1,低電燈亮 /**************************************************************************** * 名

 稱:DelayNS * 功

 能:長軟件延時 * 入口參數:dly 延時參數,值越大,延時越久 * 出口參數:無 ****************************************************************************/ void

 DelayNS(uint32

 dly) {

  uint32

 i;

  for(; dly>0; dly)

 {

  for(i=0; i<5000; i++);

  } } /**************************************************************************** * 名 稱:IRQ_EINT0 * 功 能:外中斷服務程序,取反 BEEPCON 控制口。

 * 入口參數:無 * 出口參數:無 ****************************************************************************/ void __irq IRQ_Eint0(void) {

 if ((IO0SET & BEEPCON) == 0 )

 // 反轉 BEEPCON 管教輸出狀態

  IO0SET = BEEPCON;

  else

  IO0CLR = BEEPCON;

 while ( (EXTINT &0x01) != 0 )

  EXTINT = 0x01;

 // 清除 EINT0 中斷標志

 VICVectAddr = 0x00;

 // 通知 VIC 中斷處理結束 } /**************************************************************************** * 文 件 名:main、c * 功 能:主程序閃爍 LED1;KEY1 模擬外中斷方式,每次外中斷事件反轉 Beep 鳴響狀態。

 * 說 明: ****************************************************************************/ int main(void) {

 int x;

 PINSEL0 = 0x00000000;

 // 設置管腳連接 GPIO

 PINSEL1 = 0x00000001;

 // 設置管腳 P0、16 為 EINT0

 IO0DIR = BEEPCON;

  // 設置 P0、7 為輸出

 IO1DIR = LED1;

 // 設置 P1、18 為輸出

 EXTMODE

 =

 0x00;

 IRQEnable;

 VICDefVectAddr = (int)IRQ_Eint0;

 // 設置 EINT0 為 非向量 IRQ 中斷

 EXTINT = 0x01;

  // 清除 EINT0 中斷標志

 VICIntEnable = 1<<0x0e; // 使能 EINT0 中斷

 while(1)

 // 等待 EINT0 中斷

 {

  if (x!=0) {

 IO1SET = LED1; x = 0;

 }

  else

 {

 IO1CLR = LED1; x = 1;

 }

  DelayNS(100);

 }

 return(0); } (4)問題分析與解決方法

 LED 閃爍正常,但就是按鍵后蜂鳴器沒有任何反應,通過一步步排查,最終發現,引腳定義到了 KEY3,但就是按鍵卻按下了 KEY1,更改引腳定義后,問題解決。

 4 4 、T UART 串口通信

 (1)實驗目得 通過實驗,掌握 UART 查詢 1 方式程序得設計。

 (2)實驗原理 通過串口 0 接收上位機發送得字符串,如“Hello EasyARM2132!”,然后返回上位機顯示。

  (3)實驗過程 ① 啟動 ADS 1、2,使用 ARM Executable Image for lpc2132 工程模板建立一個工程DataRet_C。

?、?在 user 組中得 main、c 中編寫主程序代碼,在項目中得 config、h 文件中加入#include

 <stdio、h>。

?、?選用 DebugInRam 生成目標,然后編譯連接工程。

?、?將EasyARM2132開發板上得JP6跳線分別選擇TxD0與RxD0端時,方可進行UART0通信實驗。

?、?使用串口延長線把 LPC2132 教學實驗開發平臺得 CZ2(UART0)與 PC 機得 1 連接。PC 機運行 EasyARM 軟件,設置串口為 1,波特率為 115200,然后選擇【設置】>【發送數據】,在彈出得發送數據窗口中點擊“高級”即可打開接收窗口。

 ⑥ 選擇【Project】>【Debug】,啟動 AXD 進行 JTAG 仿真調試。

?、呷龠\行程序,在 PC 機上得 EasyARM 軟件發送如“Hello EasyARM2132!”字樣得字符串,EasyARM2132 開發板接收到數據后,并將接收到得數據回發給 PC 機。

 代碼如下: #include “config、h” #define UART_BPS 115200

 //串口通信波特率 /**************************************************************************** * 名

 稱:DelayNS * 功

 能:長軟件延時 * 入口參數:dly

 延時參數,值越大,延時越久 * 出口參數:無 ****************************************************************************/ void

 DelayNS(uint32

 dly) {

 uint32

 i;

  for(; dly>0; dly)

 for(i=0; i<5000; i++); } /********************************************************************************* **函數名稱:UART0_Init **函數功能:串口初始化,設置為 8 位數據位,1 位停止位,無奇偶校驗,波特率為 115200 **入口參數:無 **出口參數:無 *********************************************************************************/ void UART0_Init(void) {

 uint16 Fdiv;

 U0LCR = 0x83;

  //DLAB = 1,允許設置波特率

 Fdiv = ( Fpclk / 16 ) / UART_BPS; //設置波特率

 U0DLM = Fdiv / 256;

 U0DLL = Fdiv % 256;

 U0LCR = 0x03; } /********************************************************************************* **函數名稱:UART0_GetByte **函數功能:從串口接收 1 字節數據,使用查詢方式接收

 **入口參數:無 **出口參數:接收到得數據 **********************************************************************/ uint8 UART0_GetByte(void) {

 uint8 rcv_dat;

 while((U0LSR % 0x01) == 0);

 //等待接收標志置位

 rcv_dat = U0RBR;

 return (rcv_dat); } /********************************************************************************* **函數名稱:UART0_GetStr **函數功能:從串口接收 **入口參數:s

 指向接收數據數組得指針

  n

 接收得個數 **出口參數:無 **********************************************************************/ void UART0_GetStr(uint8 *s, uint32 n) {

 for( ; n > 0; n )

  *s++ = UART0_GetByte; } /********************************************************************************* **函數名稱:UART0_SendByte **函數功能:向串口發送字節數據 **入口參數:dat 要發送得數據 **出口參數:無 **********************************************************************/ void UART0_SendByte(uint8 dat) {

 U0THR = dat;

 //寫入數據

 while((U0LSR & 0x40 ) == 0);

 //等待數據發送完畢 } /********************************************************************************* **函數名稱:UART0_SendStr **函數功能:向串口發送一字符串 **入口參數:str 要發送得字符串得指針 **出口參數:無 **********************************************************************/ void UART0_SendStr(uint8 const *str) {

 while(1) {

  if( *str == ‘\0’ )

  break;

  //遇到結束符,退出

  UART0_SendByte(*str++);

 //發送數據 } } /**************************************************************************** * 名 稱:main * 功 能:從串口 UART0 接收字符串“Hello EasyARM2132!”,并發送回上位機顯示 * 說 明:需要 PC 串口顯示終端軟件,如 EasyARM、exe。

 ****************************************************************************/ int main(void) { uint8 snd[32]; PINSEL0 = 0x00000005;

  // 設置 I/O 連接到 UART0

 UART0_Init;

 //串口初始化

 UART0_GetStr(snd, 18);

 //從串口接收字符串

 DelayNS(10);

 UART0_SendStr(snd);

 //向串口發送字符串

 DelayNS(10);

 while(1); return(0); } (4)問題分析與解決方法

 代碼運行后,PC機沒有顯示出來字符串,檢查后發現USB接口得接觸不良,接觸不良得原因就是焊接得時候沒有貼牢靠就焊接上去了,解焊后重新焊接了 USB 口,問題解決。

 5 5 、 綜合實驗: : 交通燈

 我負責得就是蜂鳴器函數,中斷服務程序,GPIO 初始化函數,鍵盤掃描模塊。

 最終效果圖如下:

 蜂鳴器函數模塊: :

 定義一個 BEEP 引腳 P0、8 作為蜂鳴器得輸入口,P0、8 給低電平,蜂鳴器響 uint32 BEEP = 18;

  P0、8 控制蜂鳴器,低電平有效 void say{

  蜂鳴器函數

  IO0CLR = BEEP;

  DelayNS(10);

  IO0SET = BEEP;

 } 中斷服務程序模塊: :

 通過定時器產生 1 秒得時鐘頻率,然后在中斷服務程序中調用 display 函數,display 函數,display 傳入得參數就就是數碼管要顯示得數字,然后每秒調用一次 display 函數,實現倒計時。

 void TimeInit

 // 中斷服務程序初始化函數 {

  IRQEnable;

 IRQ 中斷使能

 定時器 0 初始化模塊

 T0TC

  = 0;

  定時器設置為 0

 T0PR

  = 0;

  時鐘不分頻

  T0MCR

 = 0x03;

 設置 T0MR0 匹配后復位 T0TC,并產生中斷標志

  T0MR0

 = Fpclk;

  1 秒鐘定時

 T0TCR

 = 0x01;

  啟動定時器

 設置定時器 0 中斷 IRQ

 VICIntSelect = 0x00;

 所有中斷通道設置為 IRQ 中斷

  VICVectCntl0 = 0x20

 0x04;

  設置定時器 0 中斷通道分配最高優先級

  VICVectAddr0 = (uint32)IRQ_Timer0;

 設置中斷服務程序地址

  VICIntEnable = 1

 0x04;

  使能定時器 0 中斷

 } void __irq IRQ_Timer0 (void)

 中斷服務程序 {

  display(num);

  調用數碼管顯示函數

  T0IR = 0x01;

 清除中斷標志

  VICVectAddr = 0x00;

  通知 VIC 中斷處理結束

 } O GPIO 初始化函數: :

 PINSEL0 與 PINSEL1 選擇 GPIO 功能,然后設置數碼管,LED 燈,蜂鳴器引腳做輸出功能。

 void GPIOInit{

  PINSEL0 = 0x00;

  設置功能選擇 GPIO

  PINSEL1 = 0x00;

  設置功能選擇 GPIO

  IO0DIR = (SEG7|LEDS3|BEEP);

  設置數碼管,lED 燈,蜂鳴器引腳為輸出 } 鍵盤掃描模塊: :

 將鍵盤掃描模塊寫成函數放入 while 循環中,循環判斷按鍵就是否按下,掃描函數帶有消抖操作,防止重復檢測。Flag 標志,決定了現在燈得狀態,flag=0 就是正常倒計時模式,flag=1 就是緊急模式綠燈常亮,flag=2 就是緊急模式紅燈常亮。

 void keyscan {

 鍵盤掃描函數

 if ((IO0PIN & KEY1) == 0)

  如果 KEY1 按下

  {

  DelayNS(10);

 消除抖動

  if((IO0PIN & KEY1) == 0)

 再次檢測 KEY1 就是否按下

  {

  num=21;

  flag=0;

  功能選擇為正常模式

  }

  }

  else if ((IO0PIN & KEY2) == 0)

  如果 KEY2 按下

  {

  DelayNS(10);

  消除抖動

  if((IO0PIN & KEY2) == 0)

  再次檢測 KEY2 就是否按下

  {

  flag=1;

 功能選擇為綠燈常亮模式

  }

  }

  else if ((IO0PIN & KEY3) == 0)

 如果 KEY3 按下

  {

  DelayNS(10);

 消除抖動

  if((IO0PIN & KEY3) == 0)

 再次檢測 KEY3 就是否按下

  {

  flag=2;

  功能選擇為紅燈常亮模式

  }

  }

 } 三、總結與體會

 通過這次實驗,對于開發板得焊接,調試有了新得認識,對于焊接電路板得方法與順序有更好得了解,焊接電路板得時候一定要有耐心,戒驕戒躁,畢竟這就是一個危險得操作,經過多次焊接,掌握了焊接得技巧,焊接技能有了很大提高。焊接精細得引腳時,容易讓周圍得幾個連接在一起,這個時候用焊槍無法分開,通過請教老師,使用松香將連在一起得焊錫分開,學會了焊接問題得正確處理方法。

 在電路板得下板調試過程,學會了如何下板,如何編程,引腳怎么定義,如何對引腳進行輸入輸出方向選擇,對引腳得復用設計理念有了更高得認識,對于 LPC 系列芯片得編程與調試有了深入了解。通過 GPIO,定時器中斷,外部中斷,串口通信四個基礎實驗,掌握了設計得基本方法,通過一個大交通燈項目,體會到了完整項目得開發過程,函數化,模塊化編程在整個開發過程中可以簡化流程,寫出規規整整得代碼,讓閱讀代碼得人一下子就能瞧出您得程序執行流程。對于代碼風格得重要性有了更好得理解。

  實驗要求及評閱表 姓

 名

 學

 號

 實 驗 內 容 硬件焊接與測試( (第 第 5 15 周) )

 周一:講解基本要求與實驗內容,查閱學習資料、觀瞧相關視頻,學習相關基礎知識。

 周二:講解焊接工具得使用方法與安全操作流程,練習焊接與解焊,熟練掌握焊接技術。

 周三:講解測試儀器、儀表得使用方法與測試步驟,JTAG 仿真器得焊接與調試。

 周四:根據板級電路得電路圖等相關資料焊接主板與主要外設模塊。

 周五:利用相關儀器、儀表測試焊接電路板,開發板連接調試。

  軟件編程與調試( (第 第 6 16 周 )

  周一:查閱嵌入式軟件編程得相關資料與視頻,理解工作原理。

 周二:GPIO 輸入與輸出控制編碼,定時器控制流水燈閃爍編碼及調試。

 周三:外部中斷控制編碼,UART 串行通信編碼與調試。

 周四:定時器與串行接口結合代碼設計運行調試。

 周五:所有編程代碼綜合調試并交付檢查

 指 導 教 師 評 語

推薦訪問: 西安 裝配 嵌入式

【西安郵電大學嵌入式板級電路裝配課程設計實驗報告】相關推薦

工作總結最新推薦

NEW