freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內容

畢業(yè)論文-基于at89c51單片機的電話撥號系統(tǒng)的設計(編輯修改稿)

2024-07-12 10:47 本頁面
 

【文章內容簡介】 AM 地址設置。 指令 8: DDRAM 地址設置。 指令 9:讀忙信號和光標地址 BF:為忙標志位,高電平表示忙,此時模塊不能接收命令或者數(shù)據(jù),如果為低電平表示不忙。 指令 10:寫數(shù)據(jù)。 指令 11:讀數(shù)據(jù)。 1602LCD 的 RAM 地址映射及標準字庫表 液晶顯示模塊是一個慢顯示器件,所以在執(zhí)行每條指令前一定要確認模塊的忙標志為低電平,表示不忙,否則此指令失效。要顯示字符時要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符,圖 是 1602 的內部顯示地址。 圖 1602LCD 內部顯示地址 例如第二行第一個字符的地址是 40H,那么是否直接寫入 40H就可以將光標定位在第二行第一個蘭州工業(yè)學院畢業(yè)設計說明書(論文) 8 字符的位置呢?這樣不行,因為寫入顯示地址時要求最高位 D7 恒定為高電平 1所以實際寫入的數(shù)據(jù)應該是 01000000B( 40H) +10000000B (80H) =11000000B (C0H) 。 在對液晶模塊的初始化中要先設置其顯示模式,在液晶模塊顯示字符時光標是自動右移的,無需人工干預。每次輸入指令前都要判斷液晶模塊是否處于忙的狀態(tài)。 1602 液晶模塊內部的字符發(fā)生存儲器( CGROM)已經(jīng)存儲了 160 個不同的點陣字符圖形,這些字符有:阿拉伯數(shù)字、英文字母的大小寫、常用的符號、和日文假名等,每一個字符都有一個固定的代碼,比如大寫的英文字母“ A”的代碼是 01000001B( 41H),顯示時模塊把地址 41H中的點陣字符圖形顯示出來,我們就能看到字母“ A”。其中字符代碼與字符圖形對應關系如圖 所示。 圖 字符代碼與字符圖形對應關系 1602LCD 的一般初始化過程 延時 15mS 寫指令 38H(不檢測忙信號) 延時 5mS 寫指令 38H(不檢測忙信號) 延時 5mS 寫指令 38H(不檢測 忙信號) 以后每次寫指令、讀 /寫數(shù)據(jù)操作均需要檢測忙信號 寫指令 38H:顯示模式設置 寫指令 08H:顯示關閉 寫指令 01H:顯示清屏 蘭州工業(yè)學院畢業(yè)設計說明書(論文) 9 寫指令 06H:顯示光標移動設置 寫指令 0CH:顯示開及光標設置 矩陣鍵盤輸入電路模塊 矩陣鍵盤的基本結構 矩陣鍵盤中的鍵實際上就是一個機械開關,位于行線和列線的交點處,圖 所示為本設計中使用的 4 行 3 列的 12 鍵矩陣鍵盤,當鍵被按下時,其交點的行線和列線接通,使相應行線或列線上的電平發(fā)生變化,根據(jù)電平變化情況確定被按下的鍵。 圖 鍵盤排列圖 矩陣 鍵盤的按鍵識別方法 常用的鍵盤識別方法有:行掃描法,線翻轉法和利用 8279 鍵盤接口的中斷法。前兩種方法相當于查詢法,需要反復查詢按鍵的狀態(tài),會占用大量的 CPU 時間。后一種方法在有鍵按下時向 CPU申請中斷,平時并不需要占用 CPU 時間。在本系統(tǒng)中,完全可以不使用中斷法完成 鍵盤接口,這是由系統(tǒng)的特殊性決定的。首先,對于本系統(tǒng)而言,要實現(xiàn)便攜式的設計,硬件電路使用的器件越少越好。其次,被測信號由外中斷引腳輸入,未占用單片機 4 個并行 I/O 口中的任何一個,系統(tǒng)有足夠的資源利用自身 I/O 口完成接口。最后,只有當傳感器輸出信號頻率為空載頻率,系統(tǒng)處于空閑待測的狀態(tài)下,才允許鍵盤輸入,因此鍵盤識別占用的 CPU 時間不會對系統(tǒng)正常工作造成影響。因此直接利用單片機并行接口完成鍵盤的接口,采用行掃描法進行鍵盤識別。 行掃描法又稱為逐行(或列)掃描查詢法,是一種最常用的按鍵識別方法,如圖 所示鍵盤 。 圖 鍵盤原理圖 ( 1)判斷鍵盤上是否有鍵閉合 將全部行線置低電平,然后檢測列線的狀態(tài)。只要有一列的電平為低,則表示鍵盤中有鍵被按下,而且閉合的鍵位于低電平線與 4 根行線相交叉的 4 個按鍵之中。若所有列線均為高電平,則鍵盤中無鍵按下。 ( 2)去除鍵的機械抖動 為保證鍵的正確識別,需要進行去抖動處理。其方法是得知鍵盤上有鍵閉合后延遲一段時間,再判別鍵盤的狀態(tài),若仍有鍵閉合,則認為鍵盤上有一個鍵處于穩(wěn)定的閉合期,否則認為是鍵的抖動或者是干擾。 ( 3)確定閉合鍵的物理位置 在確認有鍵按下后 , 即可進入確 定具體閉合鍵的過程。其方法是:依次將行線置為低電平,即在1 2 34 5 67 8 90 1 2 3ABCD蘭州工業(yè)學院畢業(yè)設計說明書(論文) 10 置某根行線為低電平時,其它線為高電平。在確定某根行線位置為低電平后,再逐行檢測各列線的電平狀態(tài)。若某列為低,則該列線與置為低電平的行線交叉處的按鍵就是閉合的按鍵。 ( 4)得到閉合鍵的編號 在得到閉合鍵的物理位置的基礎上,根據(jù)給定的按鍵編號規(guī)律,計算得出閉合鍵的編號。 ( 5)確保 CPU 對鍵的一次閉合僅做一次處理 為實現(xiàn)這一功能,可以采用等待閉合鍵釋放以后在處理的方法。 4 系統(tǒng)軟件設計 C51 單片機可以應用匯編語言和 C 語言進行編程。匯編語言與機器指令一一對應,所以用匯編語言編寫的程序在單片機里運行起來效率較高,但可移植性差。 C 語言程序可讀性高,也便于移植到其它系統(tǒng)中,故本次設計使用 C 語言編程。 程序設計整體思路 本 設計是由單片機控制的 LCD 顯示系統(tǒng),另外 鍵盤 來控制顯示的方式。 用 P3 口作為鍵盤的輸入端, 對于 按鍵的識別方式 可以是中斷也可以是查詢,在此設計中所選用的 是行掃描法進行鍵盤識別 。 用 P0 口作為 LCD 的顯示控制端 , 由于此 LCD 的顯示屏被分為了兩部分,所以應該對 LCD顯示位置進行設置 。由此 LCD的顯示時序可知, 在 顯示過程中還需要一定的延時并且在顯示前需將一些特定的控制端置相應的電平,所以還需要一個適當?shù)难訒r子程序以及輸入數(shù)據(jù)前的準備程序。除了這些外,還應寫一個初始化程序,用來對 LCD 進行 初始化 設置 。 最后就是主函數(shù),它的主要功能就是判斷 鍵盤上 是否 有按鍵閉合 , 若有按鍵閉合 ,然后根據(jù) 按下的 是 哪一個鍵 來執(zhí)行相應的程序,選擇相應的顯示方式。 系統(tǒng)功能設計框圖如圖 所示。 圖 系統(tǒng)功能設計框圖 系統(tǒng)主程序設計流程圖如圖 ,其源代碼見附件 1。 鍵盤掃描模塊 聲音控制模塊 顯示模塊 初始化模塊 LCD 初始化 設置 LCD 第一行顯 示 鍵盤掃描 是否有鍵下? T0 中斷控制按鍵聲音 *鍵按鍵按下? 開始 退格 清屏 是 否 是 否 是 蘭州工業(yè)學院畢業(yè)設計說明書(論文) 11 否 圖 系統(tǒng)主程序設計流程圖 系統(tǒng)第一次上電后,先進行初始化,初始化 LCD 模塊,設置 LCD 中各個部分的顯示內容,然后進行鍵盤掃描,獲取按鍵,以及根據(jù)各按鍵的不同執(zhí)行相應的操作,最后等待釋放,釋放之后再進行鍵盤掃描,循環(huán)以上操作。 鍵盤掃描模塊設計 鍵盤上有很多鍵,每一個鍵對應一個鍵碼,以便根據(jù)鍵碼轉到相應的鍵處理子程序,進一步實現(xiàn)數(shù)據(jù)輸入和命令處理的功能。 鍵盤掃描子程序設計流程圖如圖 所示, 其源代碼見附件 1。 圖 鍵盤掃描模塊程序流程圖 下面給出一個具體的例子解釋圖 的流程。 如圖 所示, AT89C51 單片機的 P3 口用作鍵盤 I/O 口,鍵盤的列線接到 P3 口的低 4 位,鍵盤的行線接到 P3口的高 4位。列線 4個上拉電阻到正電源 +5V,并把列線 設置為輸入線,行線 設置為輸出線。 4 根行線和 4 根列線形成 16 個相交點。 ( 1)檢測當前是否有鍵被按下。檢測的方法是 輸出全“ 0”,讀取 的狀態(tài),若 為全“ 1”,則無鍵閉合,否則有鍵閉合。 ( 2)去除鍵抖動。當檢測到有鍵按下后,延時一段時間再做下一步的檢測判斷。 ( 3)若有鍵被按下,應識別出是哪一個鍵閉合。方法是對鍵盤的行線進行掃描。 按下述 4 種組合依次輸出如表 所示。 表 鍵盤掃描 I/O 口 高低電平 (0 或 1) 1 1 1 0 1 1 0 1 顯示數(shù)字 結束 否 是 計算鍵碼 等待釋放 否 消除抖動 超過 11位 ? 蘭州工業(yè)學院畢業(yè)設計說明書(論文) 12 1 0 1 1 0 1 1 1 ( 4)在每組行輸出時讀取 ,若全為“ 1”,則表示為“ 0”這一行沒有鍵閉合,否則有鍵閉合。由此得到閉合鍵的行值和列值,然后可采用計算法或查表法將閉合鍵的行值和列值轉換成所定義的鍵值。鍵盤掃描主要代碼如下: uchar GetKey () { uchar i, j, k = 0。 uchar KeyScanCode [] = {0xEF, 0xDF, 0xBF, 0x7F}。 //鍵盤掃描碼 uchar KeyCodeTable[] ={0xEE,0xED,0xEB,0xDE,0xDD,0xDB, 0xBE,0xBD,0xBB,0x7E,0x7D,0x7B}。 //鍵盤特征碼 P3 = 0x0F。//掃描鍵盤獲取按鍵序號 if (P3! = 0x0F) DelayMS(20)。//延時去機械抖動 if (P3! = 0x0F) { for (i = 0。 i 4。i++) { P3 = KeyScanCode[i]。 for (j = 0。j 3。j++) { k = i * 3 + j。 if (P3 == KeyCodeTable[k]) return k。} } } else return 0xFF。 } // LCD 顯示模塊設計 LCD LM016L 的顯示函數(shù)很簡單,只要按照時序圖操作,結合相關指令集,寫好 LCD 初始化程序,清屏程序,寫指令程序,寫數(shù)據(jù)程序,讀數(shù)據(jù)程序等一系列驅動程序,可完成 LCD 的所有顯示需要。在本設計中,由于要顯示的內容比較多,且有些需重 復顯示,有些只要顯示一次,故只畫液晶顯示的基本流程。 LCD 顯示模塊流程如圖 所示, 其源代碼見附件 1。 圖 LCD 顯示模塊流程圖 LCD 初始化 顯示 發(fā)出數(shù)據(jù) 延時 寫 LCD 命令 延時 開始 蘭州工業(yè)學院畢業(yè)設計說明書(論文) 13 include define uchar unsigned char define uint unsigned int define DelayNOPx() {_nop_()。_nop_()。_nop_()。_nop_()。} sbit BEEP = P1^0。 sbit RS = P2^0。 sbit RW = P2^1。 sbit E = P2^2。 void DelayMS (uint ms)。 //聲明延時函數(shù) bit LCD_Busy ()。 void LCD_Pos (uchar)。 void LCD_Wcmd (uchar)。 void LCD_Wdat (uchar)。 // // 標題字符串 char code Title_Text[] = { Phone Code }。 // 鍵盤序號與鍵盤符號映射表 uchar code Key_Table[]={39。139。,39。239。,39。339。,39。439。,39。539。,39。639。,39。739。,39。839。,39。939。,39。*39。,39。039。,39。39。}。 // 鍵盤撥號數(shù)字緩沖 uchar Dial_Code_Str[] = { }。 uchar KeyNo = 0xFF。 int tCount = 0。 // // 延時 // void DelayMS (uint x) { uchar i。 while(x) for (i = 0。i 120。 i++)。 } // // 在 LC
點擊復制文檔內容
畢業(yè)設計相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1