基于單片機(jī)的智能電表_第1頁(yè)
基于單片機(jī)的智能電表_第2頁(yè)
基于單片機(jī)的智能電表_第3頁(yè)
基于單片機(jī)的智能電表_第4頁(yè)
基于單片機(jī)的智能電表_第5頁(yè)
已閱讀5頁(yè),還剩41頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

目錄摘要 iAbstract ii1.前言 11.1智能電表的概念 11.2智能電表的發(fā)展背景 12設(shè)計(jì)總體方案論證 22.1單片機(jī)的方案選擇 22.2數(shù)字時(shí)鐘方案 32.3電能檢測(cè)方案 42.4顯示電路的選擇 62.5電源電路的選擇 72.6基于單片機(jī)的智能電表的設(shè)計(jì)系統(tǒng)方案 83系統(tǒng)硬件設(shè)計(jì) 103.1單片機(jī)設(shè)計(jì)方案 103.2時(shí)鐘日歷芯片設(shè)計(jì) 153.3電能檢測(cè)系統(tǒng)的設(shè)計(jì) 173.4LCD顯示電路 183.5鍵盤控制系統(tǒng)的設(shè)計(jì) 193.6繼電器電路 203.7電源電路 204系統(tǒng)軟件設(shè)計(jì) 214.1AltiumDesigner10軟件 214.2編程軟件keil 214.2.1主程序設(shè)計(jì) 224.2.2鍵盤掃描程序 244.2.3LCD1602顯示子程序 254.3protues軟件 25總結(jié) 27參考文獻(xiàn) 40.前言1.1智能電表的概念智能電表它是科技時(shí)代的新產(chǎn)物,它能夠進(jìn)行測(cè)量、數(shù)據(jù)處理,因此測(cè)量單元、數(shù)據(jù)處理單元是它的重要組成部分。在智能電表這一系統(tǒng)中,它能通過(guò)各類型的芯片來(lái)進(jìn)行電能的測(cè)量、計(jì)算、存儲(chǔ),并且具有實(shí)時(shí)監(jiān)控功能和自動(dòng)控制等功能。和傳統(tǒng)的電能表相比。計(jì)量功能是智能電表的最基本的功能,而它本身就是一個(gè)電子式的電表,并且它能夠通過(guò)端口與外部時(shí)鐘進(jìn)行通訊。微處理器(微控制器)是智能電表的最重要的核心設(shè)備。沒(méi)有它,智能電表不能存儲(chǔ),分析,判斷和處理大量的測(cè)量數(shù)據(jù)。智能儀表通常具有自動(dòng)地檢測(cè)數(shù)據(jù),數(shù)據(jù)轉(zhuǎn)換和自動(dòng)調(diào)零功能,以及通過(guò)操作面板進(jìn)行顯示數(shù)據(jù)的功能。本次設(shè)計(jì)的智能電表主要運(yùn)用了微機(jī)和通信等兩方面的技術(shù),為了減少能耗,把采集數(shù)據(jù)和處理數(shù)據(jù)等功能運(yùn)用芯片進(jìn)行,這樣既可以節(jié)省了成本以及人力資源,還可以增加其工作的效率,可以滿足了現(xiàn)代的用電戶的需求。1.2智能電表的發(fā)展背景電表誕生于1880年,最早的電表是以電磁感應(yīng)為基本原理制造而成。為了滿足工業(yè)化和電源管理發(fā)展的需要,電子儀表已經(jīng)出現(xiàn)。基于感應(yīng)原始電子儀表仍然具有測(cè)量的功能,但所述盤的旋轉(zhuǎn)成為一個(gè)電脈沖;其次是基于乘數(shù)原理的電子式電能表,數(shù)字倍增器電子儀表具有擴(kuò)展功能,適用于自動(dòng)化系統(tǒng)集成等特點(diǎn),已成為當(dāng)今電表的主要發(fā)展方向。目前,智能電表主要分為電感式,電子式和智能型等幾種類型,我國(guó)生產(chǎn)的電能表不僅可以滿足地區(qū)和國(guó)家的市場(chǎng)需求,而且我們還有有價(jià)格優(yōu)勢(shì)。因此,中國(guó)的電能表在世界各個(gè)市場(chǎng)都具有良好的競(jìng)爭(zhēng)水平。隨著中國(guó)電網(wǎng)的不斷智能化,我們對(duì)電表等電能計(jì)量裝置的要求也在不斷提高。中國(guó)的電網(wǎng)技術(shù)與國(guó)外的相關(guān)科技差別不大。同時(shí),它還是低碳經(jīng)濟(jì),可持續(xù)發(fā)展道路的重要的部分,因此其發(fā)展前景相當(dāng)樂(lè)觀。與國(guó)外同類產(chǎn)品相比,中國(guó)智能電表具有完善,規(guī)范,分類單價(jià)和控制負(fù)荷的功能,均高于其他國(guó)家。它更能滿足中國(guó)現(xiàn)代智能電網(wǎng)建設(shè)的需要。目前,中國(guó)的用戶數(shù)量非常龐大。根據(jù)2009年的統(tǒng)計(jì)數(shù)據(jù),截至年底,國(guó)家電網(wǎng)公司的服務(wù)系統(tǒng)已錄得2.3億戶家庭。根據(jù)每戶4戶的平均數(shù),有人口10.4億,在全國(guó)推廣智能電表并非易事。它不僅需要巨額資金,而且需要大量的人力,物力和長(zhǎng)時(shí)間的執(zhí)行。同時(shí),智能電表的功能多樣化,顯示的數(shù)據(jù)類型很多,用戶可以準(zhǔn)備更多的電力服務(wù),但更換電表也需要得到用戶的同意,理解和包容,所以用戶還必須對(duì)一對(duì)智能電表有一定的了解,所以我們必須調(diào)動(dòng)各行各業(yè)的力量生命有效地宣傳這一點(diǎn)。由于國(guó)家電網(wǎng)公司發(fā)布了一系列的計(jì)劃,智能電網(wǎng)改革,電表和智能,自動(dòng)化產(chǎn)業(yè)的發(fā)展面臨著前所未有的發(fā)展前景。智能電表是智能電網(wǎng)的智能終端。它不是傳統(tǒng)意義上的功率計(jì)。除了傳統(tǒng)的電能表的基本計(jì)量的功能,智能電表還具有雙向數(shù)據(jù)通信功能,并且有防偷電功能等,以適應(yīng)使用智能電網(wǎng)的發(fā)展趨勢(shì)。本文的主要任務(wù)是系統(tǒng)的硬件電路設(shè)計(jì)和軟件的設(shè)計(jì)。硬件電路采用模塊化設(shè)計(jì),包括接口電路、用電量檢測(cè)電路、繼電器驅(qū)動(dòng)電路、LCD顯示電路等,詳細(xì)介紹了各單元的工作原理;系統(tǒng)軟件采用C語(yǔ)言編制,給出了具體的程序流程圖。系統(tǒng)具有電量信息顯示、掉電記憶、定時(shí)供停電、繼電器智能開(kāi)關(guān)控制、防干擾等功能。2設(shè)計(jì)總體方案論證本多功能智能電表可分為以下幾個(gè)模塊電路組成:?jiǎn)纹瑱C(jī)模塊,時(shí)鐘模塊,電能檢測(cè)模塊,液晶顯示模塊和電源模塊等。2.1單片機(jī)的方案選擇在嵌入式領(lǐng)域中有多種微處理器可以選擇,比如FPGA、DSP、單片機(jī)、ARM等,在這些處理器中單片機(jī)的價(jià)格最低,性能適中,適合此類場(chǎng)合。下面介紹一些常見(jiàn)類型的微控制器:方案一:51系列單片機(jī)。51單片機(jī)是對(duì)所有兼容Intel8031\t"/item/51%E5%8D%95%E7%89%87%E6%9C%BA/_blank"指令系統(tǒng)的\t"/item/51%E5%8D%95%E7%89%87%E6%9C%BA/_blank"單片機(jī)的統(tǒng)稱,其代表型號(hào)是\t"/item/51%E5%8D%95%E7%89%87%E6%9C%BA/_blank"ATMEL公司的AT89系列,它廣泛應(yīng)用于工業(yè)測(cè)控系統(tǒng)之中。很多公司都有51系列的兼容機(jī)型推出,今后很長(zhǎng)的一段時(shí)間內(nèi)將占有大量市場(chǎng)。51單片機(jī)是基礎(chǔ)入門的一個(gè)單片機(jī),還是應(yīng)用最廣泛的一種。需要注意的是51系列的單片機(jī)一般不具備自編程能力。方案二:MSP430MSP430系列是一個(gè)16位、具有精簡(jiǎn)指令集、超低功耗的混合型單片機(jī),由于它具有極低的功耗、豐富的片內(nèi)外設(shè)和方便靈活的開(kāi)發(fā)手段,已成為眾多單片機(jī)系列中一顆耀眼的新星。片上集成了AD、DA、PWM、LCD驅(qū)動(dòng),其比較器AD采樣方式能達(dá)到很高的精度,開(kāi)發(fā)系統(tǒng)也很便宜。缺點(diǎn)是在位操作時(shí)有點(diǎn)麻煩,不適合用于邏輯控制以及對(duì)功耗不敏感的使用場(chǎng)合。從成本、開(kāi)發(fā)的難易程度考慮,使用STC89C52單片機(jī)。它是一種低功率,高性能CMOS8位微控制器具有8K可編程閃存,與80C51產(chǎn)品說(shuō)明書和銷,閃光的8K字節(jié),256個(gè)字節(jié)RAM,32位I/O端口線,看門狗定時(shí)器,2數(shù)據(jù)完全兼容指針,3個(gè)16位的定時(shí)器/計(jì)數(shù)器,16-載體2級(jí)中斷結(jié)構(gòu),全雙工串行端口和時(shí)鐘電路。2.2數(shù)字時(shí)鐘方案數(shù)字時(shí)鐘是本設(shè)計(jì)的最重要的部分,有兩種方案可以選擇。方案一:本方案采用Dallas公司的專用時(shí)鐘芯片DS1302。低功耗,高性能實(shí)時(shí)時(shí)鐘芯片,具有31字節(jié)靜態(tài)RAM,使用SPI三線接口與微控制器同步通信,并能夠以突發(fā)模式傳輸多個(gè)字節(jié)的時(shí)鐘和RAM數(shù)據(jù)一時(shí)間實(shí)時(shí)時(shí)鐘可以提供年,月,日,周,小時(shí),秒,每月可自動(dòng)調(diào)整不到31天,并具有閏年補(bǔ)償。工作電壓為2.5~5.5V。它由雙電源供電(主電源和備用電源),或者可以使用備用電源進(jìn)行設(shè)置,該備用電源能夠以精細(xì)電流為備用電源充電。它確保時(shí)鐘在意外情況下仍能正常工作,例如電源電壓不足或突然斷電。當(dāng)電源電壓不足或突然斷電時(shí),系統(tǒng)會(huì)自動(dòng)切換到外部備用電池供電系統(tǒng)。即使系統(tǒng)未通電,備用電池也可以在程序未執(zhí)行時(shí)確保芯片的正常運(yùn)行,并且可以隨時(shí)提供正確的時(shí)間。方案二:本方案完全用軟件實(shí)現(xiàn)數(shù)字時(shí)鐘。原理為:在單片機(jī)內(nèi)部存儲(chǔ)器設(shè)三個(gè)字節(jié)分別存放時(shí)鐘的時(shí)、分、秒信息。使用定時(shí)中斷與軟件結(jié)合來(lái)實(shí)現(xiàn)1秒定時(shí)中斷,每產(chǎn)生一次中斷,存儲(chǔ)器內(nèi)對(duì)應(yīng)的秒值加1;當(dāng)秒值達(dá)到60,則將其清零,并將相應(yīng)的分值加1;若分值達(dá)到60,則清零分字節(jié),并將時(shí)字節(jié)值加1;當(dāng)時(shí)值達(dá)到24,則將十字節(jié)清零。這種方案具有硬件電路簡(jiǎn)單的特點(diǎn)。然而,每次執(zhí)行程序時(shí),定時(shí)器都要重新賦初值,所以該時(shí)鐘精度較低。而且,因?yàn)槭擒浖?lái)實(shí)現(xiàn)時(shí)鐘,當(dāng)單片機(jī)斷電時(shí),程序?qū)⒉辉賵?zhí)行,時(shí)鐘也會(huì)停止工作?;诒驹O(shè)計(jì)精度的考慮,這里采用方案一完成數(shù)字時(shí)鐘的功能。2.3電能檢測(cè)方案電能檢測(cè)的工作原理為:由分壓器完成電壓取樣,由取樣電阻完成電流取樣,取樣后的電機(jī)交換的通道以及外圍的電路組成。信號(hào)的輸入輸出通道主要能夠讓模擬信號(hào)以及數(shù)字信號(hào)通過(guò),從而與外部進(jìn)行數(shù)據(jù)交換,輸入輸出通道主要包括傳感器元器件、數(shù)模轉(zhuǎn)換器、調(diào)理信號(hào)電路部分以及模數(shù)轉(zhuǎn)換器。微處理器和它的外圍電路這部分主要是用來(lái)儲(chǔ)存數(shù)據(jù)和程序的,并且在單片機(jī)里面能夠?qū)?shù)據(jù)進(jìn)行一定的運(yùn)算和處理,這部分主要由數(shù)據(jù)寄存器和程序寄存器以及輸入輸出端口電路的部分組成的。人機(jī)交換的通道顧名思義就是人與機(jī)器進(jìn)行互相交流的重要通道,它通常包括鍵盤部分、數(shù)碼撥盤部分、打印機(jī)部分、顯示部分等部分構(gòu)成的。標(biāo)準(zhǔn)的通訊接口很明顯就是用來(lái)與計(jì)算機(jī)進(jìn)行交流的端口,這些端口方便計(jì)算機(jī)對(duì)被控器件進(jìn)行有效的控制。在智能電表中,監(jiān)測(cè)程序和端口管理程序這兩部分就構(gòu)成了其軟件部分。其中接口管理程序主要是面向通信接口,它的主要作用就是接受并且分析各種各樣的程控碼,主要包括各種操作方式的程控碼、不同功能的程控碼以及各種工作參數(shù)的程控碼等等,以此同時(shí)各器件的實(shí)時(shí)工作狀態(tài)以及不同測(cè)量數(shù)據(jù)的處理結(jié)果都會(huì)通過(guò)通信接口的輸出儀器部分,以這種方法來(lái)響應(yīng)計(jì)算機(jī)的遠(yuǎn)程控制指令。而監(jiān)測(cè)程序就實(shí)現(xiàn)對(duì)鍵盤模塊和顯示模塊進(jìn)行操作,它可以設(shè)定某一按鍵的功能并存儲(chǔ)相應(yīng)的工作參數(shù)和運(yùn)行方式,它可以通過(guò)I/O口對(duì)數(shù)據(jù)進(jìn)行采樣并且設(shè)定好數(shù)據(jù)的類型等參數(shù),還可以通過(guò)相應(yīng)的指令對(duì)數(shù)據(jù)寄存器中的數(shù)據(jù)和狀態(tài)進(jìn)行不同的分析處理,最后電壓、電流信號(hào)由乘法器轉(zhuǎn)換為功率信號(hào),經(jīng)V/F變換后,將脈沖信號(hào)輸入單片機(jī)系統(tǒng)進(jìn)行處理。本設(shè)計(jì)選用ADE7755制作電能檢測(cè)模塊,它是一種高精度的電功率測(cè)量芯片,其成本也較為便宜。2.3.1ADE7755的內(nèi)部功能框圖圖1ADE7755的內(nèi)部功能框圖它由兩個(gè)部分組成:模擬電路(模擬-數(shù)字轉(zhuǎn)換電路、基準(zhǔn)電路和電源電壓監(jiān)視電路)和數(shù)字信號(hào)處理電路。測(cè)量的電壓和電流由ADC換成數(shù)字量由相位校正電路、高通濾波器、乘法器、低通濾波器、頻率轉(zhuǎn)換器等實(shí)現(xiàn)數(shù)字信號(hào)處理以方便計(jì)量。

