2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩39頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、<p>  單片機在電力系統(tǒng)中的應(yīng)用</p><p>  八戶電子單相電能表設(shè)計與調(diào)試</p><p><b>  摘要</b></p><p>  本文介紹了一種以AD7755 的電能脈沖發(fā)生器模擬用戶用電情況,應(yīng)用單片機C8051F360編制程序完成脈沖的讀取、計數(shù)、計算、存儲、顯示等功能,用74HC164及八段譯碼顯示器完成數(shù)據(jù)

2、的顯示,使用E2PROM 24C16芯片來實現(xiàn)單片機的掉電數(shù)據(jù)保護,使用74HC175和鍵盤搭配實現(xiàn)對每戶用電情況清零,并提供了其硬件和軟件設(shè)計結(jié)構(gòu),該電能表可實現(xiàn)電能計量、數(shù)碼管顯示、掉電存儲、清零等功能。</p><p>  在本電子電能表的前面板上有8位數(shù)碼管顯示器,前兩位為分戶號,后6位為分戶用電量,所顯示的用電量與分戶號相對應(yīng),分戶循環(huán)顯示,每隔2秒切換一次用戶。</p><p>

3、;  八戶電子電能表采用單片機C8051F36作為中央處理器,每塊電能表可對8戶的用電情況進(jìn)行集中檢測、循環(huán)顯示并具有掉電保護的功能。該電能表與傳統(tǒng)感應(yīng)式電能表相比,有效地提高了電能計量的準(zhǔn)確性,且具有體積小、質(zhì)量輕、安裝方便等優(yōu)點。</p><p>  關(guān)鍵詞:C8051F360;電量;電能表;電能轉(zhuǎn)化脈沖芯片有AD7755;硬件設(shè)計;軟件設(shè)計</p><p><b>  AB

4、STRACT</b></p><p>  Eight electronic energy meter with a microcontroller C8051F36 as the central processor, each energy meter eight electricity centralized testing, recycling and power-down protection

5、function. Compared with the traditional induction meter to the power meter, and to improve the accuracy of energy metering, and has a small size, light weight, easy to install. </p><p>  This article describ

6、es the function of an AD7755 power pulse generator that simulates user of electricity in the application MCU C8051F360 programming to complete the pulse reading, counting, computing, storage, display, complete data using

7、 the 74HC164 and eight out of decoding display, to achieve single-chip power-down data protection of E2PROM 24C16 chip, 74HC175 and keyboard with the household electricity consumption is cleared, and provides hardware an

8、d software design structure, the energy </p><p>  8 digital display of the electronic energy meter front panel, behind the household electricity consumption of household electricity consumption, shown in the

9、 last six corresponding to the household, household cycle display every 2 seconds to switch a user.</p><p>  Keywords: C8051F360 microcontroller; AD7755; power; energy meter</p><p><b>  目

10、錄</b></p><p><b>  1 前言1</b></p><p>  2 設(shè)計任務(wù)及要求2</p><p><b>  3 設(shè)計原理3</b></p><p>  3.1 系統(tǒng)方案3</p><p>  3.2 設(shè)計總論3</p>

11、<p>  3.3 方案設(shè)計框圖4</p><p>  4 硬件電路設(shè)計5</p><p>  4.1 單片機電路部分5</p><p>  4.2 穩(wěn)壓電源8</p><p>  4.3 AD7755相關(guān)電路8</p><p>  5 軟件電路設(shè)計13</p><p>

12、;  5.1 各模塊流程圖設(shè)計13</p><p><b>  6 參考文獻(xiàn)16</b></p><p><b>  7 致謝17</b></p><p><b>  8 附錄18</b></p><p><b>  1 前言</b></p&

13、gt;<p>  電能表自誕生至今已有100多年的歷史,隨著電力系統(tǒng)及其相關(guān)產(chǎn)業(yè)的發(fā)展以及電能管理系統(tǒng)的不斷完善,電能表的結(jié)構(gòu)和性能也經(jīng)歷了不斷更新、優(yōu)化的發(fā)展過程:由最初的感應(yīng)電能表,發(fā)展到后來的感應(yīng)系脈沖電能表,直至現(xiàn)在的純電子式電能表。感應(yīng)系電能表是利用處于交變磁場的金屬圓盤中的感應(yīng)電流與有關(guān)磁場形成力的原理制成的。感應(yīng)系脈沖電能表仍采用感應(yīng)系電能表的測量機構(gòu)作為工作元件,由光電傳感器完成電能脈沖轉(zhuǎn)換,然后經(jīng)電子電路

14、對脈沖進(jìn)行處理,從而實現(xiàn)對電能的測量。純電子式電能表的原理是采用電子電路來實現(xiàn)電能計量,所以電子式電能表的共同特點是采用乘法器,根據(jù)所依托的乘法器為模擬的還是數(shù)字的分為模擬乘法器型電子電能表和數(shù)字乘法器型電子電能表。</p><p>  微電子技術(shù)和計算機技術(shù)的高速發(fā)展是電子式電能表迅速進(jìn)步、日益成熟的主要技術(shù)支撐。準(zhǔn)確度高、可靠性高的元器件以及大規(guī)模集成電路等的采用,使電子式電能表的使用壽命、準(zhǔn)確度、穩(wěn)定度等技

15、術(shù)指標(biāo)均顯著改善。</p><p>  電子式多功能多用戶電能表由于準(zhǔn)確度高、功能擴展性強、易于實現(xiàn)多費率和通信等一系列優(yōu)點,較好解決了機械表長期以來難以解決的諸多問題,將會在現(xiàn)代化電能計量與管理中逐步占據(jù)主導(dǎo)地位。</p><p>  本文給出基于AT89C52單片機的一種新型單相多用戶電能表設(shè)計,電能計量準(zhǔn)確。該電能表具有八段數(shù)碼管顯示,功耗低,掉電后自動存儲數(shù)據(jù)的特點。</p&

