《獨立鍵盤和矩陣鍵盤》由會員分享,可在線閱讀,更多相關(guān)《獨立鍵盤和矩陣鍵盤(29頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、鍵 盤 接 口 鍵 盤 是 單 片 機 應(yīng) 用 系 統(tǒng) 中 使 用 最 廣 泛 的 一 種 數(shù) 據(jù) 輸 入 設(shè) 備 。 鍵 盤 是 一 組 按 鍵 的 組 合 。 鍵 通 常 是 一 種 常 開 型 按 鈕開 關(guān) , 常 態(tài) 下 鍵 的 兩 個 觸 點 處 于 斷 開 狀 態(tài) , 按 下 鍵 時 它 們 才 閉 合 (短 路 ) 。 非 編 碼 鍵 盤 按 組 成 結(jié) 構(gòu) 又 可 分 為 獨 立 式 鍵 盤 和 矩 陣 式 鍵 盤 。 獨 立式 鍵 盤 的 工 作 過 程 與 矩 陣 式 鍵 盤 類 似 , 無 論 是 硬 件 結(jié) 構(gòu) 還 是 軟 件 設(shè) 計都 比 較 簡 單 , 。 通 常
2、, 鍵 盤 有 編 碼 和 非 編 碼 兩 種 。 編 碼 鍵 盤 通 過 硬 件 電 路 產(chǎn) 生 被按 按 鍵 的 鍵 碼 和 一 個 選 通 脈 沖 。 選 通 脈 沖 可 作 為 CPU的 中 斷 請 求 信 號 。這 種 鍵 盤 使 用 方 便 , 所 需 程 序 簡 單 , 但 硬 件 電 路 復(fù) 雜 , 常 不 被 單 片 機采 用 。 S1S4S3S2 P1.4 P1.5 P1.6 P1.7 89S52 +5V圖 8.1 獨 立 式 鍵 盤 接 口特 點 : 每 個 按 鍵 占 用 一 條 I/O線 , 當(dāng) 按 鍵數(shù) 量 較 多 時 , I/O口 利 用 率 不 高 , 但 程
3、序編 制 簡 單 。 適 用 于 所 需 按 鍵 較 少 的 場 合 。 特 點 : 電 路 連 接 復(fù) 雜 , 但 提 高 了 I/O口利 用 率 , 軟 件 編 程 較 復(fù) 雜 。 適 用 于 需使 用 大 量 按 鍵 的 場 合 。 89s52P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7 +5V圖 8.2 矩 陣 式 鍵 盤 接 口 K9 9 K10 A K15 FP10P11P12P13 P14 P15 P16 P17EA/VP31 X119 X218 RESET9 RD17 WR16 INT012 INT113 T014 T115 P101 P112 P123 P
4、134 P145 P156 P167 P178 P00 39P01 38P02 37P03 36P04 35P05 34P06 33P07 32P20 21P21 22P22 23P23 24P24 25P25 26P26 27P27 28PSEN 29ALE/P 30TXD 11RXD 10VCC 40GND 20U189S52P10P11P12P13P14P15P16P17 K0 0 K1 1 K2 2 K3 3K5 5 K6 6 K7 7K8 8K4 4 K11 BK12 C K13 D K14 E 掃 描 法 和 線 反 轉(zhuǎn) 法 89s52P1.0P1.1P1.2P1.3P1.4P1.
5、5P1.6 P1.7 +5V圖 8.2 矩 陣 式 鍵 盤 接 口 0 1 2 3 ee de be 7e 4 5 6 7 ed dd bd 7d 8 9 A b eb db bb 7b C d e F e7 d7 b7 77 鍵 盤 接 口 的 消 抖 1 消 除 鍵 抖 動 鍵 穩(wěn) 定鍵 按 下 前 沿 抖 動前 沿 抖 動 圖 5.2 鍵 合 斷 時 的 電 壓 抖 動 if語 句if語 句 是 C51中 的 一 個 基 本 條 件 選 擇 語 句 , 它 通 常 有 三 種 格 式 :( 1) if ( 表 達 式 ) 語 句 ; ( 2) if ( 表 達 式 ) 語 句 1; el
6、se 語 句 2; ( 3) if ( 表 達 式 1) 語 句 1; else if ( 表 達 式 2) ( 語 句 2; )else if ( 表 達 式 3) ( 語 句 3; )else if ( 表 達 式 n-1) ( 語 句 n-1; )else 語 句 n 【 例 】 if語 句 的 用 法 。( 1) if (x!=y) printf(“x=%d,y=%dn”,x,y);執(zhí) 行 上 面 語 句 時 , 如 果 x不 等 于 y, 則 輸 出 x的 值 和 y的 值 。( 2) if (xy) max=x;else max=y; 執(zhí) 行 上 面 語 句 時 , 如 x大 于
7、y成 立 , 則 把 x送 給 最 大 值 變 量 max, 如 x大 于 y不成 立 , 則 把 y送 給 最 大 值 變 量 max。 使 max變 量 得 到 x、 y中 的 大 數(shù) 。( 3) if (score=90) printf(“Your result is an An”);else if (score=80) printf(“Your result is an Bn”);else if (score=70) printf(“Your result is an Cn”);else if (score=60) printf(“Your result is an Dn”);else
8、 printf(“Your result is an En”); 執(zhí) 行 上 面 語 句 后 , 能 夠 根 據(jù) 分 數(shù) score分 別 打 出 A、 B、 C、 D、 E五 個 等 級 。 switch/case語 句 if語 句 通 過 嵌 套 可 以 實 現(xiàn) 多 分 支 結(jié) 構(gòu) , 但 結(jié) 構(gòu) 復(fù) 雜 。 switch是 C51中提 供 的 專 門 處 理 多 分 支 結(jié) 構(gòu) 的 多 分 支 選 擇 語 句 。 它 的 格 式 如 下 :switch ( 表 達 式 )case 常 量 表 達 式 1: 語 句 1; break;case 常 量 表 達 式 2: 語 句 2; bre
9、ak;case 常 量 表 達 式 n: 語 句 n; break;default: 語 句 n+1; 說 明 如 下 :( 1) switch后 面 括 號 內(nèi) 的 表 達 式 , 可 以 是 整 型 或 字 符 型 表 達 式 。( 2) 當(dāng) 該 表 達 式 的 值 與 某 一 “ case”后 面 的 常 量 表 達 式 的 值 相 等 時 , 就 執(zhí) 行 該“ case”后 面 的 語 句 , 然 后 遇 到 break語 句 退 出 switch語 句 。 若 表 達 式 的 值 與 所 有case后 的 常 量 表 達 式 的 值 都 不 相 同 , 則 執(zhí) 行 default后
10、面 的 語 句 , 然 后 退 出 switch結(jié) 構(gòu) 。( 3) 每 一 個 case常 量 表 達 式 的 值 必 須 不 同 否 則 會 出 現(xiàn) 自 相 矛 盾 的 現(xiàn) 象 。( 4) case語 句 和 default語 句 的 出 現(xiàn) 次 序 對 執(zhí) 行 過 程 沒 有 影 響 。( 5) 每 個 case語 句 后 面 可 以 有 “ break”, 也 可 以 沒 有 。 有 break語 句 , 執(zhí) 行 到break則 退 出 switch結(jié) 構(gòu) , 若 沒 有 , 則 會 順 次 執(zhí) 行 后 面 的 語 句 , 直 到 遇 到 break或 結(jié)束 。 【 例 】 switch
11、/case語 句 的 用 法 。 對 學(xué) 生 成 績 劃 分 為 AD, 對 應(yīng) 不 同 的 百 分 制 分 數(shù) , 要 求 根 據(jù) 不同 的 等 級 打 印 出 它 的 對 應(yīng) 百 分 數(shù) 。 可 以 通 過 下 面 的 switch/case語 句實 現(xiàn) 。switch( grade)case A; printf( ” 90100n”) ; break;case B; printf( ” 8090n”) ; break;case C; printf( ” 7080n”) ; break;case D; printf( ” 6070n”) ; break;case E; printf( ”
12、y) max=x;else max=y; 執(zhí) 行 上 面 語 句 時 , 如 x大 于 y成 立 , 則 把 x送 給 最 大 值 變 量 max, 如 x大 于 y不成 立 , 則 把 y送 給 最 大 值 變 量 max。 使 max變 量 得 到 x、 y中 的 大 數(shù) 。( 3) if (score=90) printf(“Your result is an An”);else if (score=80) printf(“Your result is an Bn”);else if (score=70) printf(“Your result is an Cn”);else if (s
13、core=60) printf(“Your result is an Dn”);else printf(“Your result is an En”); 執(zhí) 行 上 面 語 句 后 , 能 夠 根 據(jù) 分 數(shù) score分 別 打 出 A、 B、 C、 D、 E五 個 等 級 。 switch/case語 句 if語 句 通 過 嵌 套 可 以 實 現(xiàn) 多 分 支 結(jié) 構(gòu) , 但 結(jié) 構(gòu) 復(fù) 雜 。 switch是 C51中提 供 的 專 門 處 理 多 分 支 結(jié) 構(gòu) 的 多 分 支 選 擇 語 句 。 它 的 格 式 如 下 :switch ( 表 達 式 )case 常 量 表 達 式
14、1: 語 句 1; break;case 常 量 表 達 式 2: 語 句 2; break;case 常 量 表 達 式 n: 語 句 n; break;default: 語 句 n+1; 說 明 如 下 :( 1) switch后 面 括 號 內(nèi) 的 表 達 式 , 可 以 是 整 型 或 字 符 型 表 達 式 。( 2) 當(dāng) 該 表 達 式 的 值 與 某 一 “ case”后 面 的 常 量 表 達 式 的 值 相 等 時 , 就 執(zhí) 行 該“ case”后 面 的 語 句 , 然 后 遇 到 break語 句 退 出 switch語 句 。 若 表 達 式 的 值 與 所 有cas
15、e后 的 常 量 表 達 式 的 值 都 不 相 同 , 則 執(zhí) 行 default后 面 的 語 句 , 然 后 退 出 switch結(jié) 構(gòu) 。( 3) 每 一 個 case常 量 表 達 式 的 值 必 須 不 同 否 則 會 出 現(xiàn) 自 相 矛 盾 的 現(xiàn) 象 。( 4) case語 句 和 default語 句 的 出 現(xiàn) 次 序 對 執(zhí) 行 過 程 沒 有 影 響 。( 5) 每 個 case語 句 后 面 可 以 有 “ break”, 也 可 以 沒 有 。 有 break語 句 , 執(zhí) 行 到break則 退 出 switch結(jié) 構(gòu) , 若 沒 有 , 則 會 順 次 執(zhí) 行
16、后 面 的 語 句 , 直 到 遇 到 break或 結(jié)束 。( 6) 每 一 個 case語 句 后 面 可 以 帶 一 個 語 句 , 也 可 以 帶 多 個 語 句 , 還 可 以 不 帶 。語 句 可 以 用 花 括 號 括 起 , 也 可 以 不 括 。( 7) 多 個 case可 以 共 用 一 組 執(zhí) 行 語 句 。 【 例 】 switch/case語 句 的 用 法 。 對 學(xué) 生 成 績 劃 分 為 AD, 對 應(yīng) 不 同 的 百 分 制 分 數(shù) , 要 求 根 據(jù) 不同 的 等 級 打 印 出 它 的 對 應(yīng) 百 分 數(shù) 。 可 以 通 過 下 面 的 switch/case語 句實 現(xiàn) 。switch( grade)case A; printf( ” 90100n”) ; break;case B; printf( ” 8090n”) ; break;case C; printf( ” 7080n”) ; break;case D; printf( ” 6070n”) ; break;case E; printf( ” 60n”) ; break;default; printf( ” error”n)