2.3.2ADE7755線路連接圖ADE7755線路連接圖如圖2圖2ADE7755線路連接圖此電路主要由ADE7755芯片、電流互感器、晶振等組成。大電流先從I+、I-端流入,電流互感器以1000:1的比例關(guān)系將大電流轉(zhuǎn)化為小電流,從Q+、Q-端流出,再經(jīng)過(guò)R11和R12兩個(gè)電阻轉(zhuǎn)化為可用于測(cè)量的交流電壓,并經(jīng)R13、C6和R17、C7組成的濾波網(wǎng)絡(luò)濾波后送到ADE7755的測(cè)量通道V1;因?yàn)閂1P、V1N端口只能允許470mV的電壓通過(guò),由V=RI得,允許最大通過(guò)電流為0.47/200=2.35mA,所以最大測(cè)量電流為2.35mA*1000=2.35A。交流大電壓通過(guò)隔離變壓器降為小電壓,再經(jīng)過(guò)由R15和R16組成的分壓電路,信號(hào)衰減100倍濾波后送到ADE7755的測(cè)量通道V2;V2P和V2N端口最大允許630mV電壓通過(guò)。3.58MHZ的晶振為ADE7755芯片提供穩(wěn)定的工作時(shí)鐘;有功功率瞬時(shí)值從引腳CF以頻率方式輸出,用單片機(jī)對(duì)此端口的頻率進(jìn)行檢測(cè)可得到成線性比例關(guān)系的功率值。本電路中的CF(22腳)接到單片機(jī)的P3.4口,I+和I-接到220V交流線路上,AC端接到隔離變壓器的相輸出端。電流互感器在本測(cè)量作用電路中起到很重要的作用,它的性能會(huì)直接影響電表的精度和測(cè)量范圍。其特性表如表1:表1特性表電流互感器額定一次電流5A相位差(0負(fù)載)<10分額定二次電流5mA常通一次電流15A比值差(0負(fù)載)±0.1%最大可測(cè)量一次電流30A比值差非線性度(0負(fù)載)<0.1%線性工作范圍0—30A(負(fù)載5.1Ω)從表中可以看出,本電路中的電流互感器的精度為0.1%,可最大測(cè)量30A的電流,轉(zhuǎn)換比為1000:1。2.4顯示電路的選擇常用的單片機(jī)顯示電路被分為兩類:LED顯示和LCD顯示:方案一:LED顯示屏:是由若干個(gè)LCD顯示屏組成,LCD顯示屏(LEDSegmentDisplays)由多個(gè)發(fā)光二極管封裝在一起組成“8”字型的器件,引線已在內(nèi)部連接完成,只需引出它們的各個(gè)筆劃,公共電極。數(shù)碼管實(shí)際上是由七個(gè)發(fā)光管組成8字形構(gòu)成的,加上小數(shù)點(diǎn)就是8個(gè)。這些段分別由字母a,b,c,d,e,f,g,dp來(lái)表示。當(dāng)數(shù)碼管特定的段加上電壓后,這些特定的段就會(huì)發(fā)亮,以形成我們眼睛看到的字樣了。如:顯示一個(gè)“2”字,那么應(yīng)當(dāng)是a亮b亮g亮e亮d亮f不亮c不亮dp不亮。方案二:LCD顯示屏:分為段式LCD和點(diǎn)陣式LCD,對(duì)于普通的段式LCD,需要專門的驅(qū)動(dòng)電路,LCD顯示的可視角度較小,本身不發(fā)光;對(duì)于具有驅(qū)動(dòng)電路和微處理器接口的液晶顯示模塊(字符或點(diǎn)陣),一般采用并行接口,對(duì)微處理器的接口要求較高,占用資源多,但顯示內(nèi)容豐富。LCD1602液晶顯示屏:也叫1602字符型液晶,它是一種專門用來(lái)顯示字母、數(shù)字、符號(hào)等的點(diǎn)陣型液晶模塊。它由若干個(gè)5X7或者5X11等點(diǎn)陣字符位組成,每個(gè)點(diǎn)陣字符位都可以顯示一個(gè)字符,每位之間有一個(gè)點(diǎn)距的間隔,每行之間也有間隔,起到了字符間距和行間距的作用,正因?yàn)槿绱怂运荒芎芎玫仫@示圖形(用自定義CGRAM,顯示效果也不好)。LCD128642LCD:帶中文字庫(kù)的128X64是一種4位/8位并行,2線或3線串行接口。它包含點(diǎn)陣液晶顯示器和國(guó)家標(biāo)準(zhǔn)的一級(jí)和二級(jí)簡(jiǎn)體漢字庫(kù)。模塊;其顯示分辨率為128×64,內(nèi)置8192個(gè)16*16點(diǎn)漢字,128個(gè)16*8點(diǎn)ASCII字符集。靈活的界面模式和簡(jiǎn)單方便的操作指令,可以形成完整的中文語(yǔ)言。人機(jī)交互圖形界面。它可以顯示8×4行16×16點(diǎn)陣漢字。它還可以完成圖形顯示。低電壓和低功耗是另一個(gè)顯著特征。由模塊組成的液晶顯示方案比同類型的圖形點(diǎn)陣液晶顯示模塊緊湊得多,無(wú)論硬件電路結(jié)構(gòu)或顯示程序如何,模塊的價(jià)格略低于圖形液體相同點(diǎn)陣的晶體模塊。顯示模塊采用具有漢字圖形顯示功能的點(diǎn)陣液晶12864,內(nèi)置漢字庫(kù)使用更方便。本設(shè)計(jì)選用顯示豐富靈活的LCD1602液晶顯示屏作為顯示模塊。2.5電源電路的選擇根據(jù)調(diào)整管的工作狀態(tài),我們常把穩(wěn)壓電源分成兩類:線性穩(wěn)壓電源和開(kāi)關(guān)穩(wěn)壓電源。我們通過(guò)一個(gè)表格來(lái)對(duì)比它們的優(yōu)缺點(diǎn),這樣有利于我選擇出適合該設(shè)計(jì)所需的電源電路,從而使我的設(shè)計(jì)更具有可靠性和實(shí)用性。開(kāi)關(guān)穩(wěn)壓電源和線性穩(wěn)壓電源的優(yōu)缺點(diǎn)如表2表2開(kāi)關(guān)穩(wěn)壓電源和線性穩(wěn)壓電源的比較開(kāi)關(guān)穩(wěn)壓電源線性穩(wěn)壓電源定義開(kāi)關(guān)電源是利用現(xiàn)代電力電子技術(shù),控制開(kāi)關(guān)管開(kāi)通和關(guān)斷的時(shí)間比率,維持穩(wěn)定輸出電壓的一種電源,開(kāi)關(guān)電源一般由脈沖寬度調(diào)制(PWM)控制IC和MOSFET構(gòu)成比較早使用的一類直流穩(wěn)壓電源優(yōu)點(diǎn)功耗低、小型、輕量和高效率輸出電壓比輸入電壓低;反應(yīng)速度快,輸出紋波較?。还ぷ鳟a(chǎn)生的噪聲低缺點(diǎn)設(shè)計(jì)復(fù)雜、維修不方便效率較低;發(fā)熱量大(尤其是大功率電源)間接地給系統(tǒng)增加熱噪聲因本設(shè)計(jì)電路功耗較低,采用開(kāi)關(guān)穩(wěn)壓電源較為合適,選用220V/5V穩(wěn)壓模塊為單片機(jī)、顯示屏和其他電路提供+5V電源。2.6基于單片機(jī)的智能電表的設(shè)計(jì)系統(tǒng)方案本設(shè)計(jì)選用ADE7755制作電能檢測(cè)模塊。時(shí)鐘芯片DS1302采用雙電源供電(主電源和備用電源),可設(shè)置備用電源充電方式,提供了對(duì)后備電源進(jìn)行涓細(xì)電流充電的能力,即使在斷電的情況下也能使計(jì)時(shí)準(zhǔn)確。同時(shí)采用LCD1602液晶顯示,通過(guò)軟件編程可以完成更多的附加功能,對(duì)單片的利用率更高,更加能滿足現(xiàn)代生活的需要。其中電表的時(shí)間、定時(shí)開(kāi)關(guān)機(jī)時(shí)間通過(guò)鍵盤來(lái)進(jìn)行調(diào)節(jié)。以上功能通過(guò)七個(gè)模塊:電源、時(shí)鐘模塊、電能模塊、單片機(jī)、LCD顯示屏、鍵盤和繼電器電路即可滿足設(shè)計(jì)要求。本系統(tǒng)的電路設(shè)計(jì)方框圖如圖3所示,它由七部分組成:1、電源為5V直流電;2、時(shí)鐘模塊采用DS13023、電能檢測(cè)芯片采用ADE77554、微型控制器部分芯片采用單片機(jī)STC89C52;5、顯示部分采用LCD1602顯示屏來(lái)顯示;6、繼電器電路由三極管和繼電器組成;7、按鍵用來(lái)調(diào)節(jié)時(shí)間和定時(shí)開(kāi)關(guān)機(jī)。電源模塊電源模塊時(shí)鐘模塊DS1302電源單片機(jī)STC89C52顯示屏LCD1602按鍵繼電器電路圖3系統(tǒng)原理框圖3系統(tǒng)硬件設(shè)計(jì)3.1單片機(jī)設(shè)計(jì)方案單片機(jī)是一個(gè)微型計(jì)算機(jī)的主要分支。其結(jié)構(gòu)特征使其能夠由CPU,存儲(chǔ)器,計(jì)時(shí)器,以及各種輸入/輸出接口電路大規(guī)模非常集成電路芯片上集成。在其組成和功能方面,單片機(jī)是一臺(tái)微型計(jì)算機(jī)。單片機(jī)的性價(jià)比非常高、集成度高、體積小、有很高的可靠性,而且具有很強(qiáng)的控制功能,耗能小,電壓低,操作時(shí)較為安全。它外部總線增加了I2C、SPI等串行總線方式,進(jìn)一步縮小了體積,簡(jiǎn)化了結(jié)構(gòu),其系統(tǒng)擴(kuò)展、系統(tǒng)配置較典型、規(guī)范,容易構(gòu)成各種規(guī)模的應(yīng)用系統(tǒng)。因此,微型計(jì)算機(jī)被廣泛用于智能電表,機(jī)電一體化,實(shí)時(shí)控制,分布式多處理器系統(tǒng),以及人們的生活各個(gè)角落。單片機(jī)應(yīng)用具有十分重要的意義,它已經(jīng)從根本上改變了傳統(tǒng)控制系統(tǒng)的設(shè)計(jì)思路和方法。大多數(shù)過(guò)去的必須是功能性的模擬電路或數(shù)字電路實(shí)現(xiàn)的功能,單片機(jī)的軟件已能夠全部實(shí)現(xiàn)。由軟件代替硬件控制技術(shù),是生產(chǎn)控制技術(shù)的一場(chǎng)革命。使用單片機(jī)的智能性,智能電表可以很容易地設(shè)計(jì)成具有智能功能的。微控制器有一個(gè)時(shí)鐘振蕩系統(tǒng),微處理器系統(tǒng)利用時(shí)鐘定時(shí)器/計(jì)數(shù)器功能來(lái)實(shí)現(xiàn)智能電表功能。然而,這種設(shè)計(jì)系統(tǒng)時(shí)鐘誤差較大時(shí),累積誤差也更大,因此它可以通過(guò)糾錯(cuò)軟件進(jìn)行修正,或添加設(shè)計(jì)高精度時(shí)鐘日歷芯片,以達(dá)到精確的時(shí)間。還有很多不同的微控制器功能都是兼容的,這就比較容易實(shí)現(xiàn)產(chǎn)品的多功能性。目前在單片機(jī)系統(tǒng)中,廣泛使用8XC5X主微處理器芯片微控制器系列。該設(shè)備是標(biāo)準(zhǔn)MCS-51內(nèi)核,兼容的硬件資源,種類齊全,功能完善,性能穩(wěn)定,體積小,價(jià)格低,貨源充足,方便調(diào)試和編程,所以應(yīng)用廣泛。例如,常用的STC89C52單片機(jī)如圖4,具有8KB閃存可編程可擦除只讀存儲(chǔ)器(EEPROM)的低電壓,高性能CMOS8位微型計(jì)算機(jī)。有32個(gè)可編程I/O引腳,2個(gè)16位定時(shí)器/計(jì)數(shù)器,6個(gè)中斷源,可編程串行UART通道,可直接驅(qū)動(dòng)LED輸出。系統(tǒng)內(nèi)部的閃存芯片可適于允許程序或用常規(guī)的非易失性存儲(chǔ)器編程到程序。因此,STC89C52是一款功能強(qiáng)大,靈活性高和價(jià)格合理的單芯片,可在各種控制領(lǐng)域很容易地應(yīng)用。圖4圖4STC89C52單片機(jī)STC89C52系列單片機(jī)的封裝形式共分為DIP、PLCC及PQEP3中形式,常用的是DIP封裝方式。STC89C52單片機(jī)共40個(gè)引腳,大致可分為4類:具體說(shuō)明如表3表3STC89C52單片機(jī)引腳名稱及功能表引腳名稱功能電源引腳Vcc(40腳)電源端,+5VVss(20腳)接地端(GND)時(shí)鐘電路引腳XTAL1(19腳)外部接晶振輸入端XTAL2(18腳)外部接晶振輸出端I/O引腳P0口(39~32腳)P0口是一組8位的漏極開(kāi)路型雙向I/O口,也是地址和數(shù)據(jù)的總線復(fù)用口P1口(1~8腳)P1口是一組帶內(nèi)部上拉電阻的8位準(zhǔn)雙向I/O口,可驅(qū)動(dòng)4個(gè)TTL門電路P2口(21~28腳)P2口是一組帶內(nèi)部上拉電阻的8位準(zhǔn)雙向I/O口,可驅(qū)動(dòng)4個(gè)TTL門電路P3口(10~17腳)P3口是一組帶內(nèi)部上拉電阻的8位準(zhǔn)雙向I/O口,該端口的每個(gè)引腳都有第二功能控制線引腳RST(9腳)復(fù)位端EA/VPP(31腳)片外的存儲(chǔ)器選擇端/Flash存儲(chǔ)器編程電源ALE/PROG(30腳)地址鎖存允許端/編程脈沖輸入端PSEN(29腳)讀片外程序存儲(chǔ)器選通信號(hào)輸入端STC89C52單片機(jī)最大的特點(diǎn)就是有ISP/IAP功能,它具有4K字節(jié)的EEPROM。其內(nèi)部集成的EEPROM是與程序空間分開(kāi)的,內(nèi)部寄存器和功能描述如表4下:表4STC89C52RC、STC89LE52RC單片機(jī)內(nèi)部EEPROM地址表名稱地址功能描述D7D6D5D4D3D2D1D0復(fù)位值ISP_DATAE2hFlash數(shù)據(jù)寄存器11111111ISP_ADDRHE3hFlash高字節(jié)地址寄存器00000000ISP_ADDRLE4hFlash低字節(jié)地址寄存器00000000ISP_CMDE5hFlash命令模式寄存器----------MS2MS1MS0XXXXX000ISP_TRIGE6hFlash命令觸發(fā)寄存器XXXXXXXXISP_CONTRE7hISP/IAP寄存器ISPENSWBSSWRST----WT2WT1WT0000XX000ISP_DATA:ISP/IAP操作時(shí)的數(shù)據(jù)寄存器。ISP/IAP從Flash讀出的數(shù)據(jù)放在此處,向Flash寫入的數(shù)據(jù)也需放在此處。ISP_ADDRH:ISP/IAP操作時(shí)的地址寄存器高八位。ISP_ADDRL:ISP/IAP操作時(shí)的地址寄存器低八位。ISP_CMD:ISP/IAP操作時(shí)的命令模式寄存器,須命令觸發(fā)寄存器觸發(fā)方可生效。命令模式如表5所示。表5ISP_CMD寄存器模式設(shè)置D7D6D5D4D3D2D1D0模式選擇保留命令選擇----------000待機(jī)模式,無(wú)ISP操作----------001對(duì)用戶的應(yīng)用程序flash區(qū)及數(shù)據(jù)flash區(qū)字節(jié)讀----------010對(duì)用戶的應(yīng)用程序flash區(qū)及數(shù)據(jù)flash區(qū)字節(jié)編輯----------011對(duì)用戶的應(yīng)用程序flash區(qū)及數(shù)據(jù)flash區(qū)扇區(qū)刪除程序在系統(tǒng)ISP程序區(qū)時(shí)可以對(duì)用戶應(yīng)用程序區(qū)/數(shù)據(jù)Flash區(qū)(EEPROM)進(jìn)行字節(jié)讀/字節(jié)編程/扇區(qū)擦除;程序在用戶應(yīng)用程序區(qū)時(shí),僅可以對(duì)數(shù)據(jù)Flash區(qū)(EEPROM)進(jìn)行字節(jié)讀/字節(jié)編程/扇區(qū)擦除。STC89C51RC/RD+系列單片機(jī)出廠時(shí)已經(jīng)固化有ISP引導(dǎo)碼,并設(shè)置為上電復(fù)位進(jìn)入ISP程序區(qū),并且出廠時(shí)就已完全加密。ISP_TRIG:ISP/IAP操作時(shí)的命令觸發(fā)寄存器。在ISPEN(ISP_CONTR.7)=1時(shí),對(duì)ISP_TRIG先寫入46h,再寫入B9h,ISP/IAP命令才會(huì)生效。STC89C52RC,STC89LE52RC單片機(jī)內(nèi)部可用DataFlash(EEPROM)的地址如表6所示表6STC89C52RC、STC89LE52RC單片機(jī)內(nèi)部EEPROM地址表第一扇區(qū)第二扇區(qū)第三扇區(qū)第四扇區(qū)起始地址結(jié)束地址起始地址結(jié)束地址起始地址結(jié)束地址起始地址結(jié)束地址2000H21FFH2200H23FFH2400H25FFH2600H27FFH第五扇區(qū)第六扇區(qū)第七扇區(qū)第八扇區(qū)起始地址結(jié)束地址起始地址結(jié)束地址起始地址結(jié)束地址起始地址結(jié)束地址2800H29FFH2A00H2BFFH2C00H2DFFH2E00H2FFFH單片機(jī)最小系統(tǒng)主要由復(fù)位電路,晶振電路,電源等幾部分組成。1.復(fù)位電路復(fù)位電路有兩種方式:上電復(fù)位和按鈕復(fù)位,我們主要用按鈕復(fù)位方式。如圖5所示。圖5時(shí)鐘和復(fù)位電路2.晶振電路單片機(jī)系統(tǒng)的晶體振蕩器在單片機(jī)系統(tǒng)中的作用是非常大的,整個(gè)部分被稱為晶體振蕩器,它結(jié)合了微控制器MCU的內(nèi)部電路來(lái)產(chǎn)生所需的時(shí)鐘頻率,單片機(jī)振蕩器的頻率時(shí)鐘越高,那么MCU的運(yùn)行速度就更快速,單片機(jī)實(shí)現(xiàn)所有的指令都是基于振蕩器時(shí)鐘頻率。在正常工作條件下,一個(gè)普通的晶振頻率絕對(duì)精度可達(dá)百萬(wàn)分之五十。有的精度更高。晶振通常與鎖相環(huán)電路一起使用,以提供所需的系統(tǒng)時(shí)鐘頻率。如果不同子系統(tǒng)需要不同頻率的時(shí)鐘信號(hào),可以用同一個(gè)晶振相連的不同的鎖相環(huán)來(lái)提供。根據(jù)技術(shù)手冊(cè):電容取30PF,晶振為11.0592MHz,如圖6所示。圖6晶振電路3.2時(shí)鐘日歷芯片設(shè)計(jì)DALLAS公司DS1302是一款高性能,低功耗實(shí)時(shí)時(shí)鐘日歷芯片,具有31字節(jié)靜態(tài)RAM,三線接口,與CPU同步通信,以及突發(fā)模式下的多字節(jié)時(shí)鐘信號(hào)和數(shù)據(jù)RAM。實(shí)時(shí)時(shí)鐘提供秒,分,小時(shí),天,周,月份和年份,每月不到31天可自動(dòng)調(diào)整,并具有閏年補(bǔ)償。2.5?5.5V寬工作電壓。雙電源(主電源和備用電源)提供備用電源充電模式,并提供備份充電電流的功能。有雙主用和備用電源引腳,由大電容備用電源(>1F)代替。需要強(qiáng)調(diào)的是DS1302需要使用32.768KHz晶振。DS1302引腳圖參照?qǐng)D7。。圖7DS1302芯片引腳圖在編程過(guò)程中,應(yīng)注意DS1302工作時(shí)序。DS1302是SPI總線驅(qū)動(dòng)器方式。這不僅要向寄存器寫入控制字,還需要讀取相應(yīng)寄存器的數(shù)據(jù)。與DS1302的通信,首先需要了解它的控制字。DS1302的控制字如表7。表7DS1302的控制字寄存器名稱765432101RAM/CKA4A3A2A1A0RD/W秒寄存器10000000/1分寄存器10000010/1小時(shí)寄存器10000100/1日寄存器10000110/1月寄存器10001000/1星期寄存器10001010/1年寄存器10001100/1寫保護(hù)寄存器10001110/1慢充電寄存器10010000/1時(shí)鐘突發(fā)寄存器10101110/1控制字是設(shè)定DS1302的工作方式、傳送字節(jié)數(shù)等工作方式。數(shù)據(jù)的傳輸都是由控制字開(kāi)始的。控制字每一位的含義和作用如表8:表8控制字每一位的含義和作用含義作用BIT7控制字的最高有效位,必須是邏輯1,如果它為0,則不能把數(shù)據(jù)寫入到DS1302中BIT6如果為0,則表示存取日歷時(shí)鐘數(shù)據(jù),為1表示存取RAM數(shù)據(jù)BIT5至BIT1(A4-A0)用A4~A0表示,定義片內(nèi)寄存器和RAM的地址定義如下:當(dāng)位6位=0,該地址被定義時(shí)鐘和其它寄存器。A4?A0=0?6,秒,分鐘,小時(shí),天,月,周,年寄存器的順序。當(dāng)A4?A0=7,芯片寫保護(hù)寄存器地址。當(dāng)A4?A0=8,選擇為慢充電參數(shù)。當(dāng)A4?A0=31,突發(fā)模式時(shí)鐘選擇寄存器。當(dāng)位6=1,地址的RAM中的定義,A4?A0=0?30,對(duì)應(yīng)的RAM每個(gè)子地址,RAM地址31對(duì)應(yīng)于所述多字節(jié)模式選擇寄存器。BIT00(最低有效位):如為0,表示要進(jìn)行寫操作,為1表示進(jìn)行讀操作??刂谱挚偸菑淖畹臀婚_(kāi)始輸出。在控制字指令輸入后的下一個(gè)SCLK時(shí)鐘的上升沿時(shí),數(shù)據(jù)被寫入DS1302,數(shù)據(jù)輸入從最低位(0位)開(kāi)始。同樣,在緊跟8位的控制字指令后的下一個(gè)SCLK脈沖的下降沿,讀出DS1302的數(shù)據(jù),讀出的數(shù)據(jù)也是從最低位到最高位,具體電路如圖8所示: 圖8DS1302時(shí)鐘芯片原理圖3.3電能檢測(cè)系統(tǒng)的設(shè)計(jì)電量計(jì)量電路,作用是檢測(cè)IC卡智能電表的用電量。這里測(cè)量用電量的傳感器選用ADE7755單相電能計(jì)量模塊,它可以將用電量用模塊輸出多少個(gè)脈沖數(shù)來(lái)表示,如2.5-10A脈沖數(shù)是6400,也就是指示燈閃6400下就一度電。當(dāng)電流是2.5A,電壓是220V,用電一個(gè)小時(shí)的脈沖數(shù)計(jì)量如下:電量是220X2.5AX1小時(shí)等于0.55度電,脈沖數(shù)為:0.55X6400等于3520個(gè)脈沖數(shù)。本設(shè)計(jì)直接選用電能檢測(cè)模塊,其連接電路如圖9所示:圖9電能模塊原理圖3.4LCD顯示電路顯示電路采用1602字符型液晶,它是專門用于顯示字母,數(shù)字,符號(hào)等的點(diǎn)矩陣液晶模塊。它有幾個(gè)字符點(diǎn)陣如5X7或5X11。1602的驅(qū)動(dòng)電路具有11條指令,其可以方便地控制液晶的實(shí)際效果,如:顯示清屏,左移右移,光標(biāo)顯示。此外,通過(guò)1602顯示的字符不會(huì)改變,直到下一個(gè)指令到達(dá)時(shí),即保持了可顯示的字符,并在1602液晶占用更少的系統(tǒng)資源。顯示電路圖如圖10所示:LCD1602的引腳功能可從表9查詢圖10顯示電路原理圖表9LCD1602的引腳功能引腳引腳名稱引腳功能1Vss電源地2VDD+5V邏輯電源3VEE液晶顯示偏壓(調(diào)節(jié)顯示對(duì)比度)4RS寄存器選擇5R/W讀/寫操作選擇6E使能信號(hào)7-14D0-D7數(shù)據(jù)總線,與單片機(jī)的數(shù)據(jù)總線相連,三態(tài)15BLA背光板電源,通常為+5V,串聯(lián)1個(gè)可變電阻器,調(diào)節(jié)背光亮度,如接地,則無(wú)背光不易發(fā)熱16BLK背光板電源地3.5鍵盤控制系統(tǒng)的設(shè)計(jì)按鍵需要4個(gè),分別是:K1返回按鍵,從設(shè)定菜單返回上一級(jí)菜單,直至主界面;K2加數(shù)鍵,調(diào)整選中的數(shù)值,短按為加1,長(zhǎng)按超過(guò)1秒為連加;K3減數(shù)鍵,調(diào)整選中的數(shù)值,短按為減1,長(zhǎng)按超過(guò)1秒為連減;K4菜單鍵,進(jìn)入設(shè)定菜單。其電路如圖11所示:圖11按鍵調(diào)時(shí)電路3.6繼電器電路 繼電器電路由三極管Q2、限流電阻R7和繼電器組成。當(dāng)單片機(jī)發(fā)出通電信號(hào)時(shí),relay(P13)端輸出低電平,三極管Q2導(dǎo)通,繼電器得電吸合。如圖12所示圖12繼電器電路3.7電源電路整個(gè)電路使用了兩種電源,+5V電源為整個(gè)電路供電。而+3V電源僅作為DS1302的備用電源。當(dāng)+5V電源被切斷后,DS1302啟用+3V電源,可以保持DS1302繼續(xù)工作。當(dāng)+5V電源恢復(fù)供電,LED依舊顯示當(dāng)前時(shí)間,而不會(huì)因?yàn)閿嚯娛瓜到y(tǒng)復(fù)位到初始化時(shí)間,避免了重新校時(shí)的麻煩。4系統(tǒng)軟件設(shè)計(jì)4.1AltiumDesigner10軟件AltiumDesigner10是一款功能強(qiáng)大的電路設(shè)計(jì)軟件:如圖13所示圖13電路設(shè)計(jì)軟件利用AltiumDesigner10,完成電路的原理圖設(shè)計(jì),PCB設(shè)計(jì)。焊接好電路之后用外用表完成電路的調(diào)試。4.2編程軟件keil除了必要的硬件外,MCU的開(kāi)發(fā)也離不開(kāi)軟件。有兩種方法可以將用戶編寫的匯編語(yǔ)言源程序更改為CPU可以執(zhí)行的機(jī)器代碼。一種是手動(dòng)裝配,另一種是機(jī)器裝配。很少使用手動(dòng)裝配方法。機(jī)器組裝是通過(guò)組裝軟件將源程序更改為機(jī)器代碼。MCS-51單片機(jī)的組裝軟件有早期的A51。隨著單片機(jī)開(kāi)發(fā)技術(shù)的不斷發(fā)展,從匯編語(yǔ)言的普遍使用到高級(jí)語(yǔ)言的逐步發(fā)展,單片機(jī)的開(kāi)發(fā)軟件也在不斷發(fā)展。Keil軟件是目前用于開(kāi)發(fā)MCS-51系列單片機(jī)的最受歡迎的軟件。從各種仿真機(jī)制造商近年來(lái)宣布全面支持Keil的事實(shí)可以看出這一點(diǎn)。Keil提供完整的開(kāi)發(fā)解決方案,包括C編譯器,宏組件,連接器,庫(kù)管理和強(qiáng)大的仿真器調(diào)試器,它們通過(guò)集成開(kāi)發(fā)環(huán)境(uVision)進(jìn)行組合。運(yùn)行Keil軟件需要Pentium或以上CPU,16MB或更多RAM,20M可用硬盤空間,WIN98,NT,WIN2000,WINXP等操作系統(tǒng)。編程軟件keil如圖4.1圖14編程軟件keil上圖是Keiluvision編輯軟件的編輯界面,應(yīng)用此軟件完成代碼的編輯,編譯,生成hex文件之后燒寫到單片機(jī)中。4.2.1主程序設(shè)計(jì)該控制系統(tǒng)的程序主要分為三部分:主程序、鍵盤掃描子程序、顯示子程序、時(shí)鐘讀寫子程序、電能讀取子程序和各種中斷子程序。主程序完成系統(tǒng)的地址分配、系統(tǒng)初始化和各子程序的調(diào)用。軟件設(shè)計(jì)是本控制系統(tǒng)設(shè)計(jì)的核心,在完成了系統(tǒng)硬件的搭接之后,剩下來(lái)的主要任務(wù)接是系統(tǒng)軟件的設(shè)計(jì)。主程序主要有定義變量、初始化程序、各種子程序調(diào)用和報(bào)警控制程序組成,其流程圖如圖15所示:開(kāi)始開(kāi)始調(diào)用顯示子程序初始化讀時(shí)鐘芯片電量處理調(diào)用鍵盤掃描子程序是否按鍵?時(shí)間到?繼電器輸出調(diào)整子程序YNYN圖15主程序流程圖4.2.2鍵盤掃描程序本設(shè)計(jì)采用狀態(tài)機(jī)設(shè)計(jì)方法來(lái)編寫鍵盤掃描程序來(lái)實(shí)現(xiàn)單個(gè)按鍵復(fù)用的效果,鍵盤掃描子程序利用時(shí)間中斷程序,每隔10MS調(diào)用一次,監(jiān)控鍵盤的狀態(tài)。T0定時(shí)中斷程序主要是實(shí)現(xiàn)10ms的定時(shí)時(shí)間,并且對(duì)變量DS進(jìn)行加一處理,其中在對(duì)T0進(jìn)行賦初值時(shí),選擇為TH0=0xdc,TL0=0x00,主要是c語(yǔ)言在經(jīng)過(guò)反匯編后,一條c語(yǔ)句將會(huì)編譯成幾條語(yǔ)句,這樣就增加了指令執(zhí)行的時(shí)間,使定時(shí)產(chǎn)生誤差,而在經(jīng)過(guò)多次調(diào)試后,選擇以上數(shù)值為T0初值是最接近10ms。鍵盤掃描流程圖如圖16所示:無(wú)按鍵狀態(tài)無(wú)按鍵狀態(tài)返回鍵值1返回鍵值2是否抖動(dòng)?是否釋放?是否1秒到?YNNNY圖16鍵盤掃描流程圖4.2.3LCD1602顯示子程序LCD1602顯示子程序流程圖如圖17所示開(kāi)始開(kāi)始1602初始化寫指令寫數(shù)據(jù)寫數(shù)據(jù)計(jì)數(shù)器為0?結(jié)束NY圖17LCD1602顯示子程序流程圖4.3protues軟件Protues是一款強(qiáng)大的軟件仿真軟件,可以對(duì)一些常用的進(jìn)行電路的仿真,本設(shè)計(jì)主要是以實(shí)物設(shè)計(jì)為主,仿真為輔助。如圖18所示Protues是英國(guó)著名的EDA工具(仿真軟件),從原理圖布圖、代碼調(diào)試到單片機(jī)與外圍電路協(xié)同仿真,一鍵切換到PCB設(shè)計(jì),真正實(shí)現(xiàn)了從概念到產(chǎn)品的完整設(shè)。在仿真中我將自己的設(shè)計(jì)從構(gòu)想開(kāi)始向現(xiàn)實(shí)轉(zhuǎn)變,在自己的實(shí)際操作中,感到自己知識(shí)的匱乏,但同樣在實(shí)際操作自己動(dòng)手能力不斷提高,同時(shí)也弄懂了關(guān)于仿真的知識(shí),以及關(guān)于實(shí)物與仿真之間的聯(lián)系。只有不斷提高自己的動(dòng)手能力,才能使自己更加進(jìn)步。圖18protues軟件總結(jié)通過(guò)數(shù)月的努力,本次畢業(yè)設(shè)計(jì)的任務(wù)——基于單片機(jī)智能電表的設(shè)計(jì)已經(jīng)完成。該系統(tǒng)以STC89C52作為核心成分,實(shí)現(xiàn)電表軟件控制通過(guò)鍵盤控制和LCD顯示器的功能,并實(shí)現(xiàn)該設(shè)計(jì)的基本要求。盡可能將硬件電路簡(jiǎn)單化,并且使軟件編程的優(yōu)點(diǎn)都得到充分利用,以減少所造成的部件的精度不足和環(huán)境因素的錯(cuò)誤。由于有限的時(shí)間和我們自己的知識(shí)水平不高,我們認(rèn)為仍有需要改進(jìn)的系統(tǒng)和地方,如使用高精密部件,硬件電路的穩(wěn)定性和軟件算法進(jìn)一步優(yōu)化的。由于我們?cè)O(shè)計(jì)的LCD智能電表的重點(diǎn)在于軟件程序的設(shè)計(jì),利用protel99設(shè)計(jì)電路原理圖,利用KEIL軟件進(jìn)行程序編寫與調(diào)試。在程序設(shè)計(jì)時(shí),由于對(duì)51單片機(jī)的中斷寄存器不是很了解,所以出現(xiàn)了一些不必要的麻煩。就拿編程來(lái)說(shuō),由于沒(méi)有處理好子程序的返回和時(shí)鐘中斷程序時(shí)間,就導(dǎo)致時(shí)鐘運(yùn)行到指定的時(shí)間后不打轉(zhuǎn)而是繼續(xù)走,由于沒(méi)有把握好顯示碼表等一些細(xì)節(jié)地方,而導(dǎo)致顯示時(shí)間不正常等一系列相當(dāng)嚴(yán)重的問(wèn)題。在經(jīng)過(guò)反復(fù)檢查、分析、調(diào)試之后,從中發(fā)現(xiàn)了定時(shí)中斷時(shí)的數(shù)值設(shè)置不太適合等一系列問(wèn)題,經(jīng)過(guò)自己的反復(fù)修改、調(diào)試和驗(yàn)證,最終才得以解決達(dá)到設(shè)計(jì)的要求。在整個(gè)設(shè)計(jì)過(guò)程中,軟件的調(diào)試是其中一個(gè)非常重要的環(huán)節(jié)。其中有一點(diǎn)是值得我們注意的:在程序設(shè)計(jì)之前一定要知道設(shè)計(jì)要求,要清楚地知道本程序所有內(nèi)容以及程序的流程,據(jù)此畫出本程序的流程圖,然后嚴(yán)格根據(jù)流程圖進(jìn)行程序設(shè)計(jì),這樣設(shè)計(jì)的程序比較有條理,各部的程序可以分別進(jìn)行調(diào)試和檢查。有利于后面對(duì)程序進(jìn)行修改和調(diào)試,應(yīng)該值得注意的是,我們?cè)诔绦虻木帉戇^(guò)程中,首先要有鮮明的思想,不能主次不分,主程序和子程序混在一起,不分哪個(gè)是主,哪個(gè)是次,要先編定出主程序,再根據(jù)設(shè)計(jì)的要求編寫子程序,這樣才能使整個(gè)程序嚴(yán)密,有條理。有利于后面的調(diào)試和修改。附錄A電路主原理圖附錄B//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%應(yīng)用程序開(kāi)始%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%///***************************************************************************************函數(shù)名稱:RealTime_Display()*功能:時(shí)間部分顯示*入口參數(shù):無(wú)*出口參數(shù):無(wú)**************************************************************************************/voidRealTime_Display(void){ elec=eepromRead(0x2000)*256+eepromRead(0x2001); print(0x80,"Total:"); print2(0x86,(elec/10000)+0x30); print2(0x87,(elec%10000/1000)+0x30); print2(0x88,(elec%1000/100)+0x30); print(0x89,"."); print2(0x8a,(elec%100/10)+0x30); print2(0x8b,(elec%10)+0x30); print(0x8c,"KWh"); print2(0xc0,(read_clock(0x85)/16)+0x30);//顯示時(shí) print2(0xc1,(read_clock(0x85)%16)+0x30); print(0xc2,":");//顯示: print2(0xc3,(read_clock(0x83)/16)+0x30);//顯示分 print2(0xc4,(read_clock(0x83)%16)+0x30); print(0xc5,":");//顯示: print2(0xc6,(read_clock(0x81)/16)+0x30);//顯示秒 print2(0xc7,(read_clock(0x81)%16)+0x30); print(0xc8,""); print2(0xca,(pow%10000/1000)+0x30); print2(0xcb,(pow%1000/100)+0x30); print2(0xcc,(pow%100/10)+0x30); print2(0xcd,(pow%10)+0x30); print(0xce,"W");}/***************************************************************************************函數(shù)名稱:Set_time()*功能:DS1302調(diào)時(shí)程序*入口參數(shù):sel*出口參數(shù):無(wú)**************************************************************************************///設(shè)定時(shí)間voidSet_time(uint8sel){//sel為調(diào)整標(biāo)志 uint8address,item; uint8max,min; if(ds1>=10){ ds1=0; print(0x80,"RealTime"); print(0xc0,""); print2(0xc3,(read_clock(0x85)/16)+0x30);//顯示時(shí) print2(0xc4,(read_clock(0x85)%16)+0x30); print(0xc5,":");//顯示: print2(0xc6,(read_clock(0x83)/16)+0x30);//顯示分 print2(0xc7,(read_clock(0x83)%16)+0x30); print(0xc8,":");//顯示: print2(0xc9,(read_clock(0x81)/16)+0x30);//顯示秒 print2(0xca,(read_clock(0x81)%16)+0x30); print(0xcb,""); } LCM1602_WriteCMD(CMD_dis_gb2); if(sel==1){ print2(0xc3,(read_clock(0x85)/16)+0x30);//調(diào)整時(shí) address=0x84; max=23; min=0; } if(sel==2){ print2(0xc6,(read_clock(0x83)/16)+0x30);//調(diào)整分 address=0x82; max=59; min=0; } if(sel==3){ print2(0xc9,(read_clock(0x81)/16)+0x30);//調(diào)整秒 address=0x80; max=59; min=0; } item=((read_clock(address+1))/16)*10+(read_clock(address+1))%16; if(out_up==1){ Beep_k();//調(diào)整加1 item++; } if(out_up==2){ while(out_up==2); item++; } if(out_dow==1){ Beep_k();//調(diào)整減1 item--; } if(out_dow==2){ while(out_dow==2); item--; } if(item>max&&item!=255) item=min;//最大值限定 if(item<min|item==255) item=max;//最小值限定 write_clock(0x8e,0x00);// write_clock(address,((item/10)*16+item%10));//寫入數(shù)據(jù)到1302 write_clock(0x8e,0x80);//}/***************************************************************************************函數(shù)名稱:Set_Alarm1()*功能:設(shè)定開(kāi)機(jī)程序*入口參數(shù):sel*出口參數(shù):無(wú)**************************************************************************************///設(shè)定鬧鐘voidSet_Alarm1(uint8sel){//sel為調(diào)整標(biāo)志 uint8address,item; uint8max,min; if(ds1>=10){ ds1=0; print(0x80,"ONTime"); print(0xc0,""); print2(0xc5,(read_clock(0xd1)/16)+0x30); print2(0xc6,(read_clock(0xd1)%16)+0x30); print(0xc7,":"); print2(0xc8,(read_clock(0xd3)/16)+0x30); print2(0xc9,(read_clock(0xd3)%16)+0x30); print(0xca,""); } LCM1602_WriteCMD(CMD_dis_gb2); if(sel==1){ print2(0xc5,(read_clock(0xd1)/16)+0x30);//設(shè)定鬧鐘時(shí) address=0xd0; max=23; min=0; } if(sel==2){ print2(0xc8,(read_clock(0xd3)/16)+0x30);//設(shè)定鬧鐘分 address=0xd2; max=59; min=0; } item=((read_clock(address+1))/16)*10+(read_clock(address+1))%16; if(out_up==1){ Beep_k();//調(diào)整加1 item++; } if(out_up==2){ while(out_up==2); item++; } if(out_dow==1){ Beep_k();//調(diào)整減1 item--; } if(out_dow==2){ while(out_dow==2); item--; } if(item>max&&item!=255) item=min;//最大值限定 if(item<min|item==255) item=max;//最小值限定 write_clock(0x8e,0x00);// write_clock(address,(item/10)*16+item%10);//寫入數(shù)據(jù)到1302 write_clock(0x8e,0x80);//}/***************************************************************************************函數(shù)名稱:Set_Alarm2()*功能:設(shè)定關(guān)機(jī)程序*入口參數(shù):sel*出口參數(shù):無(wú)**************************************************************************************///設(shè)定鬧鐘voidSet_Alarm2(uint8sel){//sel為調(diào)整標(biāo)志 uint8address,item; uint8max,min; if(ds1>=10){ ds1=0; print(0x80,"OFFTime"); print(0xc0,""); print2(0xc5,(read_clock(0xd5)/16)+0x30); print2(0xc6,(read_clock(0xd5)%16)+0x30); print(0xc7,":"); print2(0xc8,(read_clock(0xd7)/16)+0x30); print2(0xc9,(read_clock(0xd7)%16)+0x30); print(0xca,""); } LCM1602_WriteCMD(CMD_dis_gb2); if(sel==1){ print2(0xc5,(read_clock(0xd5)/16)+0x30);//設(shè)定鬧鐘時(shí) address=0xd4; max=23; min=0; } if(sel==2){ print2(0xc8,(read_clock(0xd7)/16)+0x30);//設(shè)定鬧鐘分 address=0xd6; max=59; min=0; } item=((read_clock(address+1))/16)*10+(read_clock(address+1))%16; if(out_up==1){ Beep_k();//調(diào)整加1 item++; } if(out_up==2){ while(out_up==2); item++; } if(out_dow==1){ Beep_k();//調(diào)整減1 item--; } if(out_dow==2){ while(out_dow==2); item--; } if(item>max&&item!=255) item=min;//最大值限定 if(item<min|item==255) item=max;//最小值限定 write_clock(0x8e,0x00);// write_clock(address,(item/10)*16+item%10);//寫入數(shù)據(jù)到1302 write_clock(0x8e,0x80);//}/*************************************************************************************//***************************************************************************************函數(shù)名稱:Set_Alarm3()*功能:設(shè)定限電功率*入口參數(shù):sel*出口參數(shù):無(wú)**************************************************************************************///設(shè)定鬧鐘voidSet_Alarm3(uint8sel){//sel為調(diào)整標(biāo)志 uint8address,item; uint8max,min; if(ds1>=10){ ds1=0; print(0x80,"OFFPower"); print(0xc0,""); print2(0xc5,(read_clock(0xd9)/16)+0x30); print2(0xc6,(read_clock(0xd9)%16)+0x30); print(0xc7,"00W"); } LCM1602_WriteCMD(CMD_dis_gb2); if(sel==1){ print2(0xc5,(read_clock(0xd9)/16)+0x30);//設(shè)定功率 address=0xd8; max=10; min=1; } item=((read_clock(address+1))/16)*10+(read_clock(address+1))%16; if(out_up==1){ Beep_k();//調(diào)整加1 item++; } if(out_up==2){ while(out_up==2); item++; } if(out_dow==1){ Beep_k();//調(diào)整減1 item--; } if(out_dow==2){ while(out_dow==2); item--; } if(item>max&&item!=255) item=min;//最大值限定 if(item<min|item==255) item=max;//最小值限定 write_clock(0x8e,0x00);// write_clock(address,(item/10)*16+item%10);//寫入數(shù)據(jù)到1302 write_clock(0x8e,0x80);//}/*************************************************************************************/sbitLED_pow=P2^6;//sbitLED_on=P2^5;//sbitLED_off=P2^4;//sbitout_relay=P1^3;///***************************************************************************************函數(shù)名稱:alarm()*功能:聲光報(bào)警輸出*入口參數(shù):無(wú)*出口參數(shù):無(wú)**************************************************************************************/voidalarm(void){ if(read_clock(0xd1)==read_clock(0x85)&&read_clock(0xd3)==read_clock(0x83)) { LED_on=0; out_relay=0;//時(shí)間等于設(shè)定時(shí)開(kāi)機(jī) } if((read_clock(0xd5)==read_clock(0x85)&&read_clock(0xd7)==read_clock(0x83))|(pow>=(((read_clock(0xd9))/16)*1000+((read_clock(0xd9))%16)*100))) { LED_on=1; out_relay=1;//時(shí)間等于設(shè)定時(shí)關(guān)機(jī) } if(pow

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論