16、gt;<p><b>  2 設(shè)計任務(wù)及要求</b></p><p>  設(shè)計任務(wù):8戶電子單相電能表設(shè)計與調(diào)試</p><p>  設(shè)計內(nèi)容:硬件設(shè)計與軟件設(shè)計。硬件設(shè)計包括:C8051F360 單片機整體電路設(shè)計、+5V 穩(wěn)壓電源電路設(shè)計、基于 AD7755 的電能脈沖發(fā)生器電路設(shè)計;軟件設(shè)計包括:用 C8051F360 單片機及 C 語言編寫具有掉

17、電保存功能的用戶電量顯示程序。</p><p>  設(shè)計要求:AD7755 電能脈沖發(fā)生器電路僅作電路硬件設(shè)計,其電能脈沖由C8051F360 單片機 P2 口所接撥碼開關(guān)產(chǎn)生的脈沖模擬。用戶電量顯示要求精確到小數(shù)點后 2 位,100 個電量脈沖為 1 度電,每個用戶顯示時間為 3S 左右。為防止突然停電而使用戶電量數(shù)據(jù)丟失,要求能將電量數(shù)據(jù)保存,需要設(shè)計單片機24C16 模塊,使其具有掉電保存功能。</p

18、><p><b>  3 設(shè)計原理</b></p><p><b>  3.1 系統(tǒng)方案</b></p><p>  根據(jù)設(shè)計題目要求,以及原始資料的精度要求,電能轉(zhuǎn)化脈沖芯片有AD7755可供選擇 ,因為它是一種高準(zhǔn)確度電能測量集成電路,穩(wěn)定性強并且價格不貴;單片機芯片選擇C8051F36x器件,它具有片內(nèi)上電復(fù)位電路、VD

19、D監(jiān)視器、看門狗定時器和時鐘振蕩器,是真正獨立工作的片上系統(tǒng);數(shù)據(jù)保護電路芯片可選FM24C16 ,用先進(jìn)的鐵電技術(shù)制造的16K位的非易失憶的記憶體;另外要求為LED顯示,使用74HC164串入并出8位移位記存器進(jìn)行存儲數(shù)據(jù);因為各芯片需提供直流電源,我們要進(jìn)行設(shè)計交直流變化和降壓電路。</p><p><b>  3.2 設(shè)計總論</b></p><p>  該系統(tǒng)

20、主要由前端電路調(diào)理模塊、電能轉(zhuǎn)換模塊、MCU模塊、顯示模塊、存儲器模塊部分組成。前端電路調(diào)理模塊采用變比1:1 的電流型電壓互感器,電流模塊采用變比2000:1 的電流互感器,利用取樣電阻采樣信號,經(jīng)變換后的信號以差模電壓的形式接到AD7755芯片,取樣電阻的阻值由被測信號的最大值決定,然后經(jīng)AD7755轉(zhuǎn)換后將電壓、電流、電能等信號傳給單片機C8051F360,C8051F360組成的MCU模塊控制所有芯片的工作、截止及計算和模塊的顯

21、示,顯示模塊采用液晶模塊,液晶正常顯示當(dāng)前測量的用戶號、用電量;存儲模塊采用AT24C16,為系統(tǒng)提供數(shù)據(jù)存儲,可以做到掉電不丟失數(shù)據(jù)。</p><p>  3.3 方案設(shè)計框圖</p><p>  圖3.1 方案總體設(shè)計框圖</p><p><b>  4 硬件電路設(shè)計</b></p><p>  4.1 單片機電路部

22、分</p><p>  系統(tǒng)主要由電量計量采集電路、微處理器、非易失存儲器電路、顯示電路、供電控制電路等部分組成。計量電路用戶電能計量采用專用集成電路設(shè)計,每一戶的計量脈沖信號,經(jīng)I/O接口電路連接到系統(tǒng)總線,在微處理器的控制下,輪流采集并計數(shù)其脈沖信號,達(dá)到0.01 kWh時,將電量存儲到非易失存儲器中,以防電量丟失。整個電表采用分時方式,輪流顯示用戶使用的電量數(shù)據(jù)。</p><p> 

23、 本設(shè)計采用的是C8051F360單片機為核心的電路板。C8051F360單片機整體電路板包含:C8051F360單片機、LED/FMQ報警、RS-232通信、USB接口、電源接口、LM336-2.5、下載/復(fù)位、外接器件、5V--3.3V、兩路AD輸入、信號輸入、PCF8563、24C16、74HC165、74HC164顯示等模塊。本次設(shè)計中主要用到的部分有C8051F360單片機、PCF8563、24C16、74HC165和 74H

24、C164顯示等模塊。</p><p>  C8051F360單片機為主要部件,它具有片內(nèi)上電復(fù)位電路、VDD監(jiān)視器、看門狗定時器和時鐘振蕩器器件,是真正能獨立工作的片上系統(tǒng)。FLASH 存儲器還具有在系統(tǒng)重新編程能力,可用于非易失性數(shù)據(jù)存儲,并允許現(xiàn)場更新 8051 固件。用戶軟件對所有外設(shè)具有完全的控制,可以關(guān)斷任何一個或所有外設(shè)以節(jié)省功耗。其P1.0,P1.1口產(chǎn)生的脈沖向74HC164顯示輸送數(shù)據(jù),使其顯示

