Skip to content

DamnDamnDamnM3/114-1_FCU_Microprocessor-System-Design

Repository files navigation

114-1 微處理機系統設計

📋 專案概述

本專案為微處理機系統設計課程的實驗集合,使用ARM Cortex-M0微控制器(NUC100系列)實作各種嵌入式系統應用。專案包含9個主要實驗,涵蓋從基礎的組合語言程式設計到複雜的遊戲開發和硬體整合應用。

🎯 學習目標

  • 掌握ARM組合語言程式設計
  • 學習GPIO控制和硬體介面設計
  • 實作七段顯示器和LCD顯示控制
  • 了解按鍵掃描和防彈跳技術
  • 學習隨機數產生和密碼系統設計
  • 掌握交通號誌控制系統實作
  • 學習外部中斷和ADC類比輸入處理
  • 理解遊戲開發和碰撞檢測技術
  • 掌握Timer中斷和硬體掃描技術
  • 培養嵌入式系統整合能力

🔧 硬體環境

  • 微控制器: NUC100系列(ARM Cortex-M0核心)
  • 開發板: Nu-LB-NUC140開發板
  • 開發環境: Keil MDK-ARM
  • 主要週邊設備:
    • 3x3按鍵矩陣
    • 七段顯示器(4位數)
    • LCD顯示器
    • LED陣列
    • 蜂鳴器
    • RGB LED

📁 實驗結構

Lab 1: ARM組合語言程式設計

檔案: Lab-1/

  • Q1.s: 陣列元素平方和計算
  • Q2.s: 日期比較程式
  • Q3.s: 反向乘積計算
  • 技術重點: Thumb-1指令集、暫存器操作、迴圈控制

Lab 2: GPIO按鍵控制LED顯示

檔案: Lab-2/

  • Q1.c: 靜態LED顯示模式
  • Q2.c: 動態LED跑馬燈效果
  • 技術重點: GPIO設定、按鍵掃描、LED控制、延遲函數

Lab 3: 蜂鳴器與七段顯示器控制

檔案: Lab-3/

  • Q1.c: 按鍵觸發蜂鳴器和LED顯示
  • Q2.c: HOLA文字滾動顯示
  • 技術重點: 蜂鳴器控制、七段顯示器多工、按鍵防彈跳

Lab 4: 隨機數產生與交通號誌控制

檔案: Lab-4/

  • Q1.c: 隨機數產生與餘數計算
  • Q2.c: 交通號誌控制系統
  • 技術重點: 隨機數產生、狀態機設計、倒數計時

Lab 5: 密碼鎖系統與數值顯示控制

檔案: Lab-5/

  • 5.1/Q1.c: 4位數密碼鎖系統
  • 5.1/Seven_Segment.c: 七段顯示器控制函數庫
  • 5.2/Q2.c: 數值顯示與位元操作系統
  • 5.2/Seven_Segment.c: 支援負號的七段顯示器控制
  • 技術重點: 熵累積、密碼驗證、位元操作、多種顯示模式

Lab 6: 數字選擇系統與交通號誌控制

檔案: Lab-6/

  • Q1.c: 數字選擇與求和系統
  • Q2.c: 交通號誌控制與LCD顯示
  • 技術重點: LCD控制、狀態管理、使用者介面設計

Lab 7: 球體動畫系統與碰撞遊戲

檔案: Lab-7/

  • Q1.c: 單向移動球體系統
  • Q2.c: 彈跳球體與目標方塊碰撞遊戲
  • 技術重點: LCD圖形繪圖、動畫控制、AABB碰撞檢測、狀態機設計

Lab 8: 數字競賽遊戲與打磚塊遊戲

檔案: Lab-8/

  • Q1.c: 數字競賽遊戲(外部中斷控制)
  • Q1_LanceVer.c: 數字競賽遊戲(Lance版本)
  • Q2.c: 打磚塊遊戲(ADC控制擋板)
  • 技術重點: 外部中斷處理、ADC類比輸入、碰撞檢測、狀態機設計、2D繪圖

Lab 9: 貪食蛇遊戲系統

檔案: Lab-9/

  • Q1.c: 基礎貪食蛇遊戲(固定長度)
  • Q2.c: 完整貪食蛇遊戲(吃水果版本,軟體掃描七段顯示器)
  • Q2-final.c: 完整貪食蛇遊戲(Timer中斷版本,硬體掃描七段顯示器)
  • 技術重點: ADC搖桿控制、遊戲邏輯設計、碰撞檢測、動態資料結構、七段顯示器多工掃描、Timer中斷處理

🔌 硬體連接總覽

通用連接

  • PA0,1,2,3,4,5: 3x3按鍵矩陣
  • PC4,5,6,7: 七段顯示器位選
  • PE0-7: 七段顯示器段選
  • LCD: SPI/I2C連接

專用連接

  • PC12,13,14,15: LED陣列(Lab 2, 3, 5, 8)
  • PB11: 蜂鳴器(Lab 3, 5, 7, 8)
  • PA12,13,14: RGB LED(Lab 4, 6)
  • PB15: 外部中斷按鈕(Lab 8)
  • PA7: ADC可變電阻(Lab 8)
  • PA0,1: ADC搖桿輸入(Lab 9)
  • PC0: 重置按鈕(Lab 9)

