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

正文內(nèi)容

利用單片機分時電價系統(tǒng)設計-文庫吧資料

2025-05-27 16:18本頁面
  

【正文】 。只能將第四個字和第 8 個字各少 3 個像素。但是比較郁悶的是,如果要完全以 1616 像素顯示 8 個字,那么至少 12816 個像素,這個模塊一行只有 122 個像素,哭。 LCD 為 FM12232A 液晶顯示模塊,共12232 個像素。 1000 行為程序代碼。 關(guān)于這個開發(fā)板的硬件呢, CPU 是 SST 的 89C58, 256B 可用內(nèi)存(喜歡), 32KB的 FlashROM(喜歡),時鐘為 33MHz。 眾友開發(fā)箱附帶的使用手冊也令人很無語,居然只有薄薄的 58 頁,還沒有我的設計報告長,國產(chǎn)產(chǎn)品的通病。但是,這 3 個資料中,任意兩個對 LCD 引腳連線方法的說明都不同。只能參考實驗箱的使用手冊。但是問題并不是沒有。最后發(fā)現(xiàn)儀器裝作可以正常工作的樣子欺騙我們,那時真想撲上去咬它。 我可以容忍設計中出任何問題,但是不能容忍實驗室的儀器出一點點問題。因為實際上只有 包含了 。然后修改了代碼,將 文 件 中 所 有 的 變 量 定 義 都 包 含 在 預 處 理 指 令 ifndef CHARACTERLIB_H define CHARACTERLIB_H …endif 中,但是在 Keil C51 版本中仍然會產(chǎn)生錯誤。但是鏈接時產(chǎn)生錯誤,連接器抱怨說字庫公開變量被多次定義。 編譯器對預編譯指令未正確解釋:本系統(tǒng)程序設計時,由于 字庫比較大,所以最初是將字庫定義在一個頭文件 中,與主程序隔離。實驗室安裝的為 Keil C51 版,在鏈接時無法通過,提示大堆的符號未定義。在編譯器中設置好相關(guān)選項并進行編譯。 編譯器匯編語言與 C 語言交叉編譯不完善:在本系統(tǒng)程序設計中,在某些位置需要用到匯編中的一條 nop 指令,由于 C 語言中并無與此功能相近的語句,所以我們求助于 C51 中的 C 語言與匯編語言的交叉 編譯。本系統(tǒng)中使用的是 89C58 最小系統(tǒng)方式,默認情況下變量會存放到系統(tǒng)的data 段,由于 data 段只有 128 個字節(jié),而且還有寄存器組和位尋址區(qū),難以容納所有的變量。但是鏈接時發(fā)生錯誤,提示 data 段溢出。將 KeyBoard 函數(shù)使用的寄存器組改為0 組,錯誤消失。 main 使用的寄存器組為第 0 組, KeyBoard使用第 2 組。開始時以為是在傳遞參數(shù)時指針出錯,后來使用斷點調(diào)試時才發(fā)現(xiàn), DisplayALine 在顯示下半行調(diào)用DisplaySelected 函數(shù)時,列 Column 的實際值都為 0,所以所有的字符的下半行都送到第一個字符下面去顯示。 main 中的調(diào)用可以正常工作,將字符串顯示在 LCD 上,但是 KeyBoard 函數(shù)中則只能顯示 字符串的上半行,下半行的字總是顯示在 LCD 的最左邊,從而造成這樣一些亂碼。但是在調(diào)試中發(fā)生了一個錯誤?,F(xiàn)將各種問題一一描述: 中斷函數(shù)寄存器組使用不當:程序中有 3 個中斷函數(shù),在最初每個中斷函數(shù)使用的寄存器組都不相同,本意是為了提高寄存器的利用效率。由于我以前都是為 Intel 80586 以上,安裝 windows 操作系統(tǒng)的 PC 寫 C 語言的應用程序。 在設計本系統(tǒng)之前,為單片機編寫的程序都是較小的程序,一直用匯編語言寫。 六、總結(jié) 這個系統(tǒng)是我所設計過的最為復雜的一個系統(tǒng),雖然硬件部分比較簡單,但是這個系統(tǒng)的軟件完全是在我已經(jīng)純熟的 C 語言編程技巧的基礎上開發(fā)的,除了為了了 解某些硬件的命令字查看過示例程序外,其他的程序完全是自己開發(fā)的,沒有參考、抄襲其他任何論文、報告。此待機畫面用于向用戶提示鍵盤上各個按鍵的功能。 兩個提示函數(shù) ShowDefault 和 ShowError 用于顯示必要的提示信息。DisplayALine 函數(shù)用來向其他需要顯示的函數(shù)提供服務。由于 LCD 最多可以顯示 8 個 1616的字符。 位于 LCD 顯示驅(qū)動最高層,即 “顯示服務提供層 ”的函數(shù)只有一個,即DisplayALine,此函數(shù)是基于 DisplayAtRow 函數(shù)的封裝。對于位于第 1 顯示行的字符,將字符的上半數(shù)據(jù)調(diào)用 DisplaySelected 函數(shù)送到第 2 頁顯示,將 字符的下半 數(shù)據(jù)調(diào)用DisplaySelected 函數(shù)送到第 3 頁顯示。 DisplayAtRow 函數(shù)將整個 LCD分成了兩個顯示行,每個顯示行包含 2 個頁 , 16 個像素行,可以顯示一個完整的字符。 DisplayAtRow 函數(shù)是對 DisplaySelected 函數(shù)的進一步封裝,此函數(shù)的意圖是掩蓋頁的跨越,使之能夠以一個函數(shù)在 LCD 上顯示一個完整的、共 32 字節(jié)數(shù)據(jù)表示的字符。在函數(shù)中會對輸入的列參數(shù)進行判斷,小于 0x40 的列,函數(shù)會調(diào)用 Display_Left 函數(shù)顯示 ,大于或者等于 0x40 的列,函數(shù)會調(diào)用 Display_Right 函數(shù)顯示。 LCD 顯示屏共 32 行,分為 4 頁,每頁 8 行,由于一個字高為 16個像素,所以這個性質(zhì)限制了 DisplaySelected 函數(shù)只能顯示半個字。它們使用低層的 SendCommandToLCD 等 3 個函數(shù)完成顯示數(shù)據(jù)的功能。 本系統(tǒng)的 LCD 顯示時一個字符占用 1616 個象素的顯示單元,即其一個字符的顯示數(shù)據(jù)為 32 個字節(jié)。 Display_Right 函數(shù)能向 LCD 的第二塊驅(qū)動芯片內(nèi)寫入一個字節(jié)的顯示數(shù)據(jù),表現(xiàn)為在 LCD 的右半部分顯示字符。其參數(shù)為要發(fā)送的命令字。這一部分的編程模型如下圖所示: LCD 部分的實現(xiàn)與此模型相對應、 SendCommandToLCD、 Display_Left 和Display_Right 函數(shù)位于此模型中的 “LCD驅(qū)動層 ”中,這 3 個函數(shù)直接接觸硬件,所有有關(guān)顯示的調(diào)用都是基于這 3 個函數(shù)之上。 Display_All 函數(shù)用于系統(tǒng)啟動時清屏,不用作其他用途,其他任何函數(shù)都不應該調(diào)用。 void DisplayAtRow(uchar row,uchar column,uchar mdata[32])。 void Display_All(uchar mdata)。 void Display_Left(uchar mdata)。以備下一次設置。然后將轉(zhuǎn)化后的數(shù)值設為相應變量的當前值。輸入小數(shù)點用按鍵 D 代替,輸入結(jié)束用按鍵 E 代替。ShowHighFee 一組函數(shù)在顯示時,由于內(nèi)部變量為 float 型,在 LCD 上顯示時比較困難,而且在計算電費時按照整數(shù)結(jié)算也是比較容易接受的選擇,所以在實現(xiàn)時首先利用標準庫中的 ceil()函數(shù)將 float 取整,然后再轉(zhuǎn)化為整型數(shù)字顯示 SetHighFee、 SetLowFee、 SetRotateSpeed、 SetHighStart、和 SetHighEnd、SetLowStart、 SetLowEnd 函數(shù)用于設置 initset 結(jié)構(gòu)定義的電價、轉(zhuǎn)數(shù)、高峰時段、低谷時段等變量。 ShowHighCoulometer, ShowLowCoulometer, ShowAllCoulometer 和 ShowHighFee、ShowLowFee、 ShowAllFee 兩組函數(shù)用于顯示 coulometer 和 fee 結(jié)構(gòu)的變量中保存的高峰用電量、低谷用電量、總用電 量和高峰電費、低谷電費、總電費的數(shù)值。當下次按下按鍵時,由于 WhichFunctionKey 已被標記,會轉(zhuǎn)到相應的設置函數(shù)執(zhí)行。按下 C 鍵時為復位語句,直接調(diào)用 Clear()函數(shù)。如果 WhichFunctionKey 未被標記,則進入標準狀態(tài)的按鍵處理過程,此過程通過一個 switch 語句決定不同的執(zhí)行方式。 float ArrayToDigitalF(uchar Array[8],uchar length)。 void ArrayToCharacters(uchar message[8],uchar display[8][32],uchar length)。 void SetLowEnd(uchar key)。 void SetHighEnd(uchar key)。 void SetRotateSpeed(uchar key)。 void SetHighFee(uchar key)。 void Clear(void)。 void ShowLowFee(void)。 void ShowAllCoulometer(void)。 void ShowHighCoulometer(void)。 void DogSniffer(void) interrupt 1 using 0。 以下是鍵盤模塊程序中使用的函數(shù)列表,其中 NumsToArray 等四個輔助算法函數(shù)在第二部分,系統(tǒng)整體設計中已經(jīng)詳細描述,這里不在說明。并且不在向 T0 送入定時初值。則 DogSniffer 使功能鍵標志復位。當 T0 每 65ms 定時中斷一次。 鍵盤模塊程序的設計:鍵盤模塊包含兩個中斷函數(shù), KeyBoard 和 DogSniffer,KeyBoard 函數(shù)用于處理鍵盤按鍵事件,每次鍵盤按鍵中斷, KeyBoad 函數(shù)會檢查按鍵的鍵值,根據(jù)不同的鍵值調(diào)用不同的功能函數(shù)。 Init_8255andLCD()將 8255 的 A、 B、 C 口配置成方式 0 輸出 模式。 全局函數(shù) Init_CPU() 和 Init_8255andLCD()用來對 CPU和液晶顯示模塊進行初始化。 CommandPortOf8279 為鍵盤控制芯片 8279的命令口地址, DataOf8279 定義為 8279 數(shù)據(jù)口的地址。 在程序中由于要用到外部存儲器或者 IO 端口的直接地址,所以利用 Keil C51 中絕對定址關(guān)鍵字 _at_定義了各種外部端口和 IO 端口的地址。 fee 結(jié)構(gòu)記錄當前使用的電費,包括高峰時段使用電量的電費,低谷時段使用電量的電費和使用的總電費。 coulometer 結(jié)構(gòu)定義電能表在高峰時段使用的電量、低谷時段使用的電量和使用的總電量。鍵盤模塊有修改這些變量的功能,以使智能電表系統(tǒng)可以適應不同環(huán)境。
點擊復制文檔內(nèi)容
研究報告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1