25、相關(guān)信息,P2口接撥碼開關(guān),模擬AD7755電量脈沖,PCF8563、24C16部件實時存儲用戶電量信息,并在掉電后保存,單片機上電復(fù)位后能夠從中讀取數(shù)據(jù)。</p><p>  圖4.1 主控模塊原理圖</p><p>  FM24C16是用先進(jìn)的鐵電技術(shù)制造的16K位的非易失性的記憶體鐵電隨機存儲器 FRAM具有非易失性并且可以象RAM一樣快速讀寫數(shù)據(jù)在掉電可以保存10年且比EEPROM

26、或其他非易失性存儲器可靠性更高系統(tǒng)更簡單不象EEPROM FM24C16以總線速度進(jìn)行寫操作無延時數(shù)據(jù)送到FM24C16直接寫到具體的單元地址下可以立即執(zhí)行 FM24C16可以承受超過100億次的讀寫或者是比EEPROM高一萬倍的寫操作 FM24C16的寫能力使得它在需要對非易失性記憶體快速讀寫的狀況下非常理想舉例說數(shù)據(jù)采集系統(tǒng)中對寫入數(shù)據(jù)的頻率要求高即速度要求非??焓褂肊EPROM可能丟失數(shù)據(jù)這種優(yōu)勢合并使得系統(tǒng)可以更可靠的實時采集

27、數(shù)據(jù) FM24C16為使用串EEPROM的用戶提供了便利它在硬件上可以直接替換EEPROM。以下是電路板的相關(guān)電路圖。</p><p>  圖4.2 掉電保護模塊</p><p>  電路設(shè)計中74HC164是比較典型的移位寄存器,該移位寄存器有一個數(shù)據(jù)輸入端口、一個時鐘信號端口和八個輸出端口。如圖1-4所示。當(dāng)時鐘信號從低電平變?yōu)楦唠娖降臅r候?qū)⑤敵鲆粋€數(shù)據(jù)到輸出端D0,當(dāng)時鐘第二次由低電

28、平變?yōu)楦唠娖降臅r候?qū)⑤敵龅诙€數(shù)據(jù)到D0,而第一個數(shù)據(jù)將轉(zhuǎn)移到D1端口。依此類推,每一個時鐘周期中都有一個串行數(shù)據(jù)輸出到D0,而其他的數(shù)據(jù)則不斷往高位移動直到所有數(shù)據(jù)傳輸結(jié)束。如果不再有時鐘周期輸入,則這些數(shù)據(jù)將暫存在輸出端。</p><p>  圖3.3 循環(huán)顯示模塊</p><p>  考慮到實用性,本文設(shè)計了按鍵清零模塊。八個按鍵分別控制八個用戶的電量顯示,當(dāng)按鍵被按下時與之相對應(yīng)用

29、戶的電量被清零。該模塊通過相關(guān)管腳與主控模塊通信,主控模塊不停的對八個按鍵進(jìn)行掃描以判斷哪一個按鍵被按下,獲取八個按鍵的狀態(tài)并對其進(jìn)行編碼。主控模塊根據(jù)獲取的信息對電量顯示模塊發(fā)出相應(yīng)指令。</p><p>  圖4.3 按鍵清零模塊</p><p><b>  4.2 穩(wěn)壓電源</b></p><p>  電源是電能表設(shè)計的重要部分,其設(shè)計的

30、好壞對整個系統(tǒng)的性能有較大影響。本設(shè)計使用的穩(wěn)壓電源是由MC7805實現(xiàn)的,輸入電壓220V,輸出電壓+5V 。</p><p>  集成三端穩(wěn)壓器穩(wěn)壓精度高、工作穩(wěn)定可靠、外圍電路簡單、容易設(shè)計和制作、體積小、重量輕、成本低、維修簡單。7805集成三端穩(wěn)壓器的典型應(yīng)用電路如圖2所示,這是一個輸出 +5 V直流電壓的穩(wěn)壓電路。IC采用集成三端穩(wěn)壓器7805,C1、C 2分別為輸入端和輸出端濾波電容,RL為負(fù)載電阻

31、。電路如下圖。</p><p>  圖4.4 穩(wěn)壓電壓電源電路</p><p>  4.3 AD7755相關(guān)電路</p><p>  AD7755電能脈沖發(fā)生器的選擇:</p><p>  AD7755是美國AD公司生產(chǎn)的專用于功率/電能測量的低成本集成電路。它的技術(shù)指標(biāo)滿足GB/T17215-1998標(biāo)準(zhǔn)規(guī)定的準(zhǔn)確度等要求。</p&g

32、t;<p>  AD7755有24條引腳,以DIP和SSOP形式封裝。AD7755在電子電能表中的連接如圖1所示。管腳功能如下:</p><p>  P1 DVDD,數(shù)字電路電源,5(±5%)V;P2AC/DC,高通濾波選擇腳,邏輯高,高通濾濾器使能;P3 AVDD,模擬電路電源,5(±5%)V;P4、P19 NC,未接;P5-P6 V1P-V1N,通道1(電流通道)模擬輸入,最

33、大差動輸入電壓為±470mV;P7-P8 V2N-V2P,通道2(電壓通道)模擬輸入,最大差動輸入電壓為±660mV; P9 RESET,復(fù)位引腳,邏輯低使ADC和數(shù)字電路保持復(fù)位狀態(tài),清內(nèi)部寄存器;P10 REFIN/OUT,電壓基準(zhǔn)腳,片上基準(zhǔn)為5(±8%)V,可接外部基準(zhǔn)源;P11 AGND,模擬電路參考地;P12 SCF,校準(zhǔn)頻率選擇腳;P13、P14 S1、S0,數(shù)-頻轉(zhuǎn)換頻率選擇腳;P15、P1

