畢業(yè)設(shè)計論文-太陽能充放電控制器設(shè)計-完美版_第1頁
畢業(yè)設(shè)計論文-太陽能充放電控制器設(shè)計-完美版_第2頁
畢業(yè)設(shè)計論文-太陽能充放電控制器設(shè)計-完美版_第3頁
畢業(yè)設(shè)計論文-太陽能充放電控制器設(shè)計-完美版_第4頁
畢業(yè)設(shè)計論文-太陽能充放電控制器設(shè)計-完美版_第5頁
已閱讀5頁,還剩41頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

山東科技大學(xué)課程設(shè)計圖3-2STC89C52引腳圖這里僅詳細(xì)介紹編程引腳:(1)RST:復(fù)位輸入。晶振工作時,RST引腳持續(xù)2個機(jī)器周期高電平將使單片機(jī)復(fù)位。看門狗計時完成后,RST腳輸出96個晶振周期的高電平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能無效。DISRTO默認(rèn)狀態(tài)下,復(fù)位高電平有效。(2)ALE/:地址鎖存控制信號(ALE)是訪問外部程序存儲器時,鎖存低8位地址的輸出脈沖。在flash編程時,此引腳()也用作編程輸入脈沖。在一般情況下,ALE以晶振六分之一的振蕩頻率輸出脈沖,可作為外部定時器或時鐘使用。如果需要,通過將地址為8EH的SFR的第0位置“1”,ALE操作將無效。這一位置“1”,ALE僅在執(zhí)行MOVX或MOVC指令時有效。否則,ALE將被微弱拉高。這個ALE使能標(biāo)志位(地址為8EH的SFR的第0位)的設(shè)置對微控制器處于外部執(zhí)行模式下無效。(3):外部程序存儲器選通信號()是外部程序存儲器選通信號。當(dāng)STC89C52從外部程序存儲器執(zhí)行外部代碼時,在每個機(jī)器周期被激活兩次,而在訪問外部數(shù)據(jù)存儲器時,將不被激活。(4)/VPP:訪問外部程序存儲器控制信號。為使能從0000H到FFFFH的外部程序存儲器指令,必須接GND。為了執(zhí)行內(nèi)部程序指令,EA應(yīng)該接VCC。在flash編程期間,也接收12伏Vpp電壓。3.2.2單片機(jī)的最小系統(tǒng)及擴(kuò)展電路單片機(jī)是系統(tǒng)的主控芯片,為了使整個電路得到很好的控制,首先必須構(gòu)建最小系統(tǒng)是單片機(jī)可以工作起來。本設(shè)計單片機(jī)最小系統(tǒng)擴(kuò)展電路包括上電復(fù)位電路,時鐘電路,工作指示燈和蜂鳴器報警電路等。(1)時鐘電路單片機(jī)內(nèi)部有一個用于構(gòu)成振蕩器的高增益反相放大器,此放大器的輸入端和輸出端分別是引腳XTAL1和XTAL2,在XTAL1和XTAL2上外接時鐘源即可構(gòu)成時鐘電路,CPU的所有操作均在時鐘脈沖同步下進(jìn)行。片內(nèi)振蕩器的振蕩頻率非常接近晶振頻率,一般多在1.2MHz~12MHz之間選取。時鐘電路如圖3-3所示。電路中C6、C7是反饋電容,其值在5pF~30pF之間選取,本電路選用的電容為30pF,晶振頻率為11.0952MHz。圖3-3時鐘電路 圖3-4復(fù)位電路(2)復(fù)位電路復(fù)位是單片機(jī)的初始化操作。其主要功能是把PC初始化為0000H,使單片機(jī)從0000H單元開始執(zhí)行程序。除了進(jìn)入系統(tǒng)的正常初始化之外,當(dāng)由于程序運(yùn)行出錯或操作錯誤使系統(tǒng)處于死鎖狀態(tài)時,為擺脫困境,也需按復(fù)位鍵重新啟動。單片機(jī)的復(fù)位電路如圖3-4所示。本系統(tǒng)采用的是上電+電平按鈕復(fù)位,上電復(fù)位是通過外部復(fù)位電路的電容充電來實現(xiàn)的。按鈕復(fù)位是當(dāng)按鈕按下后,電源通過電阻R14施加到復(fù)位端上,實現(xiàn)單片機(jī)復(fù)位。復(fù)位電路雖然簡單,但其作用非常重要。一個單片機(jī)系統(tǒng)能否正常運(yùn)行,首先要檢查是否能復(fù)位成功。初步檢查可用示波器探頭監(jiān)視RST引腳,按下復(fù)位鍵,觀察是否有足夠幅度的波形輸出(瞬時的),還可以通過改變復(fù)位電路電阻和電容值進(jìn)行實驗。(3)工作狀態(tài)指示燈電路本設(shè)計可以時刻檢測蓄電池電壓,為了更好的進(jìn)行監(jiān)控,要對整個電路的工作狀態(tài)進(jìn)行指示,這是很有必要的。工作狀態(tài)指示燈電路如圖3-5所示。其中LED1為正常充電指示燈,LED2為過壓指示燈,LED3為欠壓指示燈。串聯(lián)的電阻的目的是為了限制通過發(fā)光二極管的電流太大而將其燒毀。圖3-5工作狀態(tài)指示燈電路 圖3-6蜂鳴器報警電路(4)蜂鳴器報警電路報警電路采用蜂鳴器來發(fā)出報警聲音,由于STC89C52輸出引腳的驅(qū)動能力較弱,所以蜂鳴器要加三極管進(jìn)行驅(qū)動。在對蓄電池電壓實時監(jiān)測的過程中,一旦發(fā)現(xiàn)檢測電壓值連續(xù)超出閾值范圍,便啟動自身報警電路,即當(dāng)電壓超過程序設(shè)定的最高值或最低值時,單片機(jī)的P2.6引腳(beep端)輸出低電平,三極管隨之導(dǎo)通,驅(qū)動蜂鳴器發(fā)出報警信號。蜂鳴器報警電路圖如圖3-6所示。3.3充放電電路充放電電路如圖3-7所示,電路由防反充二極管D1、濾波電容C4和C5、穩(wěn)壓管D2、續(xù)流二極管D3、MOSFET管Q1和Q2等構(gòu)成。二極管D1是為了防止反充,當(dāng)陰天或晚上蓄電池的電壓高于太陽能電池板的電壓時,D1就生效,可以防止蓄電池電流流向太陽能電池板。分析可知,通過控制MOSFET管閉合和斷開的時間(即PWM—脈沖寬度調(diào)制),就可以控制輸出電壓。所使用的MOSFET是電壓控制單極性金屬氧化物半導(dǎo)體場效應(yīng)晶體管,所需驅(qū)動功率較小。而且MOSFET只有多數(shù)載流子參與導(dǎo)電,不存在少數(shù)載流子的復(fù)合時間,因而開關(guān)頻率可以很高,非常適合作控制充放電開關(guān)。設(shè)計中采用IRL2703-N溝道MOSFET管,N溝道MOSFET的導(dǎo)通電壓Vth>0。當(dāng)光耦U2斷開時,由于Q1的G極電壓接近蓄電池電壓,S極是接地,使得Vgs>0,當(dāng)G極電壓達(dá)到一定值時,Q1導(dǎo)通。電容C4是太陽能電池板輸出電壓濾波,使得更穩(wěn)定地給蓄電池充電。電容C5是對蓄電池輸出電壓進(jìn)行濾波,以保證負(fù)載供電電路的穩(wěn)定性。圖中穩(wěn)壓管D2用來對蓄電池進(jìn)行穩(wěn)壓作用。當(dāng)用戶將蓄電池反接至控制器時,續(xù)流二極管D3可以進(jìn)行續(xù)流,從而保護(hù)控制器不被毀壞。圖3-7充放電電路按程序設(shè)計當(dāng)檢測到蓄電池的電壓低于12V,充電模式為均充,Q1為完全導(dǎo)通狀態(tài),也就是導(dǎo)通的脈沖占空比最大;當(dāng)檢測到蓄電池的電壓在12V-14.5V,充電模式為浮充,Q1導(dǎo)通與不導(dǎo)通的占空比例變小,;當(dāng)檢測到蓄電池的電壓等于15V左右,Q1截止使充電停止,同時Q2也關(guān)閉來關(guān)斷負(fù)載。當(dāng)檢測到蓄電池的電壓低于10.8V,Q2關(guān)閉停止放電,關(guān)斷負(fù)載來實現(xiàn)欠壓關(guān)斷。3.4光耦驅(qū)動電路為了增加系統(tǒng)的可靠性,本設(shè)計用光電耦合器實現(xiàn)單片機(jī)控制電路和充放電電路的隔離。光耦驅(qū)動電路如圖3-8所示。M0S管Q1控制著充電電路,當(dāng)充電控制信號PWM為低電平時,光耦內(nèi)部的發(fā)光二極管的電流近似為零,右側(cè)三極管不導(dǎo)通,輸出端兩管腳間的電阻很大,相當(dāng)于開關(guān)“斷開”,輸出端K1被抬高,電阻R9右側(cè)被穩(wěn)壓管D2穩(wěn)壓到12V左右,MOSEFT的Vgs>0,MOS管Q1開啟,太陽能極板開始對蓄電池充電;當(dāng)充電控制器信號為高電平時,光耦內(nèi)部的發(fā)光二極管發(fā)光,三極管導(dǎo)通,輸出端兩管腳間的電阻變小,相當(dāng)于開關(guān)“接通”,此時從U2輸入的電壓經(jīng)光耦流向接地端,K1處的電壓接近為零,MOSEFT的Vgs<0,Q1截止,充電電路關(guān)斷。這就是充電電路原理。M0S管Q2控制著放電電路,其原理與Q1相似。圖3-8光耦驅(qū)動電路3.5A/D轉(zhuǎn)換電路本系統(tǒng)設(shè)計的STC89C52單片機(jī)沒有內(nèi)置的A/D轉(zhuǎn)換模塊,因此需要先采集蓄電池的電壓,然后經(jīng)A/D轉(zhuǎn)換才可接入單片機(jī)。市場中集成的A/D轉(zhuǎn)換器品種很多,選用時需要綜合考慮各種因素進(jìn)行選取。一般逐次比較型A/D轉(zhuǎn)換器用到較多,本設(shè)計采用8位并行A/D轉(zhuǎn)換器芯片ADC0804。因為蓄電池電壓的采集轉(zhuǎn)換在系統(tǒng)中極為重要,所以下面對所選ADC0804芯片及在本系統(tǒng)中是典型連接電路予以介紹。3.5.1AD轉(zhuǎn)換就是模數(shù)轉(zhuǎn)換,顧名思義,就是把模擬信號轉(zhuǎn)換成數(shù)字信號。AD轉(zhuǎn)換器最主要的技術(shù)參數(shù)是轉(zhuǎn)換速度和轉(zhuǎn)換精度,由于逐次比較型兼有并行A/D轉(zhuǎn)換器轉(zhuǎn)換速度高和雙積分型轉(zhuǎn)換精度高的優(yōu)點,所以得到普遍應(yīng)用。ADC0804就是這類集成A/D轉(zhuǎn)換器。ADC0804為一只具有20引腳并行8位CMOS工藝逐次比較型的集成A/D轉(zhuǎn)換器,其規(guī)格如下:(1)高阻抗?fàn)顟B(tài)輸出,分辨率:8位(0~255)(2)存取時間:135us;轉(zhuǎn)換時間:100us(3)總誤差:正負(fù)1LSB (4)工作溫度:0度~70度;(5)模擬輸入電壓范圍:0V~5V(6)參考電壓:2.5V;工作電壓:5V(7)輸出為三態(tài)結(jié)構(gòu),可直接連接在數(shù)據(jù)總線上。ADC0804引腳圖如圖3-9所示,其各個引腳的功能:—芯片片選信號輸入端,低電平有效,一旦有效,表明A/D轉(zhuǎn)換器別選中,可啟動工作?!獠孔x取轉(zhuǎn)換結(jié)果的控制輸出信號。為1時,DB0~DB7處理高阻抗:為0時,數(shù)字?jǐn)?shù)據(jù)才會輸出?!脕韱愚D(zhuǎn)換的控制輸入,相當(dāng)于ADC的轉(zhuǎn)換開始(=0時),當(dāng)由1變?yōu)?時,轉(zhuǎn)換器被清除:當(dāng)回到1時,轉(zhuǎn)換正式開始。圖3-9ADC0804引腳圖CLKIN—時鐘信號輸入端CLKR:內(nèi)部時鐘發(fā)生器的外接電阻端,與CLK配合可有芯片自身產(chǎn)生時鐘脈沖,其振蕩頻率為1/(1.1RC)—中斷請求信號輸出,端,低地平動作.,表明本次轉(zhuǎn)換已完成。VIN(+)VIN(-)——差動模擬電壓輸入。輸入單端正電壓時,VIN(-)接地:而差動輸入時,直接加入VIN(+)VIN(-).AGND,DGND——模擬信號以及數(shù)字信號的接地.VREF/2—參考電平輸入,決定量化單位。DB0~DB7—三態(tài)特性數(shù)字信號輸出端.VCC:電源供應(yīng)以及作為電路的參考電壓.3.5.2ADC0804外圍接線電路(1)電壓采集電路如圖3-10所示,電壓采集電路使用兩個串聯(lián)的電阻,大小比例為2:1,然后并聯(lián)在需要檢測的電壓兩端,從兩個電阻中間采集電壓。由分壓公式得出采集的電壓為ADIN,當(dāng)蓄電池充滿電時電壓大概為14.5V,計算出采集到的電壓為4.8V,符合A/D轉(zhuǎn)換芯片的ADC0804的輸入值。圖3-10電壓采集電路(2)ADC0804構(gòu)成的典型A/D轉(zhuǎn)換電路圖3-11按照芯片手冊中ADC0804的典型接法,系統(tǒng)中設(shè)計的A/D轉(zhuǎn)換電路如3-11所示。單片機(jī)的P2.7引腳,用來實現(xiàn)片選;、分別接單片機(jī)的P3.6和P3.7引腳,進(jìn)行讀寫控制;CLK、CLKR、GND之間用電阻和電容構(gòu)成RC振蕩電路,用來給ADC0804提供工作所需的脈沖。蓄電池的電壓采集信號ADIN從6腳引入,在內(nèi)部采集轉(zhuǎn)換后,從數(shù)字輸出端輸出到單片機(jī)的P1口,通過讀P1口數(shù)據(jù),便可以得到蓄電池的電壓,實現(xiàn)實時在線檢測。3.6LCD顯示電路液晶具有體積小、功耗低,顯示清晰的優(yōu)點,所以比較適合作顯示使用。為了更好的顯示電壓值,同時擴(kuò)展自己學(xué)習(xí)芯片的能力,本設(shè)計用液晶1602來顯示蓄電池的電壓值。在使用1602之前,我們首先查閱其使用手冊,對其進(jìn)行一定的了解。從芯片手冊中,可以得到1602液晶的主要技術(shù)資料,如表3-1所示,通過此表我們可以知道1602工作電壓和顯示容量,可以驗證設(shè)計選擇的是否合適。表3-11602的主要技術(shù)參數(shù)顯示容量162個字符芯片工作電壓4.5~5.5V工作電流2.0mA(5.0V)模塊最佳工作電壓5.0V字符尺寸2.954.35(WH)mm顯然,1602液晶可以滿足要求,接下來介紹其各個引腳的功能,為后面設(shè)計電壓顯示電路做準(zhǔn)備。1602引腳功能如表3-2所示。表3-21602引腳功能表引腳符號名稱功能1Vss接地0V2VDD電路電源5V±10%3VO液晶顯示對比度調(diào)節(jié)端用于調(diào)節(jié)對比度4RS寄存器選擇信號H:數(shù)據(jù)寄存器L:指令寄存器5R/W讀/寫信號H:讀

