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

正文內容

利用單片機分時電價系統(tǒng)設計(編輯修改稿)

2025-07-01 16:18 本頁面
 

【文章內容簡介】 隱藏了一個列實現(xiàn)的細節(jié), LCD 由兩塊顯示芯片控制,每一塊控制 61 列,即 0~ 60列為第一塊芯片控制,要用 Display_Left 函數(shù)顯示 ,第二塊控制 61~121 列,要用Display_Right 函數(shù)顯示,而此函數(shù)可以接受的列為 0~ 0x7F。在函數(shù)中會對輸入的列參數(shù)進行判斷,小于 0x40 的列,函數(shù)會調用 Display_Left 函數(shù)顯示 ,大于或者等于 0x40 的列,函數(shù)會調用 Display_Right 函數(shù)顯示。這樣就完成了列的平滑顯示。 DisplayAtRow 函數(shù)是對 DisplaySelected 函數(shù)的進一步封裝,此函數(shù)的意圖是掩蓋頁的跨越,使之能夠以一個函數(shù)在 LCD 上顯示一個完整的、共 32 字節(jié)數(shù)據(jù)表示的字符。由于 DisplaySelected 函數(shù)已經掩蓋了列的跨越,所以 DisplayAtRow的列參數(shù)就直接傳遞給了 DisplaySelected 函數(shù)。 DisplayAtRow 函數(shù)將整個 LCD分成了兩個顯示行,每個顯示行包含 2 個頁 , 16 個像素行,可以顯示一個完整的字符。其實現(xiàn)原理是對于位于第 0 顯示行的字符,調用 2 次 DisplaySelected函數(shù),將字符的上半數(shù)據(jù)送到第 0 頁顯示,將字符的下半數(shù)據(jù)送到第 1 頁顯示,這樣就完成了整個字符的顯示。對于位于第 1 顯示行的字符,將字符的上半數(shù)據(jù)調用 DisplaySelected 函數(shù)送到第 2 頁顯示,將 字符的下半 數(shù)據(jù)調用DisplaySelected 函數(shù)送到第 3 頁顯示。這樣就完成了頁跨越的掩蓋。 位于 LCD 顯示驅動最高層,即 “顯示服務提供層 ”的函數(shù)只有一個,即DisplayALine,此函數(shù)是基于 DisplayAtRow 函數(shù)的封裝。由于 DisplayAtRow 函數(shù)可以在指定位置顯示一個字符,基于這種能力派生的 DisplayALine 函數(shù)的功能就是將一行字符顯示在某一個顯示行上。由于 LCD 最多可以顯示 8 個 1616的字符。所以 DisplayALine 函數(shù)顯示字符串的最大字符限制也為 8 個字符。DisplayALine 函數(shù)用來向其他需要顯示的函數(shù)提供服務。一個需要進行顯示的函數(shù)將它要進行顯示的數(shù)據(jù)通過查表或者其他途徑轉換為 LCD 顯示的顯示碼,然后將顯示碼保存在一個 832 的數(shù)組中傳遞給 DisplayALine 函數(shù),然后DisplayALine 函數(shù)將數(shù)組中的數(shù)據(jù)全部送入某行進行顯示。 兩個提示函數(shù) ShowDefault 和 ShowError 用于顯示必要的提示信息。 ShowDefault函數(shù)設計成一個死循環(huán),用于顯示系統(tǒng)的待機畫面。此待機畫面用于向用戶提示鍵盤上各個按鍵的功能。 ShowError 函數(shù)在用戶操作出錯時向用戶顯示一個出錯提示,以便防止用戶誤操作。 六、總結 這個系統(tǒng)是我所設計過的最為復雜的一個系統(tǒng),雖然硬件部分比較簡單,但是這個系統(tǒng)的軟件完全是在我已經純熟的 C 語言編程技巧的基礎上開發(fā)的,除了為了了 解某些硬件的命令字查看過示例程序外,其他的程序完全是自己開發(fā)的,沒有參考、抄襲其他任何論文、報告。通過這個系統(tǒng)的設計,我對 Keil C51 的語法,開發(fā)方法有了較深的認識,可以肯定的說,如果有第二次機會開發(fā)這樣的系統(tǒng),那么,在系統(tǒng)控制程序上所犯的錯誤,將會大大減少。 在設計本系統(tǒng)之前,為單片機編寫的程序都是較小的程序,一直用匯編語言寫。本系統(tǒng)的復雜性使匯編語言程序不利于編寫和閱讀,所以采用 C 語言編寫。由于我以前都是為 Intel 80586 以上,安裝 windows 操作系統(tǒng)的 PC 寫 C 語言的應用程序。所以雖然程序完 全符合標準 C 語言的要求,但是由于硬件平臺的不同,還是出現(xiàn)了很多問題。現(xiàn)將各種問題一一描述: 中斷函數(shù)寄存器組使用不當:程序中有 3 個中斷函數(shù),在最初每個中斷函數(shù)使用的寄存器組都不相同,本意是為了提高寄存器的利用效率。定義偵探狗中斷 T0 使用寄存器組 1,鍵盤中斷使用寄存器組 2,電量中斷使用寄存器組 3。但是在調試中發(fā)生了一個錯誤。 main 函數(shù)和 KeyBoard 函數(shù)中都調用了DisplayALine 函數(shù)顯示一個字符串。 main 中的調用可以正常工作,將字符串顯示在 LCD 上,但是 KeyBoard 函數(shù)中則只能顯示 字符串的上半行,下半行的字總是顯示在 LCD 的最左邊,從而造成這樣一些亂碼。這個問題對我們造成了相當?shù)睦_,因為 main 和 KeyBoard 調用的是同一個函數(shù)。開始時以為是在傳遞參數(shù)時指針出錯,后來使用斷點調試時才發(fā)現(xiàn), DisplayALine 在顯示下半行調用DisplaySelected 函數(shù)時,列 Column 的實際值都為 0,所以所有的字符的下半行都送到第一個字符下面去顯示。其后分析認為,產生的錯誤中,最大的不同是調用 DisplayALine 函數(shù)的位置不同,即一個在 mian 中,另一個在 KeyBoard 中,它們兩 個函數(shù)使用了不同的寄存器組。 main 使用的寄存器組為第 0 組, KeyBoard使用第 2 組。由于 DisplayALine 函數(shù)的參數(shù)是通過寄存器組來傳遞的,所以推斷使用其他的寄存器組會導致顯示錯誤。將 KeyBoard 函數(shù)使用的寄存器組改為0 組,錯誤消失。 數(shù)據(jù)段溢出錯誤:在最初的程序中,除了字庫外,全局變量、靜態(tài)變量都按照標準 C 語言方式默認定義,沒有考慮到存儲位置的問題。但是鏈接時發(fā)生錯誤,提示 data 段溢出。最初不明所以,其后查看 C51 的幫助文檔時看到,如果不顯式說明變量的存儲位置,則變量會根據(jù)系統(tǒng)模 式的設置存放到默認的數(shù)據(jù)區(qū)。本系統(tǒng)中使用的是 89C58 最小系統(tǒng)方式,默認情況下變量會存放到系統(tǒng)的data 段,由于 data 段只有 128 個字節(jié),而且還有寄存器組和位尋址區(qū),難以容納所有的變量。了解到這些以后,將所有的全局變量和靜態(tài)變量都顯式聲明到 idata段, idata 段為 256 字節(jié),足以容納這些變量,問題得意解決。 編譯器匯編語言與 C 語言交叉編譯不完善:在本系統(tǒng)程序設計中,在某些位置需要用到匯編中的一條 nop 指令,由于 C 語言中并無與此功能相近的語句,所以我們求助于 C51 中的 C 語言與匯編語言的交叉 編譯。即在相應位置加入pragma asm nop pragma endasm 匯編指令,執(zhí)行空指令。在編譯器中設置好相關選項并進行編譯。在我的電腦上安裝有 Keil C51 試用版,利用此版本進行編譯、鏈接通過,但是使用版有代碼大小限制,無法生成執(zhí)行文件。實驗室安裝的為 Keil C51 版,在鏈接時無法通過,提示大堆的符號未定義。由于編譯器版本老舊的問題,為了生成執(zhí)行文件,只能將相應位置的匯編指令去除或者用與之近似的 C 語句代替。 編譯器對預編譯指令未正確解釋:本系統(tǒng)程序設計時,由于 字庫比較大,所以最初是將字庫定義在一個頭文件 中,與主程序隔離。這樣的話,修改和閱讀都比較方便。但是鏈接時產生錯誤,連接器抱怨說字庫公開變量被多次定義。推斷應該是頭文件被多個模塊包含產生了錯誤。然后修改了代碼,將 文 件 中 所 有 的 變 量 定 義 都 包 含 在 預 處 理 指 令 ifndef CHARACTERLIB_H define CHARACTERLIB_H …endif 中,但是在 Keil C51 版本中仍然會產生錯誤。如果換用 Keil C51 版本,則在頭文 件中不加預編譯指令也不會報錯。因為實際上只有 包含了 。最后,只能將字庫定義全部從 中移到 中,問題解決。 我可以容忍設計中出任何問題,但是不能容忍實驗室的儀器出一點點問題。這是第一次課程設計時留下的痛苦回憶,設計的完全正確,但是結果完全錯誤。最后發(fā)現(xiàn)儀器裝作可以正常工作的樣子欺騙我們,那時真想撲上去咬它。這次使用的是湖北眾友的單片機開發(fā)實驗箱,總算是正常工作(并不是每個人的都正常工作,汗)。但是問題并不是沒有。由于設計的系統(tǒng)中要用到一 個 LCD 顯示模塊,而這個模塊是國產的模塊,除了廠家外,并沒有標準使用說明書。只能參考實驗箱的使用手冊。在這個手冊上提供了 3 個關于 LCD 的信息,一個是 Protel 畫的實驗箱的 LCD 部分電路圖,一個是手冊上的 LCD 連線示例圖,還有一個是 LCD 模塊引腳說明表。但是,這 3 個資料中,任意兩個對 LCD 引腳連線方法的說明都不同。 真是很無語,幸好這個問題只影響 PCB 電路圖的繪制,對于編程沒有影響,暫時將其忽略了。 眾友開發(fā)箱附帶的使用手冊也令人很無語,居然只有薄薄的 58 頁,還沒有我的設計報告長,國產產品的通病。幸好上面 的電路圖和隨機附帶的程序源碼都還實用,不然的話。 關于這個開發(fā)板的硬件呢, CPU 是 SST 的 89C58, 256B 可用內存(喜歡), 32KB的 FlashROM(喜歡),時鐘為 33MHz。此單片機帶的 32KB 的 FlashROM 幫了大忙,我的設計中程序共 20xx 多行, 1000 行為字庫,一半存放于外部 RAM,一半存放于 ROM 中。 1000 行為程序代碼。這樣加起來,代碼大小為 15KB,要不是他的 ROM 足夠大,還真的放不下。 LCD 為 FM12232A 液晶顯示模塊,共12232 個像素。以 1616 的像素顯示一個字的話 ,這個模塊可以勉強顯示 2 行,每行 8 個字。但是比較郁悶的是,如果要完全以 1616 像素顯示 8 個字,那么至少 12816 個像素,這個模塊一行只有 122 個像素,哭。既然要顯示漢字,為什么不用 12832 的啊,用 122 顯 8 個漢字就會少 6 個像素,無語。只能將第四個字和第 8 個字各少 3 個像素。雖然肉眼不仔細看的話是看不出來的,總覺得不爽之至。還用到一個鍵盤,由 Intel 8279 和 16 鍵的鍵盤組成。這個 8279, Intel 官方出的使用手冊共 16 頁,贊,看人家的資料就是詳細。自認為英文閱讀還不錯的我,(平時編程都是直接查 MSDN 的英文文檔練出來的,全英文的芯片手冊也看過不少)
點擊復制文檔內容
研究報告相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1