34、6 G1、G0,通道1增益選擇腳;P17 - P18 CLKIN- CLKOUT,外接時鐘,鐘頻3.579545MHz;P20 REVP,負(fù)功率指示腳,電壓信號和電流信號之間的相位差>90°時變?yōu)檫壿嫺?P21DGND,數(shù)字電路參考地;P22 CF,校準(zhǔn)頻率輸出;P23、P24 F2、F1,低頻輸出。</p><p>  圖4.5 AD7755的內(nèi)部功能框圖</p><p>

35、;  圖4.6 AD7755電路原理圖</p><p>  它由模擬電路(模數(shù)轉(zhuǎn)換電路、基準(zhǔn)電路與電源電壓監(jiān)測電路)和數(shù)字信號處理電路兩部分組成。被測電壓、電流轉(zhuǎn)換為數(shù)字量后,接下來的信號處理都在數(shù)字域?qū)崿F(xiàn);AD7755內(nèi)部的相位校正電路、高通濾波器、乘法器、低通濾波器、數(shù)字-頻率轉(zhuǎn)換器等都為數(shù)字電路。AD7755內(nèi)有兩個以900kHz過采樣速率采樣的16位2階Σ-Δ模數(shù)轉(zhuǎn)換器(ADC)。被測電流經(jīng)可編程增益放大

36、器(PGA)放大后接電流通道的ADC,并由此ADC轉(zhuǎn)換為對應(yīng)的數(shù)字信號。再經(jīng)相位校正和高通濾波,進(jìn)入乘法器。乘法器的另一路輸入是由電壓通道ADC轉(zhuǎn)換而來的、與被測電壓對應(yīng)的數(shù)字信號。相乘后產(chǎn)生瞬時功率信號。此信號經(jīng)低通濾波器濾除其中的交流分量,提取出負(fù)載消耗的瞬時有功功率。AD7755對這個瞬時有功功率信號進(jìn)行一段時間的累計、平均,求得平均有功功率,以較短時間對瞬時有功功率進(jìn)行累計,求得與瞬時有功功率成正比的高頻頻率并經(jīng)CF輸出,用于校

37、準(zhǔn)或送微控制器累加計數(shù),實現(xiàn)對電能的計量。電流通道的PGA的增益受管腳G1、G0控制。</p><p><b>  參數(shù)計算:</b></p><p> ?、僖訟D7755設(shè)計的電能表的相關(guān)參數(shù)計算</p><p>  配合C8051F360芯片的16進(jìn)制算法與課程設(shè)計的參數(shù)要求,參考基本電流與脈沖的建議數(shù),選定基準(zhǔn)電流Ib=5A,每kw.h計

38、度需要的脈沖數(shù)為3200,即CF的輸出為3200imp/ kw.h。</p><p>  線路電壓220V,基本電流Ib為5A,動態(tài)范圍400(規(guī)定準(zhǔn)確度的電流范圍為2%Ib~Imax,即100mA~40A);計度器的電表常數(shù)C為3200imp/ kw.h,即AD7755發(fā)3200個脈沖,單片機記錄1 kw.h電。為滿足電流通道的動態(tài)范圍且留有充分的余量,選用350μΩ的分流器;以其將負(fù)載電流轉(zhuǎn)換為電壓,接V1P

39、和V1N。線路電壓經(jīng)電壓分壓器分壓,也降到允許的最大電壓范圍之內(nèi),接V2P和V2N。負(fù)載電流為基本電流(5A)時,線路的功耗為P=220×5=1.1 kw。</p><p>  選擇f1-4=3.4Hz,SCF=0,S1=0,=S0=1,此時CF頻率為f1的32倍,所要求的頻率恰為f1,f2段的脈沖計數(shù)標(biāo)準(zhǔn)為100imp/ kw.h。</p><p>  乘以此常數(shù)得Ib情況下的

40、輸出頻率:</p><p>  fF1=P×C=1.1×3200/3600=0.9777778Hz</p><p>  查AD7755數(shù)據(jù)表,所選擇f1-4=3.4Hz,滿足最大電流為40A和再留有足夠余量的要求。</p><p>  fF1=8.06×U1×U2×G×f1-4U2REF</p>

41、<p>  U1=5×350=1750μV=1.75mV</p><p>  并以最大電流產(chǎn)生的壓降和表1,選擇G=16</p><p>  U2=fF1×U2REF8.06×U1×G×f1-4=0.030555×2.528.06×1.75×16×3.4=248.9mV</p>

42、;<p>  原理圖中R1、C1,R2、C2,R3、C3,R4∥(R5~R16)、C4為抗混疊濾波器。因為AD7755以900kHz過采樣速率采樣,故大大簡化了抗混疊濾波器的設(shè)計。不過,兩個通道之間的相位匹配非常重要。例如,當(dāng)cosφ=0.5時,0.2°的外部相位誤差將產(chǎn)生0.6%的測量誤差。為使兩個通道的相位匹配,電阻、電容的取值分別為R1=R2=R3=R4=1kΩ(精度為1%);C1=C2=C3=C4=33n

43、F;R5= 300kΩ,R6= 150kΩ,R7= 75kΩ,R8=39kΩ,R9=18kΩ,R10=9.1kΩ,R11=5.1kΩ,R12=2.2kΩ,R13=1.2kΩ,R14=560Ω,R15=R16=330kΩ??紤]到選用的分流器和基準(zhǔn)源都存在允差,原理圖中設(shè)置了校準(zhǔn)網(wǎng)絡(luò),通過短接或斷開J1~J10,可在±30%范圍內(nèi)進(jìn)行調(diào)節(jié)。因為R15+R16=660kΩ,大于大于R4(1kΩ),因此,即使R5~R14全部短接,這條