L:寫6E片選信號下降沿觸發(fā),鎖存數(shù)據(jù)7-14DB0-DB7數(shù)據(jù)線數(shù)據(jù)傳輸圖3-12電壓顯示電路根據(jù)1602的技術(shù)參數(shù)和引腳功能,1602與單片機(jī)連接構(gòu)成的電壓顯示電路如圖3-12所示。EN使能端接單片機(jī)的P2.2引腳,用來實現(xiàn)片選;RS接單片機(jī)P2.0引腳,進(jìn)行數(shù)據(jù)和命令選擇;R/W接單片機(jī)P2.1引腳,進(jìn)行讀寫控制;為防止直接加5V電壓燒壞背光燈,在15腳串接一個10的電阻用于限流。液晶3端通過接一個10K電位器接地來調(diào)節(jié)顯示對比度。數(shù)據(jù)輸入端D0-D7接單片機(jī)的P0口用于電壓數(shù)據(jù)的傳送。3.7E2PROM數(shù)據(jù)存儲電路為了把電路發(fā)生異常時的蓄電池電壓記錄下來,需要用存儲芯片進(jìn)行數(shù)據(jù)保存。若采用普通存儲器,在掉電時需要備用電池供電,并需要在硬件上增加掉電檢測電路,但存在電池不可靠及擴(kuò)展芯片占用單片機(jī)過多口線的缺點。為了解決這一難題,本設(shè)計采用具有I2C總線接口的串行E2PROM器件,這里選擇AT24C02芯片。AT24CAT24C02是一個2K位串行CMOSE2PROM,內(nèi)部含有256個字節(jié),采用先進(jìn)CMOS技術(shù)實質(zhì)上減少了器件的功耗。AT24C02內(nèi)部有一個8字節(jié)頁寫入數(shù)據(jù)緩沖器。該器件通過I2C總線接口進(jìn)行操作,有一個專門的寫保護(hù)功能。為了更好的使用AT24C02,首先來介紹其各個引腳功能,如表3-3所示表3-3AT24C02管腳描述管腳名稱功能A0A1A可編程地址輸入端SDA串行數(shù)據(jù)/地址SCL串行時鐘WP寫保護(hù)Vcc電源端,+1.8V~6.0V工作電壓GND地I2C串行總線一般有兩根信號線,一根是雙向的數(shù)據(jù)線SDA,另一根是時鐘線SCL。所有接到I2C總線設(shè)備上的串行數(shù)據(jù)SDA都接到總線的SDA上,各設(shè)備的時鐘線SCL接到總線的SCL上。根據(jù)各引腳的功能,依據(jù)總線系統(tǒng)的典型硬件連接圖,AT24C02與單片機(jī)連接構(gòu)成的數(shù)據(jù)存儲電路如圖3-13所示。圖3-13數(shù)據(jù)存儲電路3.8串口通信電路隨著單片機(jī)系統(tǒng)的廣泛應(yīng)用和計算機(jī)網(wǎng)路技術(shù)的普及,單片機(jī)的通信功能愈來愈顯得重要。單片機(jī)通信是指單片機(jī)與計算機(jī)或單片機(jī)與單片機(jī)之間的信息交換,不過通常使用的是單片機(jī)與計算機(jī)之間的通信。通信有并行和串行兩種方式。由于并行通信存在使用傳輸線較多,長距離傳送成本高且收、發(fā)方的各位同時接受存在困難等諸多問題,所以在現(xiàn)代單片機(jī)測控系統(tǒng)中,信息的交換多采用串行通信方式。本設(shè)計中加入串行通信電路的目的主要有三個:一是方便給單片機(jī)下載程序;二是使控制器具有遠(yuǎn)程通信或遠(yuǎn)程監(jiān)控的功能;三是將控制器每天采集到數(shù)據(jù)的極限值和發(fā)生異常狀態(tài)時的數(shù)據(jù)記錄下來,供用戶查看。由于單片機(jī)的電平和計算機(jī)電平不兼容,設(shè)計中采用MAX232芯片進(jìn)行TTL電平和RS-232電平之間的轉(zhuǎn)換。而且系統(tǒng)采用易于實現(xiàn)的異步串行通信方式,用最簡單也最實用的奇偶校驗作為串行通信錯誤校驗方式。MAX232芯片是專門為電腦的RS-232標(biāo)準(zhǔn)串口設(shè)計的單電源電平轉(zhuǎn)換芯片,使用+5v單電源供電。其主要特點:(1)符合所有的RS-232C技術(shù)標(biāo)準(zhǔn)(2)只需要單一+5V電源供電(3)片載電荷泵具有升壓、電壓極性反轉(zhuǎn)能力,能夠產(chǎn)生+10V和-10V電壓V+、V-(4)功耗低,典型供電電流5mA(5)內(nèi)部集成2個RS-232C驅(qū)動器(6)內(nèi)部集成兩個RS-232C接收器(7)高集成度,片外最低只需4個電容即可工作。了解芯片的主要特點之后,接下來我們來認(rèn)識MAX232它的各個引腳的功能,即有什么作用,以更好地設(shè)計串口通信電路。其引腳圖如圖3-14所示。第一部分是電荷泵電路。由1、2、3、4、5、6腳和4只電容構(gòu)成。功能是產(chǎn)生+12v和-12v兩個電源,提供給RS-232串口電平的需要。第二部分是數(shù)據(jù)轉(zhuǎn)換通道。由7、8、9、10、11、12、13、14腳構(gòu)成兩個數(shù)據(jù)通道。其中13腳(R1IN)、12腳(R1OUT)、11腳(T1IN)、14腳(T1OUT)為第一數(shù)據(jù)通道。8腳(R2IN)、9腳(R2OUT)、10腳(T2IN)、7腳(T2OUT)為第二數(shù)據(jù)通道。TTL/CMOS電平從T1IN、T2IN輸入轉(zhuǎn)換成RS-232電平從T1OUT、T2OUT送到電腦DB9插頭;DB9插頭的RS-232數(shù)據(jù)從R1IN、R2IN輸入轉(zhuǎn)換成TTL/CMOS數(shù)據(jù)后從R1OUT、R2OUT輸出。第三部分是供電。15腳GND、16腳VCC(+5v)圖3-14MAX232的引腳圖按照串行通信原理,根據(jù)RS-232串口協(xié)議和MAX232芯片的引腳功能,結(jié)合STC89C52單片機(jī)串行中斷方式,本設(shè)計采用串口方式1(10位數(shù)據(jù)的異步通信)來構(gòu)建串口通信電路。電路如下圖3-15所示。設(shè)計中T1IN連接CMOS電平的單片機(jī)的串行發(fā)送端;T1OUT連接電腦的RS-232C串口的接收端PCRXD;同理,R1IN連接電腦的RS-232C串口的發(fā)送端PCTXD;R1OUT連接CMOS電平的單片機(jī)的串行接收端。當(dāng)然單片機(jī)和DB9要共地,這是實現(xiàn)串行通信的前提條件。圖3-15串口通信電路本章對充放電控制器的原理以及具體的硬件實現(xiàn)電路進(jìn)行了詳細(xì)的介紹,并對電路中使用到的芯片也予以描述,使讀者通過閱讀可以清晰的明白控制器的設(shè)計思路和實現(xiàn)過程。4太陽能充電控制器的軟件設(shè)計軟件設(shè)計采用C語言來實現(xiàn),受C語言模塊化編程設(shè)計思想的啟發(fā),本系統(tǒng)軟件設(shè)計采用模塊化設(shè)計思路,即整個控制軟件由許多獨(dú)立的子程序(子函數(shù))模塊組成,它們之間通過函數(shù)調(diào)用實現(xiàn)連接。既便于調(diào)試,連接,又便于移植、修改。系統(tǒng)軟件主要完成蓄電池電壓采集轉(zhuǎn)換,PWM脈沖充電控制、實時LCD顯示,異常報警等。包括以下幾部分:系統(tǒng)主程序設(shè)計,電壓采集轉(zhuǎn)換模塊,顯示模塊和異常數(shù)據(jù)存儲模塊。4.1系統(tǒng)主程序設(shè)計系統(tǒng)主程序流程圖如圖4-1所示。圖4-1系統(tǒng)主程序流程圖系統(tǒng)主程序是整個電壓測控系統(tǒng)中最重要的程序,是一個順序執(zhí)行的無限循環(huán)程序。蓄電池電壓的采集、轉(zhuǎn)換顯示和異常數(shù)據(jù)的存儲都在測控子程序中進(jìn)行,系統(tǒng)應(yīng)用主程序采用模塊化結(jié)構(gòu),首先完成初始化,然后就開始按順序調(diào)用各個模塊子程序,通過系統(tǒng)自檢和控制指令來實現(xiàn)數(shù)據(jù)處理和電路控制,有效的控制蓄電池充放電。4.2電壓采集轉(zhuǎn)換模塊為了更好理解模數(shù)轉(zhuǎn)換器的對蓄電池電壓采集轉(zhuǎn)換過程,下面首先對ADC0804的啟動和讀取時序圖予以介紹。時序圖如圖4-2所示。圖4-2ADC804時序圖如圖,當(dāng)CS與WR同時置低,為低電平時,A/D轉(zhuǎn)換器被啟動,且在WR上升沿后,經(jīng)過約100uS后,模數(shù)完成轉(zhuǎn)換,轉(zhuǎn)換結(jié)果存入數(shù)據(jù)鎖存器,同時,INTR自動變?yōu)榈碗娖?,表示本次轉(zhuǎn)換已結(jié)束。在INTR變?yōu)榈碗娖胶?,若CS、RD同時來低電平,則數(shù)據(jù)鎖存器的三態(tài)門打開,把數(shù)字信號送出,此時直接讀取數(shù)字端口數(shù)據(jù),便可得到轉(zhuǎn)換后的數(shù)字信號。反之,若RD為高電平,三態(tài)門處于高阻狀態(tài),數(shù)據(jù)被鎖存。芯片的時序圖是對芯片的操作的關(guān)鍵依據(jù)。按照ADC0804芯片的時序圖,此模塊通過對其進(jìn)行啟動和讀取操作,主要來完成對蓄電池電壓的采集轉(zhuǎn)換,并對結(jié)果進(jìn)行數(shù)據(jù)處理,送給后面的顯示模塊予以顯示。由于ADC0804的轉(zhuǎn)換時間很短,本設(shè)計未用中斷讀取A/D的數(shù)據(jù),而是在啟動A/D轉(zhuǎn)換后,稍等一會時間(程序中用延時函數(shù)實現(xiàn)),直接讀取A/D的數(shù)字輸出口即可。軟件設(shè)計中AD轉(zhuǎn)換模塊的流程圖如圖4-3所示。圖4-3A4.3顯示模塊通過電壓采集轉(zhuǎn)換子程序,通過單片機(jī)處理就可以得到蓄電池的實際電壓值,本設(shè)計用液晶1602作顯示器來進(jìn)行顯示。液晶1602通常用并行操作,作為一款顯示芯片,為了使其能夠正常的工作,首先必須對其進(jìn)行初始化,然后按照其時序圖進(jìn)行正確操作,才能夠得到滿意的顯示效果,這就是軟件設(shè)計中顯示模塊的任務(wù)。下面就1602的初始化指令和操作時序進(jìn)行介紹。液晶1602的初始化,是讓其正確顯示的前提,其初始化通常如下:EN=0;首先關(guān)閉使能,防止開始時顯示亂碼,同時為以后高脈沖寫入數(shù)據(jù)做準(zhǔn)備。write_com(0x38);//設(shè)置16X2顯示,5X7點陣,8位數(shù)據(jù)接口write_com(0x0c);//設(shè)置開顯示,不顯示光標(biāo)write_com(0x06);//寫一個字符后地址指針加1write_com(0x01);//顯示清零,數(shù)據(jù)指針清零了解液晶1602的基本操作時序,讀懂其操作時序圖,是對其讀寫操作的關(guān)鍵。1602的基本時序如下:讀狀態(tài)輸入:RS=L, =H,E=H 輸出:DO~D7=狀態(tài)字讀數(shù)據(jù)輸入:RS=H, =H,E=H 輸出:無寫指令輸入:RS=L,=L,DO~D7=指令碼,E=H高脈沖輸出:DO~D7=狀態(tài)字寫數(shù)據(jù)輸入:RS=H,=L,DO~D7=數(shù)據(jù),E=H高脈沖 輸出:無作為顯示用的芯片,通常對其進(jìn)行寫操作,1602液晶寫操作時序圖如圖4-4所示。圖4-41602液晶寫操作時序圖分析時序圖可知,對1602液晶進(jìn)行寫操作的流程如下:(1)通過RS確定是寫數(shù)據(jù)還是寫操作,寫命令包括使液晶的光標(biāo)顯示/不顯示、光標(biāo)是否閃爍、需/不需要移屏、在液晶的什么位置顯示,等等。寫數(shù)據(jù)是指要顯示什么內(nèi)容。(2)讀/寫控制端設(shè)置為寫模式,即低電平。(3)將數(shù)據(jù)或命令送到達(dá)數(shù)據(jù)線上。(4)給使能端E一個高脈沖將數(shù)據(jù)送入到液晶控制器,完成寫操作。關(guān)于時序圖中的各個延時,不同廠家生產(chǎn)的液晶延時不同,不過大多數(shù)基本為納秒級,而單片機(jī)操作最小單位為微秒級,因此在寫程序是可不做延時,不過為了使液晶運(yùn)行穩(wěn)定,最好做簡短延時即可。本設(shè)計采用C51庫中自帶的延時函數(shù)_nop_()(延時一個機(jī)器周期的意思)來實現(xiàn)簡短延時。按照1602液晶的寫操作時序圖,結(jié)合硬件連接電路,軟件設(shè)計中電壓顯示模塊的流程圖如圖4-5所示。圖4-5電壓顯示流程圖4.4數(shù)據(jù)存儲模塊在對蓄電池充放電控制過程中,會出現(xiàn)電壓值過高或過低的異常情況,很有必要對其進(jìn)行存儲,作為以后分析優(yōu)化使用;同時我們可以按一定周期間隔性的對蓄電池電壓進(jìn)行采集,然后求取電壓的平均值,通過分析每天的平均值情況,可以大致了解蓄電池的充電情況,這對以后優(yōu)化充放電很有用。本設(shè)計用常見E2PROM器件AT24C02作為存儲器對數(shù)據(jù)進(jìn)行保存記錄。AT24C02芯片的優(yōu)點:采用總線標(biāo)準(zhǔn),串行操作,可以簡化硬件電路;同時具有很好的掉電保護(hù)功能。由于STC89C52單片機(jī)沒有總線接口,所以使用時要先通過軟件模擬總線的工作時序,正確的調(diào)用函數(shù)就可方便的擴(kuò)展總線接口部件??偩€模擬時序圖如圖4-6所示。圖4-6總線模擬時序圖按照時序圖,設(shè)計中為了模擬總線通信,寫出了幾個關(guān)鍵部分的程序:總線初始化、啟動信號、應(yīng)答信號、停止信號等。下面以啟動信號為例進(jìn)行介紹。啟動信號的程序如下:在SCL為高電平期間,SDA一個下降沿為啟動信號。voidstart()//啟動信號{ sda=1; delay1(); scl=1; delay1(); sda=0; delay1();}作為存儲芯片最重要的是對其進(jìn)行寫操作,下面將給出總線發(fā)送一個字節(jié)的流程圖如圖4-7所示。并根據(jù)AT24C02字節(jié)寫入方式,結(jié)合總線時序圖,軟件中實現(xiàn)異常數(shù)據(jù)存儲的流程圖如圖4-8所示。圖4-7發(fā)送字節(jié)流程圖 圖4-8異常數(shù)據(jù)存儲流程圖當(dāng)檢測蓄電池充電使電壓值超過14.5v造成過充電時,首先蜂鳴器報警,標(biāo)志位置1,然后調(diào)用數(shù)據(jù)存儲函數(shù)把此時刻的電壓值保存下來;當(dāng)發(fā)生過放電時,同理如此。由于單片機(jī)的處理速度很快,因此很容易實現(xiàn)循環(huán)檢測,做到對蓄電池狀態(tài)的實時監(jiān)控。4.5軟件調(diào)試和仿真為了檢驗自己設(shè)計的單片機(jī)系統(tǒng)是否可以正常工作以及設(shè)計合理性,很有必要對系統(tǒng)進(jìn)行模擬仿真。通過仿真可以看出系統(tǒng)硬件設(shè)計的不合理部分,以方便改善使得系統(tǒng)更加合理;同時更重要的是驗證自己編寫的軟件程序是否已經(jīng)實現(xiàn)其功能,完成了相應(yīng)的設(shè)計要求和設(shè)計任務(wù)。軟件調(diào)試的過程:首先根據(jù)太陽能充電控制器軟件設(shè)計要完成的設(shè)計任務(wù),然后按照C語言模塊化設(shè)計的編程方法,設(shè)計出各個子模塊和主程序的算法流程圖,最后在KEILC51中去編寫相應(yīng)的程序去實現(xiàn)。當(dāng)然在編寫程序進(jìn)行軟件實現(xiàn)過程中,遇到的第一個問題就是:程序的調(diào)試。程序編寫后,進(jìn)行編譯,一開始發(fā)現(xiàn)了很多錯誤,一下子把自己卡住了;后來通過查看相關(guān)資料,同時咨詢指導(dǎo)老師和同學(xué)的經(jīng)驗,,在軟件的提示下,慢慢地修改,最終把出現(xiàn)的錯誤都改正過來了。最終在顯示輸出信息窗口出現(xiàn)了一下信息:Buildtarget'Target1' //創(chuàng)建目標(biāo)'Target1'compiling控制器移屏.c... //編譯文件控制器移屏.c…linking... //鏈接….ProgramSize:data=21.1xdata=0code=1572 //項目大?。捍鎯臻gRAM和ROM的數(shù)據(jù)存儲量creatinghexfilefrom"充放電控制器"...//創(chuàng)建了十六進(jìn)制的目標(biāo)文件"充放電控制器"-0Error(s),0Warning(s).//工程“充放電控制器”,編譯結(jié)果-0個錯誤,0個警告。當(dāng)看到這個信息時,我很激動,知道自己編寫的程序終于調(diào)試成功了。通過編寫和調(diào)試程序,深深的體會到了程序編寫的不易和艱辛,同時積累了很多的經(jīng)驗,收益匪淺。更十分地感謝我的同學(xué)和指導(dǎo)老師的無私幫助,是在他們的指導(dǎo)下,我才把程序調(diào)試無誤完成了軟件調(diào)試工作。程序調(diào)試成功后,下一步就是軟件仿真,是檢驗程序運(yùn)行是否正確的關(guān)鍵所在,更是優(yōu)化系統(tǒng)所必須的。Proteus軟件為單片機(jī)系統(tǒng)提供了良好的仿真環(huán)境,所以程序調(diào)試完成后,把在KEIL中生成的目標(biāo)文件HEX文件,下載在仿真系統(tǒng)的單片機(jī)中,進(jìn)行KEIL和proteus聯(lián)合調(diào)試,看系統(tǒng)是否能正常工作。和自己當(dāng)初預(yù)料的一樣,在剛開始仿真時,遇到了許多的問題,如1602液晶不顯示,系統(tǒng)工作狀態(tài)指示燈指示狀態(tài)不正確等等,調(diào)試很久找不到關(guān)鍵所在。無奈之下,最后去咨詢指導(dǎo)老師該怎么辦,老師說可以在模擬的電池板和蓄電池附近并聯(lián)虛擬的電壓表,通過電壓表的示數(shù),用以時刻監(jiān)測蓄電池的充放電狀態(tài)。果然加上虛擬電壓表,通過監(jiān)測后發(fā)現(xiàn)蓄電池兩端電壓表的示數(shù)一直顯示為零,明白是AD轉(zhuǎn)換部分出現(xiàn)問題,然后通過修改AD轉(zhuǎn)換模塊的子程序,同時調(diào)整硬件引腳部分與軟件相一致,慢慢的調(diào)試,最終蓄電池兩端電壓表有了示數(shù),液晶1602也正確的顯示了。然后再慢慢調(diào)試主程序,修改控制指令,最終三個工作狀態(tài)指示燈也正確指示了。系統(tǒng)共三種狀態(tài):正常充電、過充、過放。這里僅列出系統(tǒng)在正常工作狀態(tài)下的仿真圖,如下圖4-9所示,以便更形象的看出充電控制器內(nèi)部結(jié)構(gòu)設(shè)計和實現(xiàn)功能。正常工作時的狀態(tài):(此時電壓13.4V)圖4-9正常工作狀態(tài)仿真其工作原理如下,單片機(jī)在軟件程序控制下,控制著各個部分硬件電路有序工作,把從模數(shù)轉(zhuǎn)換器得到的蓄電池的電壓值,用1602液晶去顯示,同時綠燈亮起表示系統(tǒng)正在充電。(注:這里為了得到更加逼真效果,仿真時采用直流電機(jī)作為負(fù)載)。由于利用C語言開發(fā)單片機(jī)與匯編語言相比,具有易于操作、規(guī)范性好、適合模塊化處理且容易移植的優(yōu)點,所以本設(shè)計采用C語言作為編程語言。按照C語言模塊化程序設(shè)計方法,論文編制了系統(tǒng)主程序和各個子程序模塊來實現(xiàn)PWM脈寬調(diào)制控制策略和各種保護(hù),完成了軟件設(shè)計任務(wù)。5總結(jié)與展望5.1設(shè)計總結(jié)通過復(fù)習(xí)以前學(xué)過的專業(yè)知識,同時對相關(guān)的資料和論文進(jìn)行解讀與綜合分析、研究加上參與課題的實踐,在導(dǎo)師的指導(dǎo)和同學(xué)的幫助下,最后基本完成了開題報告中確定的設(shè)計任務(wù)。太陽能已經(jīng)成為21世紀(jì)非常重要的新能源之一。在光伏發(fā)電系統(tǒng)中,太陽能充電控制器起著樞紐作用,其性能優(yōu)劣直接影響實際應(yīng)用的效率。為了克服市場上常見充電控制器存在的對蓄電池保護(hù)不夠充分的缺點,本設(shè)計基于太陽能充電控制器要實現(xiàn)的具體功能,加上實際工業(yè)應(yīng)用嚴(yán)格要求,從模塊化的思想出發(fā)具體開展各方面的設(shè)計工作,把硬件電路和軟件編程有效結(jié)合在一起來完成設(shè)計任務(wù)。具體來講,論文主要做了下面一些工作:(1)對鉛酸蓄電池的充放電原理、影響蓄電池使用壽命的各種因素作了一定的分析,提出了改進(jìn)的充、放電方式,確定了太陽能充電控制器的總體設(shè)計方案。(2)論述了基于單片機(jī)的太陽能充放電控制系統(tǒng)的硬件電路組成及其工作原理,并詳細(xì)分析了各組成單元電路的性能及其工作原理,完成了充電控制器的硬件電路設(shè)計??刂破饕許TC89C52單片機(jī)為主控芯片,在軟件程序控制下輸出PWM控制信號,系統(tǒng)硬件電路設(shè)計包括單片機(jī)及外圍電路設(shè)計、充放電電路設(shè)計、光耦驅(qū)動電路設(shè)計、電壓顯示電路設(shè)計、數(shù)據(jù)存儲電路設(shè)計、串口通信電路設(shè)計等。整個系統(tǒng)的硬件設(shè)計采用了模塊化設(shè)計結(jié)構(gòu),可以根據(jù)實際需要靈活配置,從而有利于實際應(yīng)用的推廣。所涉及的相關(guān)模塊的電路設(shè)計,有的采用的是常見的經(jīng)典電路的結(jié)構(gòu),有些是在原有結(jié)構(gòu)的基礎(chǔ)上,采用了集成度更高的現(xiàn)代芯片,從而使電路變得更加簡單、可靠。不論怎樣說,硬件電路設(shè)計,其實是一個對自己所學(xué)的專業(yè)知識吸收、分析、理解、掌握同時再創(chuàng)新的過程,能夠靈活使用,遇到新問題能夠解決目的也就達(dá)到了(3)在硬件設(shè)計的基礎(chǔ)上,對太陽能充放電控制器進(jìn)行了算法分析并編制了程序,軟件編程實現(xiàn)對蓄電池的過充、過放、反接等保護(hù)。在軟件設(shè)計過程中,深刻體會到了軟件設(shè)計的靈活和多樣性,在確定整體布局方案的思路指導(dǎo)下,先確定每個程序的結(jié)構(gòu)框架即流程圖,然后按照自頂向下的層次逐漸完成程序的模塊化設(shè)計。設(shè)計要求是從實際應(yīng)用需求中抽取而來,由于實際需求往往很復(fù)雜,因而一定要把設(shè)計要求層次化,首先實現(xiàn)最低要求,解決根本問題,然后再去完善、提高,這就是總結(jié)出來的軟件開發(fā)思路。本設(shè)計針對太陽能充放電控制系統(tǒng)的研究,是對單片機(jī)技術(shù)、通信技術(shù)、電子技術(shù)和自動化等專業(yè)知識的綜合運(yùn)用。在設(shè)計和開發(fā)的過程中,緊密結(jié)合充電控制器的實際情況,綜合了目前一些先進(jìn)的充電控制策略。5.1展望由于實踐經(jīng)驗缺乏,以及技術(shù)水平和實驗條件的限制,本系統(tǒng)部分功能尚未完成,需要進(jìn)一步完善,主要表現(xiàn)在以下幾個方面:(1)對系統(tǒng)中的單片機(jī)控制功能需要進(jìn)一步研究,以便找到功能更加強(qiáng)大的主控芯片去代替,從而更好更快的實現(xiàn)設(shè)計要求。(2)對蓄電池電壓的采集方式過于簡單,精度較低,需要探索采集精度更加精準(zhǔn)的經(jīng)典電路,使得對蓄電池的充電控制更加準(zhǔn)確。(3)系統(tǒng)軟件設(shè)計可增加串行中斷控制方式,從而方便用上位機(jī)(如微機(jī))通過串行通信進(jìn)行有效的監(jiān)控,增強(qiáng)對系統(tǒng)的在線檢測和控制功能。參考文獻(xiàn)[1]余發(fā)山,王福忠.單片機(jī)原理及應(yīng)用技術(shù).徐州:中國礦業(yè)大學(xué)出版社,2008.6[2]何立民.單片機(jī)高級教程.北京:航空航天大學(xué)出版社,2001[3]艾永樂,付子義.模擬電子技術(shù)基礎(chǔ).北京:中國電力出版社,2008.11[4]郭天祥.新概念51單片機(jī)C語言教程—入門、提高、開發(fā)、拓展全攻略.北京:電子工業(yè)出版社,2009.1[5]談世哲.ProtelDXP2004電路設(shè)計基礎(chǔ)與典型范例.北京:電子工業(yè)出版社,2007.9[6]馬忠梅,張凱等.單片機(jī)的C語言應(yīng)用程序設(shè)計(第四版).北京:北京航空航天大學(xué)出版社,2007.1[7]侯玉寶,陳忠平,李成群等編著.基于Proteus的51系列單片機(jī)設(shè)計與仿真.北京:電子工業(yè)出版社,2008.9[8]楊金煥.太陽能光伏發(fā)電應(yīng)用技術(shù).北京:電子工業(yè)出版社,2009.1[9]周志敏,紀(jì)愛華.太陽能光伏發(fā)電系統(tǒng)設(shè)計與應(yīng)用實例.北京:電子工業(yè)出版社,2010.7[10]魏學(xué)業(yè)等.太陽能充電控制器研究.新能源,2009.[11]何朝陽,戴君,吳立琴.基于STCl2C54lOAD的太陽能路燈控制器設(shè)計.電子設(shè)計工程報,2007:27—30.[12]馮垛生.太陽能發(fā)電原理與應(yīng)用[M].人民郵電出版社,2007[13]鐘勇等.風(fēng)光互補(bǔ)發(fā)電系統(tǒng)中蓄電池充放電控制器的研究.合肥:合肥工業(yè)大學(xué),2006.11[14]張艷紅等.一種新型光伏發(fā)電充放電控制器.可再生能源,2006.5[15]劉文剛等.基于單片機(jī)的新型太陽能控制器研究.廣州:華南理工大學(xué)2008.11致謝回顧大學(xué)的四年學(xué)習(xí)生涯,有很多收獲但也存在不足,在學(xué)習(xí)生涯即將結(jié)束之際,對四年來關(guān)心、指導(dǎo)、幫助和鼓勵過我的老師、同學(xué)們表示衷心的感謝。本畢業(yè)論文是在高慶華老師的悉心指導(dǎo)下進(jìn)行的。從最初的定題,到資料收集,到寫作、修改,直至論文定稿,高老師都給了我耐心的指導(dǎo)和無私的幫助,使得我的畢業(yè)設(shè)計課題能夠深入地進(jìn)行下去,從而使我接觸到了許多新知識和實際應(yīng)用的新問題,使我做了許多有益的思考,加深了對本專業(yè)核心知識的認(rèn)識和對工程設(shè)計的思考。在此首先對高老師表示誠摯的感謝和由衷的敬意!還要非常地感謝大學(xué)學(xué)習(xí)期間的授課老師和同學(xué)在學(xué)習(xí)中給我的教導(dǎo)和幫助,謝謝!最后,自己之所以能順利完成,更要感謝自己的父母,如果沒有他們每日辛苦的勞動與從小對我學(xué)習(xí)嚴(yán)格的要求,而且培養(yǎng)我認(rèn)真做事的態(tài)度,也沒有今天的我,可以說正是他們的養(yǎng)育和教導(dǎo),才使我有了現(xiàn)在的成績。附錄Ⅰ源程序系統(tǒng)主程序代碼controller.c:#include<reg52.h> #include<intrins.h> //庫函數(shù)頭文件,代碼中引用了_nop_()函數(shù)#include"define.h" //變量定義和函數(shù)的聲明#include"init.h" //初始化模塊#include"AD.h" //AD轉(zhuǎn)換模塊#include"yj1602.h" //液晶1602顯示模塊#include"AT24C02.h" //數(shù)據(jù)存儲模塊/*主函數(shù)*/voidmain(){ init(); init1602(); init24c02(); battery_v=get_ad(); yj1602(); if(battery_v<108)PWM=0;//首次要直接充電 elsePWM=1; while(1) { delay(5000); battery_v=get_ad(); yj1602(); if(battery_v<0)//蓄電池反接,立刻關(guān)閉充放電電路,蜂鳴器報警 { PWM=1;FuZai=1;buzzer(); } if(battery_v>=108)//蓄電池電壓大于10.8V { if(145<=battery_v) { LED1=0;//開啟過電壓指示燈 LED=1; LED2=1; PWM=1;//停止充電 buzzer(); //蜂鳴器報警 write=1; AT24c02(); } elseif(120<=battery_v<145)//蓄電池電壓大于12v而且小于13.5v { LED=0;LED1=1;LED2=1; TR0=1; //開啟固定PWM充電 if(count==4) { PWM=0; } if(count==12) { count=0; PWM=1; } } elseif(battery_v<120) { LED=0;LED1=1;LED2=1; TR0=0; PWM=0; } } else { LED=1;//開啟欠壓指示燈 LED1=1; LED2=0; FuZai=1;//關(guān)閉負(fù)載 PWM=0; buzzer(); write=1; AT24c02(); } }}/*****定時中斷函數(shù)*****/voidtimer0()interrupt1{ TH0=(65536-50000)/256; TL0=(65536-50000)%256;//定時時間為50ms,每50ms中斷一次 count++;} 以下代碼為define.h //變量定義和函數(shù)的聲明#defineucharunsignedchar#defineuintunsignedint//定義控制信號端口//充放電控制端口sbitPWM=P3^2;//蓄電池開關(guān)sbitFuZai=P3^3;//負(fù)載開關(guān)sbitLED=P2^3;//充電指示燈sbitLED1=P2^4;//充電指示燈sbitLED2=P2^5;//欠壓指示燈sbitbeep=P2^6;//蜂鳴器控制位ucharcount,battery_v;//AD轉(zhuǎn)換sbitcsad=P2^7; //定義AD的片選位sbitadwr=P3^6; //定義AD的WR端口sbitadrd=P3^7; //定義AD的RD端口unsignedcharV1,V2,V3,adval,ad_vo; //1602液晶顯示sbitRS=P2^0;//P2.0sbitRW=P2^1;//P2.1sbitEN=P2^2;//P2.2unsignedcharcodetable1[]="TYNCFDKZQXTSJ";unsignedcharcodetable2[]="D:12.0N:";unsignedcharcodelcdd[]="0123456789";ucharxs_vo,num;//AT24c02保存數(shù)據(jù)bitwrite=0;//寫24C02的標(biāo)志;sbitscl=P2^4;sbitsda=P2^5;ucharp=2,a1;RS232串口通信sbitRXD=P3^0;sbitTXD=P3^1;/*聲明調(diào)用函數(shù)*/voidinit();//初始化主函數(shù)voiddelay(unsignedintt);//可控延時函數(shù)voiddelay1();//軟件實現(xiàn)延時函數(shù),5個機(jī)器周期voidbuzzer();ucharget_ad(); // AD程序//1602液晶顯示部分voidwrite_com(ucharcom);voidwrite_data(uchardate);voidinit1602();voidyj1602();//AT24c02保存數(shù)據(jù)voidinit24c02();voidstart();//啟動voidstop();//停止voidrespons();//應(yīng)答voidwrite_byte(uchardate);//ucharread_byte();voidwrite_add(ucharaddress,uchardate);//ucharread_add(ucharaddress);voidAT24c02();以下代碼為init.h //初始化模塊voidinit()//初始化主函數(shù){ TMOD=0x01; TH0=(65536-50)/256; TL0=(65536-50)%256;//定時時間為50ms,每50ms中斷一次 EA=1; ET0=1; PWM=1;//初始化時先關(guān)閉充電 LED=0;//開啟正常工作指示燈 LED1=1;//關(guān)閉異常指示燈 LED2=1; beep=1; write=0; }/*延時函數(shù)*/voiddelay(unsignedintt){unsignedintj,i;for(i=0;i<t;i++)for(j=0;j<110;j++);}/*延時函數(shù)1*/voiddelay1(){_nop_(); _nop_();_nop_(); _nop_();_nop_();}//蜂鳴器報警函數(shù)voidbuzzer(){ beep=0; delay(10); beep=1;}以下代碼為AD.h //AD轉(zhuǎn)換模塊//ad轉(zhuǎn)換程序ucharget_ad() // AD程序{ csad=0;//置CSAD為0, adwr=1; _nop_(); adwr=0; //啟動AD轉(zhuǎn)換 _nop_(); adwr=1;delay(2);//AD轉(zhuǎn)換時間 P1=0xff;//讀取P1口之前先給其寫全1adrd=1;//選通ADCS _nop_(); adrd=0;//AD讀使能 _nop_(); adval=P1; //AD數(shù)據(jù)讀取賦給P1口,得到ad轉(zhuǎn)換的結(jié)果 adrd=1;ad_vo=(float)adval*150.0/256.0;//得到蓄電池的電壓 return(ad_vo); }以下代碼為yj1602.h //液晶1602顯示模塊/*LCD1602顯示部分子函數(shù)*/voidinit1602()//LCD初始化函數(shù){ EN=0; write_com(0x38);//設(shè)置16X2顯示,5X7點陣,8位數(shù)據(jù)接口 write_com(0x0c);//設(shè)置開顯示,不顯示光標(biāo) write_com(0x06);//寫一個字符后地址指針加1 write_com(0x01);//顯示清零,數(shù)據(jù)指針清零}voidwrite_com(ucharcom)//1602寫命令函數(shù){ RW=0; delay1(); RS=0;//RW=0,RS=0,寫LCD命令字 delay1(); EN=1;//E端時序 delay1(); P0=com;//將com中的命令字寫入LCD數(shù)據(jù)口 delay1(); EN=0; delay1(); delay(5); }voidwrite_data(uchardate)//1602寫數(shù)據(jù)函數(shù){RW=0;delay1();RS=1;//RW=1,RS=0,寫LCD數(shù)據(jù)delay1();EN=1;//E端時序delay1();P0=date;//將dat中的顯示數(shù)據(jù)寫入LCD數(shù)據(jù)口delay1();EN=0;delay1();delay(5); }voidyj1602(){ ucharxs_vo; init1602(); xs_vo=battery_v; V1=xs_vo/100;V2=x

溫馨提示

  • 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

提交評論