🎮 按鍵對應表

通用按鍵功能

按鍵 功能 適用實驗
1-6 數字輸入 Lab 3, 4, 5, 6
7 特殊功能1 Lab 3, 4, 5, 6
8 特殊功能2 Lab 3, 4, 5, 6
9 確認/特殊功能3 Lab 3, 4, 5, 6

實驗特定功能

  • Lab 2: LED模式切換
  • Lab 3: 蜂鳴器觸發、HOLA滾動控制
  • Lab 4: 隨機數產生、交通號誌控制
  • Lab 5: 密碼輸入、位元操作、顯示模式切換
  • Lab 6: 數字選擇、交通號誌控制
  • Lab 7: 球體動畫、碰撞遊戲
  • Lab 8: 數字競賽、打磚塊遊戲
  • Lab 9: 貪食蛇遊戲(搖桿控制)

🔍 技術重點

1. 組合語言程式設計

  • ARM Thumb-1指令集
  • 暫存器操作(R0-R7)
  • 記憶體存取和陣列處理
  • 迴圈和條件分支

2. GPIO控制

  • 輸入/輸出模式設定
  • 按鍵掃描和防彈跳
  • LED控制和PWM應用
  • 硬體中斷處理

3. 顯示技術

  • 七段顯示器多工掃描
  • LCD文字和圖形顯示
  • 動態效果實作
  • 顯示緩衝區管理

4. 系統整合

  • 多週邊設備協調
  • 狀態機設計
  • 時序控制
  • 使用者介面設計

5. 中斷處理

  • GPIO外部中斷
  • ADC中斷處理
  • Timer中斷應用
  • 中斷優先權管理

6. 遊戲開發

  • 遊戲邏輯設計
  • 碰撞檢測演算法
  • 動畫和畫面更新
  • 使用者輸入處理

🏗️ 程式架構

通用架構模式

系統初始化
├── GPIO設定
├── 週邊設備初始化
├── 變數初始化
└── 主程式迴圈
    ├── 按鍵掃描
    ├── 狀態處理
    ├── 顯示更新
    └── 延遲控制

狀態機設計

  • 初始化狀態: 系統啟動和硬體設定
  • 等待狀態: 等待使用者輸入
  • 處理狀態: 執行特定功能
  • 顯示狀態: 更新輸出設備
  • 錯誤狀態: 處理異常情況

🚀 擴展應用

硬體擴展

  • 添加更多LED效果
  • 整合感測器輸入
  • 實作無線通訊
  • 增加音效功能

軟體擴展

  • 實作更複雜的演算法
  • 添加資料記錄功能
  • 整合網路通訊
  • 實作圖形使用者介面

系統整合

  • 多微控制器協作
  • 即時作業系統整合
  • 電源管理優化
  • 故障診斷功能

⚠️ 注意事項

硬體注意事項

  1. 電源供應: 確保穩定的電源供應
  2. 接地: 正確的接地連接
  3. 電流限制: 注意LED和蜂鳴器的電流消耗
  4. 連接穩定性: 確保所有連接牢固

軟體注意事項

  1. 記憶體管理: 注意堆疊和堆積的使用
  2. 時序控制: 適當的延遲和時序控制
  3. 錯誤處理: 實作適當的錯誤處理機制
  4. 程式碼優化: 考慮執行效率和記憶體使用

開發注意事項

  1. 版本控制: 使用Git進行版本管理
  2. 程式碼註釋: 保持程式碼的可讀性
  3. 測試驗證: 充分測試所有功能
  4. 文件維護: 保持文件的更新

📚 學習資源

參考書籍

  • ARM Cortex-M0 微控制器手冊
  • 嵌入式系統設計原理
  • C語言程式設計
  • 組合語言程式設計

線上資源

  • ARM官方文件
  • NUC100系列技術手冊
  • Keil MDK-ARM使用指南
  • 嵌入式系統開發論壇

實作技巧

  • 硬體除錯方法
  • 軟體測試策略
  • 效能優化技巧
  • 系統整合經驗

🔄 版本歷史

  • v1.0: 初始版本,包含基礎實驗(Lab 1-6)
  • v1.1: 添加詳細註釋和說明文件
  • v1.2: 優化程式碼結構和效能
  • v1.3: 增加擴展應用和進階功能
  • v1.4: 新增Lab 7-9,包含遊戲開發和中斷處理技術

👥 作者群

damnm3@googlegroups.com 共同作者

  • Albert W. #7
  • Lance L.
  • Andy C.
  • Jim C.
  • Ruxiu C.
  • Hank Y.
  • fyljm123

📞 聯絡資訊

  • Email: damnm3@googlegroups.com
  • 專案網址: [GitHub Repository]
  • 問題回報: [Issues Page]
  • 討論區: [Discussions Page]

📄 授權條款

本專案採用 MIT 授權條款,詳見 LICENSE 檔案。


最後更新: 2025年 版本: 1.3
狀態: 持續開發中