44、支路的-3dB頻率仍由R4和C4的值決定。據(jù)廠家介紹,從J1~J10全部接通變化到J1~J10全部斷開,50Hz處產(chǎn)生的相移僅為0.0004°??紤]到分流器存在寄生電感</p><p><b>  5 軟件電路設(shè)計</b></p><p>  5.1 各模塊流程圖設(shè)計</p><p>  圖5.1 主函數(shù)流程圖</p>

45、<p>  圖5.2 AT24C16讀寫函數(shù)流程圖</p><p>  圖5.3 用戶掃描函數(shù)</p><p><b>  6 參考文獻(xiàn)</b></p><p>  [1]邱關(guān)源,電路第四版 ,高等教育出版社,2002. </p><p>  [2] 公茂法,黃鶴松.單片機原理與實踐.北京:北京航空航天大學(xué)出版

46、社 2009</p><p>  [3]羅旭,張彥斌等.單相電子式電能表的特點及其原理,第1期:10-17,</p><p><b>  2003.</b></p><p><b>  7 致謝</b></p><p>  本次課程設(shè)計的完成,首先要感謝公老師和研究生學(xué)長的耐心講解和悉心指導(dǎo),使我受

47、益匪淺。</p><p>  兩個星期來,我學(xué)到了很多在書本上所沒有學(xué)到過的知識, 我不僅進(jìn)一步熟悉了單片機的原理和應(yīng)用,也對匯編語言編程有了更進(jìn)一步的了解,并在調(diào)試程序的同時鍛煉了動手能力和分析問題的能力,體會到了課本聯(lián)系實際、學(xué)以致用的重要性,懂得了只有理論知識是遠(yuǎn)遠(yuǎn)不夠的,只有把所學(xué)的理論知識與實踐相結(jié)合起來,從理論中得出結(jié)論,才是正確的理論,才能真正提高自己實際動手能力和獨立思索的能力。我在設(shè)計的過程中碰

48、到問題,但是我并沒有放棄,經(jīng)過老師的講解和自己的查找資料,并發(fā)揮對所學(xué)知識的理解思考,自己耐心的親手設(shè)計調(diào)試程序,一步步克服難關(guān)最終完成了目標(biāo)。</p><p>  這次課程設(shè)計為自己今后進(jìn)一步深化學(xué)習(xí),積累了一定寶貴的經(jīng)驗。通過這次課程設(shè)計我深刻的認(rèn)識到,只有理論水平提高了,才能夠?qū)⒄n本知識與實踐相整合,理論知識服務(wù)于教學(xué)實踐,以增強自己的動手能力。這是一次知識轉(zhuǎn)化為能力的實際訓(xùn)練,培養(yǎng)了我運用所學(xué)知識解決實際

49、問題的能力。并對本專業(yè)的課程充滿了濃厚的興趣及對以后的學(xué)習(xí)充滿了信心,決定在以后的學(xué)習(xí)生活中加強練習(xí),端正心態(tài)迎接新的挑戰(zhàn)。</p><p>  最后,再次向公老師和研究生學(xué)長表示誠摯的感謝!</p><p><b>  8 附錄</b></p><p><b>  程序清單</b></p><p>

50、;  #include<c8051f360.h></p><p>  #include <intrins.h></p><p>  #include <stdio.h></p><p>  #define AT24C16 0xa0 //AT24C16 地址</p><p>  sbit DIN=P1^0

51、; /*定義P1口*/</p><p>  sbit CLK=P1^1;</p><p>  sbit YH1=P2^0; /*定義P2口*/</p><p>  sbit YH2=P2^1;</p><p>  sbit YH3=P2^2;</p><p>  sbit YH4=P2^3;

52、</p><p>  sbit YH5=P2^4;</p><p>  sbit YH6=P2^5;</p><p>  sbit YH7=P2^6;</p><p>  sbit YH8=P2^7;</p><p>  sbit HC165_nPL=P1^2;//165鍵盤管腳定義</p><p&

53、gt;  sbit HC165_CK=P1^5;</p><p>  sbit HC165_OUT=P1^4;</p><p>  unsigned char HC165(void);//鍵盤掃描函數(shù)</p><p>  unsigned char Temp;</p><p>  unsigned char lu=0xff;</p>

54、;<p>  void qingling(unsigned char a);//判斷哪個個鍵盤按下,并對相應(yīng)用戶清零</p><p>  unsigned char a,m,i,j,k,n,z;</p><p>  unsigned char zf[]={0x88,0xeb,0x4c,0x49,0x2b,0x19,0x18,0xcb,0x08,0x09,0xff,0x7f};

55、//數(shù)碼管編碼(0-9),后兩位分別是滅碼、顯示‘一’</p><p>  unsigned char yh[8][8]={{0x00,0x00,0x00,0x00,0xb,0x1,0x00,0x00},</p><p>  {0x00,0x00,0x00,0x00,0xb,0x2,0x00,0x00},</p><p>  {0x00,0x00,0x00,0x00

56、,0xb,0x3,0x00,0x00},</p><p>  {0x00,0x00,0x00,0x00,0xb,0x4,0x00,0x00},</p><p>  {0x00,0x00,0x00,0x00,0xb,0x5,0x00,0x00},</p><p>  {0x00,0x00,0x00,0x00,0xb,0x6,0x00,0x00},</p>

57、<p>  {0x00,0x00,0x00,0x00,0xb,0x7,0x00,0x00},</p><p>  {0x00,0x00,0x00,0x00,0xb,0x8,0x00,0x00}};</p><p>  #define _Nop() _nop_() /* 定義空指令 */</p><p>  sbit SCL=P1^6;

