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

下載本文檔

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

文檔簡介

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

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

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論