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

正文內(nèi)容

利用單片機(jī)分時(shí)電價(jià)系統(tǒng)設(shè)計(jì)-wenkub

2023-05-24 16:18:02 本頁(yè)面
 

【正文】 gSniffer, DogSniffer 函數(shù)判斷功能鍵標(biāo)志是否被標(biāo)記,如果功能鍵標(biāo)志被標(biāo)記,而且按鍵時(shí)間超過(guò) T0 的 100 次計(jì)數(shù),即 。打開 LCD 顯示并清屏。 CommandPortOf8255 定義為 LCD 接口芯片 8255 的控制口地址, APortOf8255 定義為 8255 的 A 口地址,CPortOf8255 定義為 8255 的 C 口地址,但是在程序中沒(méi)有直接使用 C 口地址,而是通過(guò) 8255 的命令口使 C 口的各位分別置位來(lái)控制 C 口的。fee 結(jié)構(gòu)定義的全局變量為 Fee。 initset 結(jié)構(gòu)定義的全局變量為 Set, Set 將 initset 結(jié)構(gòu)中的變量實(shí)例化。軟件的代碼請(qǐng)參見(jiàn) LS 圖片或者 PDF。將小數(shù)點(diǎn)后面的整數(shù)轉(zhuǎn)換成小數(shù)加到小數(shù)點(diǎn)前面的整數(shù)上完成到浮點(diǎn)數(shù)的轉(zhuǎn)換。此函數(shù)被設(shè)置高峰時(shí)段,電表轉(zhuǎn)數(shù)等函數(shù)使用作為核心算法。這兩個(gè)函數(shù)作為核心算法被顯示電量電費(fèi)等函數(shù)使用。第二個(gè)子算法將數(shù)組中的元素進(jìn)行倒序運(yùn)算,得到需要的順序,即:數(shù)組下標(biāo) 0, 1, 2, 3, 4 分別存放 5, 4, 3, 2, 1。 1) 算法 NumsToArray:這個(gè)算法的功能是,將作為第一參數(shù)傳遞的 int 型整數(shù)的各位分離,按照由高位到地位的順序依次放入作為第二參數(shù)傳遞的數(shù)組中。 四大關(guān)鍵輔助性算法:這里要說(shuō)明的幾個(gè)算法都不參與硬件的驅(qū)動(dòng),完全是 純軟件的算法。但此時(shí) A 恰好有事離開,某人 B,在不知情的情況下,按照系統(tǒng)的說(shuō)明書按了 0~ 9 的數(shù)字鍵,以為是顯示或者是相應(yīng)的其他功能。然后系統(tǒng)中的標(biāo)志位被清除,以后的按鍵回歸到正常狀態(tài)。這樣就帶來(lái)一個(gè)問(wèn)題:由于每次中斷都是調(diào)用同一個(gè)中斷函數(shù),這樣,在按下功能鍵 B 后,如何將接下來(lái)按下的 2 和 4 識(shí)別為一個(gè)整數(shù) 24 并放入相應(yīng)變量中,而不是認(rèn)為按下 2 鍵是顯示總電量,按下 4 鍵是顯示低谷時(shí)段電費(fèi)?智能識(shí)別技術(shù)的原理是在 B 鍵別按下時(shí)系統(tǒng)將標(biāo)記一個(gè)標(biāo)志位,表明 B 鍵已經(jīng)被按下,然后 2 鍵被按下時(shí),系統(tǒng)首先 查看標(biāo)志位有沒(méi)有被設(shè)置,當(dāng)它發(fā)現(xiàn)標(biāo)志位已經(jīng)被標(biāo)記為 B 時(shí),它即了解到這是一個(gè)功能設(shè)置,將 2 放入一個(gè)輸入緩沖區(qū),而不是顯示總電量。 CPU 在計(jì)數(shù)滿一度電的時(shí)候執(zhí)行中斷程序,此時(shí) CPU讀取外部 RAM 中存 儲(chǔ)的鐘點(diǎn),判斷不同的時(shí)段。使用時(shí)只需要 CPU 通過(guò) 8255 芯片將顯示用的字碼存儲(chǔ)在 LCD 模塊的內(nèi)部存儲(chǔ)區(qū),LCD 就可以顯示出相應(yīng)的字符。每行占 12216 個(gè)像素,設(shè)計(jì)顯示 8個(gè) 1616 的字符。當(dāng)鍵盤上有鍵按下時(shí) Intel 8279 會(huì)將按鍵轉(zhuǎn)換為鍵碼存儲(chǔ)在一個(gè) FIFO( First In First Out,先入先出)隊(duì)列中,并向 CPU 申請(qǐng)中斷。普通電能表的銘牌上標(biāo)有每 KW?h多少轉(zhuǎn),其含義為電能表轉(zhuǎn)數(shù)每達(dá)這一數(shù)值就是用了一度電(即 1KW?h)。時(shí)鐘模塊,為 CPU 模塊提供精確的時(shí)刻計(jì)數(shù) 核心控制模塊,由 SST 公司的 89C58 單片機(jī)和必要的外圍芯片構(gòu)成,用于接受光電模塊送來(lái)的電脈沖,對(duì)脈沖進(jìn)行計(jì)數(shù),將計(jì)數(shù)值轉(zhuǎn)化為電量,根據(jù)由時(shí)鐘模塊中取得的小時(shí),判斷用電的時(shí)段,計(jì)算相應(yīng)時(shí)段的電量和電費(fèi),并記入總電量和電費(fèi);接受鍵盤的中斷,根據(jù)不同的按鍵顯示不同的功能;控制 LCD 顯示模塊,將 CPU 內(nèi)部的數(shù)據(jù)送到LCD 上顯示, 并顯示必要的提示信息。同時(shí)便于團(tuán)隊(duì)協(xié)作,將多個(gè)任務(wù)分配給多人完成。本系統(tǒng)可以作為額外的模塊安裝到普通電能表,這樣用戶已安裝的普通電能表不需要更換為新的電能表,僅僅另外安裝了本系統(tǒng)后就可以作為一個(gè)標(biāo)準(zhǔn)的智能電能表使用。分時(shí)電價(jià)是指在不同時(shí)段采用不同電價(jià),根據(jù)用電需求和電網(wǎng)負(fù)荷將每天的時(shí)間劃分為用電高峰時(shí)段( 6: 00~ 22: 00)和用電低谷時(shí)間段( 22: 00~ 6: 00),高峰時(shí)段執(zhí)行較高電價(jià)( 元 /度),低谷時(shí)段執(zhí)行較低電價(jià)( 元 /度)。用電緊張已經(jīng)成為突出的問(wèn)題擺在我們面前。而電力又不是可以儲(chǔ)存的特殊商品,某些時(shí)段用電多,其他時(shí)段用電少。通過(guò)價(jià)格杠桿調(diào)節(jié)電力資源。 本系統(tǒng)實(shí)現(xiàn)以下功能: 記錄高峰用電量 記錄低谷用電量 記錄總用電量 計(jì)算并記錄高峰時(shí)段用電電費(fèi) 計(jì)算并記錄低谷時(shí)段用電電費(fèi) 計(jì)算并記錄總電費(fèi) 顯示高峰用電量 顯示低 谷用電量 顯示總用電量 顯示高峰時(shí)段用電電費(fèi) 1 顯示低谷時(shí)段用電電費(fèi) 1 顯示總用電電費(fèi) 1 清除電量記錄和電費(fèi)記錄 記錄和計(jì)算用電量、電費(fèi)都由單片機(jī)編程完成,顯示功能由單片機(jī)控制 LCD 實(shí)現(xiàn)。本系統(tǒng)可以簡(jiǎn)單的劃分為 5 個(gè)模塊: 光電轉(zhuǎn)換模塊,用于將普通電能表的轉(zhuǎn)數(shù)通過(guò)光電器件轉(zhuǎn)換為電脈沖,送入 CPU 的 T1端口 。各個(gè)模塊的原理框圖下圖所示。將從電能表上提取轉(zhuǎn)換后的的脈沖信號(hào)送入單片機(jī)的 T1 端并進(jìn)行計(jì)數(shù),編程時(shí)將 T1 計(jì)數(shù)器的計(jì)數(shù)模值設(shè)為 電能表的轉(zhuǎn)數(shù),當(dāng)計(jì)數(shù)器計(jì)數(shù)溢出時(shí)就可以判斷電能表已經(jīng)用了一度電。CPU 得知中斷以后,從 Intel 8279 的存儲(chǔ)區(qū)讀出鍵碼,判斷相應(yīng)的按鍵,決定執(zhí)行相應(yīng)的功 能。嚴(yán)格的說(shuō)要顯示 8 個(gè) 1616 的字符,至少要 12816 個(gè)像素,設(shè)計(jì)時(shí)第四個(gè)字符和的 8 個(gè)字符各少 3 個(gè)像素列,雖然少了 3 個(gè) 像素列,但是由于像素大小極其微小,人的肉眼是很難分辨出來(lái)的。 在本系統(tǒng)中要記錄不同時(shí)段的用電量,并計(jì)算出不同時(shí)段的電費(fèi)。執(zhí)行不同的任務(wù)。并等待下次按鍵。系統(tǒng)利用智能識(shí)別技術(shù),接受鍵盤輸入,對(duì)內(nèi)部的計(jì)費(fèi)標(biāo)準(zhǔn),如高峰電費(fèi)、電表轉(zhuǎn)數(shù) /KW?h等進(jìn)行設(shè)置。但是系統(tǒng)認(rèn)為此時(shí)輸入的數(shù)值是對(duì)內(nèi)部數(shù)據(jù)的設(shè)置。雖然很短小,但是簡(jiǎn)練的完成了其目的。方便其他函數(shù)使用數(shù)組 中的數(shù)字,利用字庫(kù)得到相應(yīng)的字型碼。 2) 算法: ArrayToCharacters:此算法的功能是,將作為第一參數(shù)傳遞的,存放 1 位數(shù)字的數(shù)組,通過(guò)查字庫(kù),將得到的字型碼按順序放入作為第二參數(shù)傳遞的將 要顯示的字符庫(kù)中。 3) 算法 ArrayToDigitalI:此算法的功能是將作為第一參數(shù)傳遞的存放一位數(shù)字的數(shù)組,轉(zhuǎn)化為一個(gè)整數(shù)返回。 4) 算法 ArrayToDigitalF:此算法的功能是將作為第一參數(shù)傳遞的存放一位數(shù)字的小數(shù)序列數(shù)組轉(zhuǎn)換為一個(gè)浮點(diǎn)數(shù)返回。此函數(shù)被設(shè)置電費(fèi)函數(shù)調(diào)用作為核心算法。 initset 結(jié)構(gòu)用于保存高峰時(shí)段電價(jià)、低谷時(shí)段電價(jià)、高峰起始時(shí)間、高峰結(jié)束時(shí)間、低谷起始時(shí)間、低谷結(jié)束時(shí)間和普通電能表每度電的轉(zhuǎn)數(shù)。 coulometer 結(jié)構(gòu)定義電能表在高峰時(shí)段使用的電量、低谷時(shí)段使用的電量和使用的總電量。 在程序中由于要用到外部存儲(chǔ)器或者 IO 端口的直接地址,所以利用 Keil C51 中絕對(duì)定址關(guān)鍵字 _at_定義了各種外部端口和 IO 端口的地址。 全局函數(shù) Init_CPU() 和 Init_8255andLCD()用來(lái)對(duì) CPU和液晶顯示模塊進(jìn)行初始化。 鍵盤模塊程序的設(shè)計(jì):鍵盤模塊包含兩個(gè)中斷函數(shù), KeyBoard 和 DogSniffer,KeyBoard 函數(shù)用于處理鍵盤按鍵事件,每次鍵盤按鍵中斷, KeyBoad 函數(shù)會(huì)檢查按鍵的鍵值,根據(jù)不同的鍵值調(diào)用不同的功能函數(shù)。則 DogSniffer 使功能鍵標(biāo)志復(fù)位。 以下是鍵盤模塊程序中使用的函數(shù)列表,其中 NumsToArray 等四個(gè)輔助算法函數(shù)在第二部分,系統(tǒng)整體設(shè)計(jì)中已經(jīng)詳細(xì)描述,這里不在說(shuō)明。 void ShowHighCoulometer(void)。 void ShowLowFee(void)。 void SetHighFee(uchar key)。 void SetHighEnd(uchar key)。 void ArrayToCharacters(uchar message[8],uchar display[8][32],uchar length)。如果 WhichFunctionKey 未被標(biāo)記,則進(jìn)入標(biāo)準(zhǔn)狀態(tài)的按鍵處理過(guò)程,此過(guò)程通過(guò)一個(gè) switch 語(yǔ)句決定不同的執(zhí)行方式。當(dāng)下次按下按鍵時(shí),由于 WhichFunctionKey 已被標(biāo)記,會(huì)轉(zhuǎn)到相應(yīng)的設(shè)置函數(shù)執(zhí)行。ShowHighFee 一組函數(shù)在顯示時(shí),由于內(nèi)部變量為 float 型,在 LCD 上顯示時(shí)比較困難,而且在計(jì)算電費(fèi)時(shí)按照整數(shù)結(jié)算也是比較容易接受的選擇,所以在實(shí)現(xiàn)時(shí)首先利用標(biāo)準(zhǔn)庫(kù)中的 ceil()函數(shù)將 float 取整,然后再轉(zhuǎn)化為整型數(shù)字顯示 SetHighFee、 SetLowFee、 SetRotateSpeed、 SetHighStart、和 SetHighEnd、SetLowStart、 SetLowEnd 函數(shù)用于設(shè)置 initset 結(jié)構(gòu)定義的電價(jià)、轉(zhuǎn)數(shù)、高峰時(shí)段、低谷時(shí)段等變量。然后將轉(zhuǎn)化后的數(shù)值設(shè)為相應(yīng)變量的當(dāng)前值。 void Display_Left(uchar mdata)。 void DisplayAtRow(uchar row,uchar column,uchar mdata[32])。這一部分的編程模型如下圖所示: LCD 部分的實(shí)現(xiàn)與此模型相對(duì)應(yīng)、 SendCommandToLCD、 Display_Left 和Display_Right 函數(shù)位于此模型中的 “LCD驅(qū)動(dòng)層 ”中,這 3 個(gè)函數(shù)直接接觸硬件,所有有關(guān)顯示的調(diào)用都是基于這 3 個(gè)函數(shù)之上。 Display_Right 函數(shù)能向 LCD 的第二塊驅(qū)動(dòng)芯片內(nèi)寫入一個(gè)字節(jié)的顯示數(shù)據(jù),表現(xiàn)為在 LCD 的右半部分顯示字符。它們使用低層的 SendCommandToLCD 等 3 個(gè)函數(shù)完成顯示數(shù)據(jù)的功能。在函數(shù)中會(huì)對(duì)輸入的列參數(shù)進(jìn)行判斷,小于 0x40 的列,函數(shù)會(huì)調(diào)用 Display_Left 函數(shù)顯示 ,大于或者等于 0x40 的列,函數(shù)會(huì)調(diào)用 Display_Right 函數(shù)顯示。 DisplayAtRow 函數(shù)將整個(gè) LCD分成了兩個(gè)顯示行,每個(gè)顯示行包含 2 個(gè)頁(yè) , 16 個(gè)像素行,可以顯示一個(gè)完整的字符。 位于 LCD 顯示驅(qū)動(dòng)最高層,即
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1