58、 //I2C 時鐘 </p><p>  sbit SDA=P1^3; //I2C 數(shù)據(jù) </p><p>  bit ack; /*應(yīng)答標(biāo)志位*/</p><p>  void Start_I2c()</p><p><b>  {</b></p>

59、<p>  SDA=1; /*發(fā)送起始條件的數(shù)據(jù)信號*/</p><p><b>  _Nop();</b></p><p><b>  SCL=1;</b></p><p>  _Nop(); /*起始條件建立時間大于4.7us,延時*/</p><p>

60、<b>  _Nop();</b></p><p><b>  _Nop();</b></p><p><b>  _Nop();</b></p><p>  _Nop(); </p><p>  SDA=0; /*發(fā)送起始信號*/</p>

61、<p>  _Nop(); /* 起始條件鎖定時間大于4μs*/</p><p><b>  _Nop();</b></p><p><b>  _Nop();</b></p><p><b>  _Nop();</b></p><p>  _Nop()

62、; </p><p>  SCL=0; /*鎖住I2C總線,準(zhǔn)備發(fā)送或接收數(shù)據(jù) */</p><p><b>  _Nop();</b></p><p><b>  _Nop();</b></p><p><b>  }</b></p>

63、<p>  void Stop_I2c()</p><p><b>  {</b></p><p>  SDA=0; /*發(fā)送結(jié)束條件的數(shù)據(jù)信號*/</p><p>  _Nop(); /*發(fā)送結(jié)束條件的時鐘信號*/</p><p><b>  SCL=1; </b>&l

64、t;/p><p><b>  _Nop();</b></p><p>  _Nop(); /*結(jié)束條件建立時間大于4μs*/</p><p><b>  _Nop();</b></p><p><b>  _Nop();</b></p><p>&l

65、t;b>  _Nop();</b></p><p>  SDA=1; /*發(fā)送I2C總線結(jié)束信號*/</p><p><b>  _Nop();</b></p><p><b>  _Nop();</b></p><p><b>  _Nop();</b&

66、gt;</p><p><b>  _Nop();</b></p><p><b>  }</b></p><p>  void SendByte(unsigned char c)</p><p><b>  {</b></p><p>  unsi

67、gned char BitCnt;</p><p>  for(BitCnt=0;BitCnt<8;BitCnt++) /*要傳送的數(shù)據(jù)長度為8位*/</p><p><b>  {</b></p><p>  if((c<<BitCnt)&0x80)SDA=1; /*判斷發(fā)送位*/</p>&

68、lt;p>  else SDA=0; </p><p><b>  _Nop();</b></p><p>  SCL=1; /*置時鐘線為高,通知被控器開始接收數(shù)據(jù)位*/</p><p><b>  _Nop(); </b></p><p>  _Nop()

69、; /*保證時鐘高電平周期大于4μs*/</p><p><b>  _Nop();</b></p><p><b>  _Nop();</b></p><p>  _Nop(); </p><p><b>  SCL=0; </b></p>

70、<p><b>  }</b></p><p><b>  _Nop();</b></p><p><b>  _Nop();</b></p><p>  SDA=1; /*8位發(fā)送完后釋放數(shù)據(jù)線,準(zhǔn)備接收應(yīng)答位*/</p><p><b>  _

71、Nop();</b></p><p>  _Nop(); </p><p><b>  SCL=1;</b></p><p><b>  _Nop();</b></p><p><b>  _Nop();</b></p><p><

72、b>  _Nop();</b></p><p>  if(SDA==1)ack=0; </p><p>  else ack=1; /*判斷是否接收到應(yīng)答信號*/</p><p><b>  SCL=0;</b></p><p><b>  _Nop();</b><

73、;/p><p><b>  _Nop();</b></p><p><b>  }</b></p><p>  unsigned char RcvByte()</p><p><b>  {</b></p><p>  unsigned char re

74、tc;</p><p>  unsigned char BitCnt; </p><p><b>  retc=0; </b></p><p>  SDA=1; /*置數(shù)據(jù)線為輸入方式*/</p><p>  for(BitCnt=0;BitCnt<8;BitCnt++)</p&

75、gt;<p><b>  {</b></p><p>  _Nop(); </p><p>  SCL=0; /*置時鐘線為低,準(zhǔn)備接收數(shù)據(jù)位*/</p><p><b>  _Nop();</b></p><p>  _Nop(); /*時鐘低

76、電平周期大于4.7μs*/</p><p><b>  _Nop();</b></p><p><b>  _Nop();</b></p><p><b>  _Nop();</b></p><p>  SCL=1; /*置時鐘線為高使數(shù)據(jù)線上數(shù)據(jù)有效*/</p

77、><p><b>  _Nop();</b></p><p><b>  _Nop();</b></p><p>  retc=retc<<1;</p><p>  if(SDA==1)retc=retc+1; /*讀數(shù)據(jù)位,接收的數(shù)據(jù)位放入retc中 */</p><

78、p><b>  _Nop();</b></p><p><b>  _Nop(); </b></p><p><b>  }</b></p><p>  SCL=0; </p><p><b>  _Nop();</b></p>

79、<p><b>  _Nop();</b></p><p>  return(retc);</p><p><b>  }</b></p><p>  void Ack_I2c(bit a)</p><p><b>  { </b></p><p

80、>  if(a==0)SDA=0; /*在此發(fā)出應(yīng)答或非應(yīng)答信號 */</p><p>  else SDA=1;</p><p><b>  _Nop();</b></p><p><b>  _Nop();</b></p><p>  _Nop(); </p>

81、<p><b>  SCL=1;</b></p><p><b>  _Nop();</b></p><p>  _Nop(); /*時鐘低電平周期大于4μs*/</p><p><b>  _Nop();</b></p><p><b>

82、;  _Nop();</b></p><p><b>  _Nop(); </b></p><p>  SCL=0; /*清時鐘線,鉗住I2C總線以便繼續(xù)接收*/</p><p><b>  _Nop();</b></p><p>  _Nop(); </

83、p><p><b>  }</b></p><p>  bit ISendStr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned char no)</p><p><b>  {</b></p><p>  unsig

84、ned char i;</p><p>  Start_I2c(); /*啟動總線*/</p><p>  SendByte(sla); /*發(fā)送器件地址*/</p><p>  if(ack==0)return(0);</p><p>  SendByte(suba);

85、 /*發(fā)送器件子地址*/</p><p>  if(ack==0)return(0);</p><p>  for(i=0;i<no;i++)</p><p><b>  { </b></p><p>  SendByte(*s); /*發(fā)送數(shù)據(jù)*/</p><p&g

86、t;  if(ack==0)return(0);</p><p><b>  s++;</b></p><p><b>  } </b></p><p>  Stop_I2c(); /*結(jié)束總線*/ </p><p>  return(1);</p>&l

87、t;p><b>  }</b></p><p>  bit IRcvStr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned char no)</p><p><b>  {</b></p><p>  unsigned char i

88、;</p><p>  Start_I2c(); /*啟動總線*/</p><p>  SendByte(sla); /*發(fā)送器件地址*/</p><p>  if(ack==0)return(0);</p><p>  SendByte(suba); /*發(fā)送

89、器件子地址*/</p><p>  if(ack==0)return(0);</p><p>  Start_I2c(); /*重新啟動總線*/</p><p>  SendByte(sla+1);</p><p>  if(ack==0)return(0);</p><p>  for

90、(i=0;i<no-1;i++)</p><p><b>  { </b></p><p>  *s=RcvByte(); /*發(fā)送數(shù)據(jù)*/</p><p>  Ack_I2c(0); /*發(fā)送就答位*/ </p><p><b>  s++;&

91、lt;/b></p><p><b>  } </b></p><p>  *s=RcvByte();</p><p>  Ack_I2c(1); /*發(fā)送非應(yīng)位*/</p><p>  Stop_I2c(); /*結(jié)束總線*/ </p>

92、;<p>  return(1);</p><p><b>  }</b></p><p><b>  delay()</b></p><p><b>  {</b></p><p>  unsigned m,n;</p><p>  fo

93、r(m=20;m>0;m--)</p><p>  for(n=512;n>0;n--);</p><p><b>  }</b></p><p>  void Read24()</p><p><b>  {</b></p><p>  IRcvStr(AT24

94、C16, 0 , &yh[0][0], 4);delay();</p><p>  IRcvStr(AT24C16, 4 , &yh[1][0], 4);delay();</p><p>  IRcvStr(AT24C16, 8 , &yh[2][0], 4);delay();</p><p>  IRcvStr(AT24C16, 12 ,

95、&yh[3][0], 4);delay();</p><p>  IRcvStr(AT24C16, 16 , &yh[4][0], 4);delay();</p><p>  IRcvStr(AT24C16, 20 , &yh[5][0], 4);delay();</p><p>  IRcvStr(AT24C16, 24 , &yh

96、[6][0], 4);delay();</p><p>  IRcvStr(AT24C16, 28 , &yh[7][0], 4);delay();</p><p><b>  }</b></p><p>  void Write24()</p><p><b>  {</b></p&

97、gt;<p>  ISendStr(AT24C16, 0 , &yh[0][0], 4);delay();</p><p>  ISendStr(AT24C16, 4 , &yh[1][0], 4);delay();</p><p>  ISendStr(AT24C16, 8 , &yh[2][0], 4);delay();</p>&l

98、t;p>  ISendStr(AT24C16, 12 , &yh[3][0], 4);delay();</p><p>  ISendStr(AT24C16, 16 , &yh[4][0], 4);delay();</p><p>  ISendStr(AT24C16, 20 , &yh[5][0], 4);delay();</p><p&

99、gt;  ISendStr(AT24C16, 24 , &yh[6][0], 4);delay();</p><p>  ISendStr(AT24C16, 28 , &yh[7][0], 4);delay();</p><p><b>  }</b></p><p>  void jinwei (unsigned char z

100、)</p><p><b>  {</b></p><p>  yh[z][0]++;</p><p>  if(yh[z][0]==0xa)//判斷是否為10,滿十向前進(jìn)位</p><p><b>  {</b></p><p>  yh[z][0]=0x0;</p&

101、gt;<p>  yh[z][1]++;</p><p><b>  }</b></p><p>  if (yh[z][1]==0xa)</p><p><b>  {</b></p><p>  yh[z][1]=0x0;</p><p>  yh[z][2

102、]++;</p><p><b>  }</b></p><p>  if (yh[z][2]==0xa)</p><p><b>  {</b></p><p>  yh[z][2]=0x0;</p><p>  yh[z][3]++;</p><p&g

103、t;<b>  }</b></p><p>  if (yh[z][3]==0xa)</p><p><b>  {</b></p><p>  yh[z][0]=0x0;</p><p>  yh[z][1]=0x0;</p><p>  yh[z][2]=0x0;<

104、/p><p>  yh[z][3]=0x0;;</p><p>  }//記滿4位數(shù)全部清零</p><p><b>  }</b></p><p>  void saomiao(unsigned char p2)</p><p><b>  {</b></p>&

