摘 要: 本文主要介紹利用SPMC65P2404A單片機做行列式鍵掃描的處理,可作為用戶系統設計的參考。 關鍵詞:SPMC65P2404A、行列式鍵掃描 1 引言 本系統應用凌陽科技8位工業級單片機SPMC65P2404A*28p做行列式鍵掃描,可作為用戶設計參考,其所有程序源代碼及說明文件在凌陽單片機網站(www.sunplusmcu.com)上可以下載。 2 芯片特性簡介 SPMC65系列單片機是凌陽科技公司設計開發的8位工業級通用型單片機,具有超強的抗干擾能力,廣泛應用于家用電器、工業控制、儀器儀表等控制領域。SPMC65P2404A單片機功能特點如下: ● SPMC65 CPU - 支持 182 條指令 - 支持 11 種尋址方式 - 系統時鐘頻率最高可達 8MHz - 支持位操作指令(置 1 、清零、取反、測試) ● 存儲空間 - 4K 字節的程序空間( OTP ),并且可設置保密功能。 - 192 字節的 RAM (含堆棧空間) ● I/O 端口 - 23/15 個具有復用功能的雙向 I/O 端口 - 所有 I/O 端口的輸入均由施密特觸發器構成 - 可編程設置為帶上拉 / 下拉電阻輸入或者懸浮輸入 - I/O 具備 LED 驅動能力 - 其中 2 個 I/O 端口能提供 20mA 的吸入電流 ● 中斷管理 - 外部中斷選項:非屏蔽中斷 NMI 或可屏蔽中斷 IRQ - 支持 4 個外部中斷,其中的一個可設置為非屏蔽中斷 NMI - 12 個內部中斷 ● 復位管理 - 上電復位 (POR) - 低電壓復位 (LVR) - 看門狗復位 (WDR) - 外部復位 (ERST) - 非法地址復位 (IAR) ● 時鐘管理 - 3 種時鐘源:晶體 / 陶瓷振蕩器、 RC 振蕩器、外部時鐘輸入 - 在 RC 振蕩模式下,能夠輸出時鐘信號 | ● 電源管理 - 2 種省電模式: STOP 模式、 HALT 模式 ● 2 個外圍模擬電路 - 8 通道 10 位精度的 A/D 轉換器( 100KHz ) - 低電壓復位( 2.5V/4V ) ● 2 通道 8 位定時 / 計數器 (Timer0,Timer2) - 定時、計數功能 - 捕獲功能( 8 位脈寬測量) - 8 位比較輸出功能 ● 2 通道 16 位定時 / 計數器 (Timer1,Timer3) - 定時、計數功能 - 捕獲功能( 8 位脈寬 / 周期測量,或 16 位脈寬測量) - 16 位比較輸出功能 - 12 位 PWM 輸出功能 ● 時基定時器 - 頻率選擇: 1KHz ~ 62.5KHz @8MHz - 7 級分頻選擇 ● 蜂鳴器輸出 - 頻率選擇: 1KHz ~ 2MHz @8MHz - 12 級分頻選擇 ● 可編程看門狗定時器 - 中斷頻率選擇: 1.5Hz ~ 195Hz ● 串行總線接口 - SPI 總線頻率:最高為 2MHz @8MHz |
3 系統總體方案介紹 本例采用芯片SPMC65P2404A*28p,外接4X4按鍵,當按鍵被按下后,相應的發光二極管便會被點亮來指示當前的鍵值。系統框圖如圖3-1所示。 
圖 3-1系統框圖 原理圖如圖3-2所示,4行4列的鍵盤。PA口接4X4按鍵,PC3~PC0分別接4個發光二極管指示當前的按鍵值。圖中電阻均為510歐。 
圖 3-2 4X4按鍵掃描原理圖 PA3~PA0為行線輸入端,初始化為帶上拉電阻的輸入口。 PA7~PA4為列線輸出端,初始化為輸出低電平。 PC3~PC0接4個發光二極管用做指示燈,其16種組合0000~1111分別表示鍵K0~K15被按下。 掃描方法:首先由輸出口PA7~PA4向所有的列線輸出低電平,讀取各行線PA3~PA0的狀態,若行線狀態全為高電平,則表明無鍵按下,若行線狀態中有低電平,則表明有鍵按下。若有鍵按下,先進行消抖,消抖結束,再對每一列進行掃描,即:PA7~PA4四條列掃描線分別輸出低電平,在每次輸出低電平期間,讀取各行線PA3~PA0的狀態,確定鍵值。例如:PA7~PA4輸出"1011",此時若讀取PA3~PA0的狀態為"1110",則表明按鍵S2被按下。 掃描時序如圖 3-3所示。K0表示列線全部為低電平時行線的狀態; 
圖 3-3 按鍵掃描時序圖 K1表示列線PA4為低電平時行線的狀態,用于判斷按鍵S0、S4、S8、S12的狀態; K2表示列線PA5為低電平時行線的狀態,用于判斷按鍵S1、S5、S9、S13的狀態; K3表示列線PA6為低電平時行線的狀態,用于判斷按鍵S2、S6、S10、S14的狀態; K4表示列線PA7為低電平時行線的狀態。用于判斷按鍵S3、S7、S11、S15的狀態。 鍵值計算方法: 設置一個變量,高4位放列掃描線控制字,低4位放行掃描線狀態字。按鍵S0~ S15分別對應不同的變量值,因而可以根據變量值確定當前的按鍵值。消抖方法: 在按鍵閉合和打開的瞬間會產生許多尖脈沖,持續時間約幾毫秒到幾十毫秒。因而在程序中,當檢測到按鍵被按下后,便開始讀取鍵值,每隔4ms讀一次鍵值,直到連續7次讀取的鍵值完全相同,則認為抖動已經消除。消抖時間為4ms X 7=28ms。 注意:本范例只響應單個按鍵,若同時按下兩個或兩個以上的按鍵,則程序不響應。 4 系統軟件設計 4.1 主流程 程序主流程如圖4-1所示。主程序每隔4ms掃描一次鍵盤,若有按鍵被按下,則點亮或熄滅相應的指示燈來指示鍵值。 
圖4-1 鍵盤主流程圖 4.2 鍵盤掃描子流程 鍵盤掃描流程圖如圖4-2所示。 
圖4-2 鍵盤掃描流程圖 |