105、lt;p>  if((p2&0x01)==0)</p><p><b>  {</b></p><p>  if((lu&0x01)==1)</p><p><b>  {</b></p><p><b>  z=0;</b></p><

106、;p>  jinwei(z);</p><p><b>  }</b></p><p><b>  }</b></p><p>  if((p2&0x02)==0)</p><p><b>  {</b></p><p>  if((lu

107、&0x02)==2)</p><p><b>  {</b></p><p><b>  z=1;</b></p><p>  jinwei(z);</p><p><b>  }</b></p><p><b>  }</b&g

108、t;</p><p>  if((p2&0x04)==0)</p><p><b>  {</b></p><p>  if((lu&0x04)==4)</p><p><b>  {</b></p><p><b>  z=2;</b>

109、</p><p>  jinwei(z);</p><p><b>  }</b></p><p><b>  }</b></p><p>  if((p2&0x08)==0)</p><p><b>  {</b></p><

110、;p>  if((lu&0x08)==0x08)</p><p><b>  {</b></p><p><b>  z=3;</b></p><p>  jinwei(z);</p><p><b>  }</b></p><p><

111、;b>  }</b></p><p>  if((p2&0x10)==0)</p><p><b>  {</b></p><p>  if((lu&0x10)==0x10)</p><p><b>  {</b></p><p><b

112、>  z=4;</b></p><p>  jinwei(z);</p><p><b>  }</b></p><p><b>  }</b></p><p>  if((p2&0x20)==0)</p><p><b>  {</

113、b></p><p>  if((lu&0x20)==0x20)</p><p><b>  {</b></p><p><b>  z=5;</b></p><p>  jinwei(z);</p><p><b>  }</b><

114、/p><p><b>  }</b></p><p>  if((p2&0x40)==0)</p><p><b>  {</b></p><p>  if((lu&0x40)==0x40)</p><p><b>  {</b></

115、p><p><b>  z=6;</b></p><p>  jinwei(z);</p><p><b>  }</b></p><p><b>  }</b></p><p>  if((p2&0x80)==0)</p><p

116、><b>  {</b></p><p>  if((lu&0x80)==0x80)</p><p><b>  {</b></p><p><b>  z=7;</b></p><p>  jinwei(z);</p><p><b

117、>  }</b></p><p><b>  }</b></p><p>  void main()</p><p><b>  {</b></p><p>  unsigned char i=0,j=0,p2;</p><p><b>  a=

118、0xff;</b></p><p>  //temp=0xff;</p><p>  SFRPAGE=0x0F; </p><p>  P1MDIN=0XFF; //P1口初始化</p><p>  P1MDOUT=0XEF; //推挽輸出 </p><p>  P2MDIN=0xFF;&l

119、t;/p><p>  P2MDOUT=0xfF;</p><p>  XBR1=0x40; //交叉開關(guān)使能 </p><p>  PCA0MD=0x00; //關(guān)閉看門狗clear Watchdog</p><p>  PSCTL=0x03; //寫FLESH允許</p&g

120、t;<p>  OSCXCN=0x67; //用外晶振</p><p>  OSCICN=0x0; //內(nèi)部振蕩器使能,8分頻</p><p>  CLKSEL=0x01; //系統(tǒng)時鐘選內(nèi)部高頻振蕩器,不預(yù)分頻</p><p>  //Write24();</p><p><b>  Read24

121、();</b></p><p>  TMOD=0x01; //設(shè)置定時器0為工作方式1</p><p><b>  TH0=0x28;</b></p><p><b>  TL0=0x00;</b></p><p>  EA=1; //開總中斷</p>

122、<p>  ET0=1; //開定時器0中斷</p><p>  TR0=1; //啟動定時器0</p><p><b>  while(1)</b></p><p><b>  {</b></p><p>  a=HC165();//獲取按鍵鍵碼</p&g

123、t;<p>  qingling(a);//相應(yīng)用戶數(shù)據(jù)清零</p><p><b>  delay();</b></p><p>  a=0xff;//將a的值鎖定,防止誤影響</p><p>  p2=P2;//獲取P2口的編碼</p><p>  delay();//延時消抖</p>

124、<p>  if(p2==P2)//確認(rèn)確實有脈沖過來</p><p><b>  {</b></p><p>  saomiao(p2);</p><p>  Write24();</p><p><b>  }</b></p><p><b>  }&

125、lt;/b></p><p><b>  }</b></p><p>  void DS() interrupt 1</p><p><b>  {</b></p><p><b>  TH0=0x28;</b></p><p><b>

126、  TL0=0x00;</b></p><p>  if(++n==20) //n用來控制中斷的次數(shù)</p><p><b>  { </b></p><p><b>  n=0;</b></p><p>  for(k=0;k<8;k++)</p><p>

127、;<b>  {</b></p><p>  m=zf[yh[j][k]];//變化</p><p>  if(k==2)//顯示小數(shù)點</p><p><b>  {</b></p><p><b>  m=m&0xf7;</b></p><p&g

128、t;<b>  }</b></p><p>  for(i=0;i<8;i++)</p><p><b>  { </b></p><p><b>  CLK=0;</b></p><p>  DIN=m&0x01; //164的數(shù)據(jù)輸入dsa&dsb,

129、m中的八位數(shù)據(jù)bit by bit移動</p><p>  CLK=1;//時鐘發(fā)生跳變,產(chǎn)生移位</p><p>  m=m>>1;//數(shù)據(jù)右移</p><p><b>  }</b></p><p><b>  }</b></p><p>  j=(j+1

130、)%8;</p><p><b>  }</b></p><p><b>  }</b></p><p>  unsigned char HC165(void)</p><p><b>  {</b></p><p>  unsigned char i;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論