找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2576|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

基于BQ26500電池測(cè)量設(shè)計(jì)論文與源碼下載

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:336398 發(fā)表于 2018-5-23 12:33 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
摘要

鋰離子電池與其他種類(lèi)的電池相比有著諸多優(yōu)勢(shì),已經(jīng)成為我們?nèi)粘I钪斜夭豢缮俚囊徊糠。相信在使用鋰離子電池的過(guò)程中,我們常會(huì)考慮還剩多少電量的問(wèn)題,但是又找不到好的電量檢測(cè)方法,針對(duì)該要求,本文設(shè)計(jì)了一種基于單片機(jī)的鋰離子電池電量檢測(cè)系統(tǒng),該檢測(cè)系統(tǒng)可以滿(mǎn)足我們?nèi)粘I钪袑?duì)鋰離子電池電量檢測(cè)的需求,以全面掌握鋰離子電池的電量狀態(tài)。
本文主要敘述了基于單片機(jī)的鋰離子電池電量檢測(cè)系統(tǒng)的研究和設(shè)計(jì),該系統(tǒng)主要由模擬量采集、鋰離子電池檢測(cè)模塊、單片機(jī)模塊、以及LED驅(qū)動(dòng)顯示電量等相應(yīng)的部分組成,介紹了鋰離子電池的特點(diǎn)、電池電量檢測(cè)原理、系統(tǒng)的結(jié)構(gòu)及性能,重點(diǎn)介紹了該系統(tǒng)的軟硬件設(shè)計(jì)等。
考慮到檢測(cè)系統(tǒng)的復(fù)雜程度、精確性、可靠性等各個(gè)方面,本文介紹的設(shè)計(jì)方案能夠滿(mǎn)足我們對(duì)鋰離子電池電量檢測(cè)的要求。隨著電力系統(tǒng)電量的日益擴(kuò)大和電壓運(yùn)行等級(jí)的不斷提高,傳統(tǒng)的電量檢測(cè)系統(tǒng)暴露出越來(lái)越多的缺點(diǎn),難以滿(mǎn)足現(xiàn)代電網(wǎng)向自動(dòng)化、數(shù)字化發(fā)展的需要。本文首先概述了系統(tǒng)的設(shè)計(jì),LCD顯示部分方面的設(shè)計(jì)。然后介紹了AT89C51和BQ26500中電子接口的各項(xiàng)特性,同時(shí)對(duì)單元的結(jié)構(gòu)原理和功能劃分進(jìn)行了分析和研究,提出了軟件系統(tǒng)方面的設(shè)計(jì)方案,主程序和子程序的流程方案。
目錄

摘要

abstract

1. 緒論

1.1 研究背景

1.2研究意義

1.3 主要研究?jī)?nèi)容

2. 總體方案設(shè)計(jì)

2.1方案選擇

2.2 LCD顯示部分

2.2.1 LCD12864 概述

2.2.2 LCD12864基本用途

2.3  電池電量檢測(cè)芯片BQ26500

2.3.1 測(cè)量原理

2.3.2  電路圖設(shè)計(jì)

2.4  數(shù)據(jù)傳輸存儲(chǔ)芯片24C64

2.4.1  24C64概述

2.4.2  24C64引腳說(shuō)明

2.4.3  24C64特性介紹

2.5  時(shí)鐘芯片DS1302

2.5.1  DS1302概述

2.5.2  DS1302引腳說(shuō)明

3.軟件系統(tǒng)設(shè)計(jì)            

3.1 C語(yǔ)言簡(jiǎn)介            

3.2  程序設(shè)計(jì)流程

3.2.1  初始化

3.2.2  主程序流程圖

3.2.3A/D轉(zhuǎn)換與中斷服務(wù)

3.3  BQ26500總線(xiàn)時(shí)序

4.總結(jié)

致謝

參考文獻(xiàn)

附錄



1. 緒論
1.1 研究背景
電池(電池)是指將電解質(zhì)溶液和金屬電極保持在杯、槽、或其他容器或復(fù)合容器空間的一部分中產(chǎn)生電流的裝置,其將化學(xué)能轉(zhuǎn)化為電能。這是一個(gè)積極的和消極的觀(guān)點(diǎn)。隨著科學(xué)技術(shù)的進(jìn)步,電池通常是指發(fā)電的小型設(shè)備。比如太陽(yáng)能電池。電池的性能參數(shù)主要包括電動(dòng)勢(shì)、容量、比能和電阻。
采用電池作為能源,可獲得穩(wěn)定的電壓、穩(wěn)定的電流、長(zhǎng)時(shí)間穩(wěn)定的電源、受外界影響小的電流、電池結(jié)構(gòu)簡(jiǎn)單、攜帶方便、充放電操作容易、不受外界氣候和溫度的影響。RE,穩(wěn)定可靠的性能,以及在現(xiàn)代社會(huì)生活中。所有方面都起著很大的作用,如手機(jī)、手表等電子數(shù)字便攜設(shè)備!
額定電壓
電池在常溫下的典型工作電壓也稱(chēng)為標(biāo)稱(chēng)電壓。為選擇不同類(lèi)型的電池提供參考。電池的實(shí)際工作電壓等于正壓電極和負(fù)電極的平衡電極電位的差值。它僅與電極中活性物質(zhì)的類(lèi)型有關(guān),而與活性物質(zhì)的量無(wú)關(guān)。電池電壓本質(zhì)上是直流電壓,但在某些特殊條件下,由電極反應(yīng)引起的金屬晶體或某些相膜的相變將引起電壓的輕微波動(dòng)。這種現(xiàn)象被稱(chēng)為噪聲。波動(dòng)幅度很小,但頻率范圍很寬,因此可以區(qū)別于電路中的自激噪聲。
開(kāi)路電壓
開(kāi)路電壓下的電池端電壓稱(chēng)為開(kāi)路電壓。電池的開(kāi)路電壓等于電池正極電勢(shì)與負(fù)極電極電位在電池開(kāi)路時(shí)的差值(即,沒(méi)有電流通過(guò)兩極)。電池的開(kāi)路電壓由V表示,即V開(kāi)路=++-,其中,++和C分別是電池的正極和負(fù)極電位。電池的開(kāi)路電壓通常小于其電動(dòng)勢(shì)。這是因?yàn)殡姵貎蓸O電解液中的電極電位通常不是一個(gè)平衡的電極電位,而是一個(gè)穩(wěn)定的電極電位。通?梢哉J(rèn)為,電池的開(kāi)路電壓是電池的電動(dòng)勢(shì)。
1.2研究意義
鋰離子電池自問(wèn)世以來(lái),到現(xiàn)在已經(jīng)發(fā)展成為我們每個(gè)人眾多生活必需品當(dāng)中的一部分,是如今人們?cè)谌粘I钪惺褂脴O其廣泛的一種電池。我國(guó)通訊、電力電子等相關(guān)行業(yè)的飛速發(fā)展,使人們對(duì)鋰離子電池的利用率和維護(hù)工作的重視程度不斷提高,鋰離子電池電量檢測(cè)的市場(chǎng)需求隨之越來(lái)越大。然而現(xiàn)在的實(shí)際情況卻是由于國(guó)內(nèi)目前的一些檢測(cè)設(shè)備的檢測(cè)方法不精確等原因,使其不能完全滿(mǎn)足我們對(duì)鋰離子電池電量檢測(cè)的需求,同時(shí)國(guó)外的同類(lèi)檢測(cè)設(shè)備雖然性能較好,但是價(jià)格太高,不適合我們?nèi)粘z測(cè)使用。微處理器技術(shù)的發(fā)展與電池電量檢測(cè)方法的不斷改善,為提高鋰離子電池電量檢測(cè)系統(tǒng)的性能和降低其制造成本提供了可能。針對(duì)該要求,本文設(shè)計(jì)了一種基于單片機(jī)的鋰離子電池電量檢測(cè)系統(tǒng),該檢測(cè)系統(tǒng)的設(shè)計(jì)對(duì)全面掌握鋰離子電池的電量狀態(tài),提高其利用率具有現(xiàn)實(shí)意義。本設(shè)計(jì)的研究成果如果能夠得到大家的一致認(rèn)同,以致今后被廣泛應(yīng)用于我們的日常生活當(dāng)中,比如應(yīng)用于生活中常用的或常見(jiàn)的便攜式電子產(chǎn)品領(lǐng)域,這必將提高人們的日常生活質(zhì)量,并且還能起到提高鋰離子電池利用率的作用,從另一方面看,這也是從某種程度上響應(yīng)了國(guó)家“節(jié)能減排”政策。
1.3 主要研究?jī)?nèi)容
該課題是設(shè)計(jì)一個(gè)鋰離子電池電量檢測(cè)系統(tǒng),研究對(duì)象為符合國(guó)標(biāo)GB/T 18287-2000的鋰離子電池,其主要參數(shù)有:標(biāo)稱(chēng)電壓3.7V,標(biāo)稱(chēng)容量1050mAH,充電電壓4.2V。在做畢業(yè)設(shè)計(jì)的這段時(shí)間里,自己通過(guò)互聯(lián)網(wǎng)查詢(xún)、圖書(shū)館書(shū)籍資料搜索等多種途徑,對(duì)該課題的研究?jī)?nèi)容進(jìn)行了充分的理解與學(xué)習(xí),使我對(duì)鋰離子電池的電量檢測(cè)原理,以及一些基于單片機(jī)的C程序編寫(xiě)等內(nèi)容,都有了進(jìn)一步的了解與掌握。
本課題研究如何設(shè)計(jì)一個(gè)滿(mǎn)足我們?nèi)粘I钜蟮匿囯x子電池電量檢測(cè)系統(tǒng),要求適用于日常使用,必須控制成本,并且需要滿(mǎn)足精度的要求。本文的設(shè)計(jì)思路是利用單片機(jī)及一些市場(chǎng)上常見(jiàn)的功能芯片,經(jīng)過(guò)綜合所有應(yīng)考慮的重要因素后,最終確定了該檢測(cè)系統(tǒng)里的一些重要器件類(lèi)型,其鋰離子電池的電量檢測(cè)部分就選用流行于目前市場(chǎng)上并且較專(zhuān)業(yè)的電池電量檢測(cè)芯片BQ26500,輸出部分決定采用LCD輸出顯示。利用電池電量檢測(cè)芯片BQ26500,并且數(shù)碼輸出顯示我們所需數(shù)據(jù)的鋰離子電池電量檢測(cè)系統(tǒng),該系統(tǒng)由模擬量參數(shù)采集部分、電量檢測(cè)部分、中央處理控制部分(單片機(jī))以及LED驅(qū)動(dòng)顯示等相應(yīng)模塊組成,前兩部分可由BQ26500完成。至此,該基于單片機(jī)的鋰離子電池電量檢測(cè)系統(tǒng)的整體框架便已明了。
本文重點(diǎn)介紹了該鋰離子電池電量檢測(cè)系統(tǒng)的硬件設(shè)計(jì)和軟件設(shè)計(jì)。硬件設(shè)計(jì)的主要職責(zé)就是將系統(tǒng)分割成的各個(gè)功能部分組合成一個(gè)合理的可行性方案。





2. 總體方案設(shè)計(jì)2.1方案選擇
該系統(tǒng)總體結(jié)構(gòu)可以劃分為幾個(gè)重要部分:鋰離子電池模擬量參數(shù)采集部分、電量檢測(cè)部分、中央處理控制部分(單片機(jī))和LED驅(qū)動(dòng)顯示部分。每個(gè)部分重要器件的選型已經(jīng)在前面具體說(shuō)明,將系統(tǒng)總體結(jié)構(gòu)分為以上各部分后,整個(gè)系統(tǒng)的工作原理及重要模塊等信息便簡(jiǎn)單明了,系統(tǒng)每個(gè)部分都有著其自己重要的責(zé)任,只有系統(tǒng)內(nèi)的每個(gè)模塊都按其職責(zé)正常運(yùn)行,整個(gè)鋰離子電池電池檢測(cè)系統(tǒng)才能正常工作。如圖2-1所示,該圖為鋰離子電池電量檢測(cè)系統(tǒng)的總體結(jié)構(gòu)框圖,其中模擬量參數(shù)采集部分負(fù)責(zé)通過(guò)傳感器及測(cè)量電路等來(lái)采集鋰離子電池的模擬量參數(shù),這些參數(shù)包括鋰離子在放電過(guò)程中的電流(壓)大小、檢測(cè)到的溫度值等相關(guān)參數(shù);電量檢測(cè)部分主要負(fù)責(zé)依據(jù)上部分已經(jīng)采集到的參數(shù),對(duì)鋰離子電池的電量進(jìn)行檢測(cè)與計(jì)算,這兩個(gè)部分可由BQ26500完成;中央處理控制部分即單片機(jī)負(fù)責(zé)對(duì)整個(gè)系統(tǒng)進(jìn)行控制;LCD驅(qū)動(dòng)顯示部分負(fù)責(zé)驅(qū)動(dòng)LCD,并對(duì)被測(cè)鋰離子電池的剩余電量信息進(jìn)行數(shù)碼輸出顯示。
⑴根據(jù)設(shè)計(jì)要求,選擇STC89C51單片機(jī)為核心控制器件。
⑵A/D轉(zhuǎn)換采用ADC0809實(shí)現(xiàn),與單片機(jī)的接口為P1口和P2口的高四位引腳。
⑶將轉(zhuǎn)換結(jié)果進(jìn)行運(yùn)算,化為測(cè)量值。
方案一:
硬件電路設(shè)計(jì)由6個(gè)部分組成:A/D轉(zhuǎn)換電路,STC89C51單片機(jī)系統(tǒng),LCD顯示系統(tǒng)、時(shí)鐘電路、復(fù)位電路以及測(cè)量電壓輸入電路。硬件電路設(shè)計(jì)框圖如圖所示。
方案二:
硬件電路設(shè)計(jì)由6個(gè)部分組成:A/D轉(zhuǎn)換電路,STC89C51單片機(jī)系統(tǒng),LCD12864顯示系統(tǒng)、時(shí)鐘電路、復(fù)位電路以及測(cè)量電壓輸入電路。硬件電路設(shè)計(jì)框圖如圖所示。



方案論證:
    兩種方案相比較,第二種方案擁有明顯優(yōu)勢(shì)。首先方案一的功能太過(guò)單一,雖然達(dá)成了設(shè)計(jì)任務(wù),但實(shí)用性較差,沒(méi)有實(shí)際價(jià)值。如果對(duì)其進(jìn)行功能擴(kuò)展的話(huà),雖然可以解決功能單一的缺陷,但又會(huì)由于過(guò)多的顯示內(nèi)容而導(dǎo)致由LED數(shù)碼管構(gòu)成的顯示模塊過(guò)于復(fù)雜,對(duì)焊接工作造成困難,同時(shí)顯示效果一般。反觀(guān)方案二,在吸取方案一的優(yōu)點(diǎn)的前提之下,將顯示模塊升級(jí)為L(zhǎng)CD12864,這樣做就可以彌補(bǔ)方案一中的諸多不足,具有顯示內(nèi)容豐富,編程簡(jiǎn)單,電路復(fù)雜程度低等優(yōu)勢(shì)。
    綜上所述,方案二是一套更為切實(shí)可行的方案。
2.2 LCD顯示部分

LCD 12864 外觀(guān)圖

2.2.1 LCD12864 概述
12864 是一種具有4 位/8 位并行、2 線(xiàn)或3 線(xiàn)串行多種接口方式,內(nèi)部含有國(guó)標(biāo)一級(jí)、二級(jí)簡(jiǎn)體 中文字庫(kù)的點(diǎn)陣圖形液晶顯示模塊;其顯示分辨率為128×64, 內(nèi)置8192 個(gè)16*16 點(diǎn)漢字,和128 個(gè)16*8 點(diǎn)ASCII 字符 集.利用該模塊靈活的接口方式和簡(jiǎn)單、方便的操作指令,可構(gòu)成全中文人機(jī)交互圖形界面?梢燥@示8×4 行16×16 點(diǎn) 陣的漢字. 也可完成圖形顯示.低電壓低功耗是其又一顯著特點(diǎn)。由該模塊構(gòu)成的液晶顯示方案與同類(lèi)型的圖形點(diǎn)陣液晶 顯示模塊相比,不論硬件電路結(jié)構(gòu)或顯示程序都要簡(jiǎn)潔得多,且該模塊的價(jià)格也略低于相同點(diǎn)陣的圖形液晶模塊。 被測(cè)電流信號(hào) ﹝或被測(cè)電壓信號(hào) ﹞經(jīng)電流測(cè)頭1﹝或電壓測(cè)頭2﹞隔離變換,在二次回路形成高精度毫安級(jí)跟蹤電流,經(jīng)采樣電路3轉(zhuǎn)換為跟蹤電壓信號(hào),在經(jīng)定標(biāo)放大器4進(jìn)行放大、定標(biāo),形成跟蹤電壓輸出Vg;跟蹤電壓信號(hào)經(jīng)AC/DC轉(zhuǎn)換器5后,形成直流電壓輸出 。 輸出經(jīng)V/I轉(zhuǎn)換器6后形成直流輸出 , 輸出經(jīng)V/F變換器7后形成頻率輸出 。只有輸出跟蹤電壓 的產(chǎn)品才使用正負(fù)電源﹝+E,-E﹞,其他產(chǎn)品才使用單一正電源。
圖2-1中電流測(cè)頭1和電壓測(cè)頭2是本系列產(chǎn)品的關(guān)鍵部件,屬于精密互感器系列,承擔(dān)隔離和線(xiàn)性變換的雙重作用,改變電流測(cè)頭規(guī)格或改變電壓測(cè)頭的輸入電阻可以改變傳感器的測(cè)量范圍。定標(biāo)放大器4是一個(gè)寬帶交流放大器,它產(chǎn)生的電壓輸出 ,在波形和相位上快速跟蹤輸入信號(hào)的變化, 輸出型傳感器適用于交流采樣系統(tǒng)。轉(zhuǎn)換器5是配套研發(fā)的專(zhuān)用厚膜集成器件,它把交流電壓信號(hào)變換為直流電壓或直流電流輸出。轉(zhuǎn)換原理分為平均值轉(zhuǎn)換和真有效值轉(zhuǎn)換,平均值轉(zhuǎn)換器成本低,適用于標(biāo)準(zhǔn)正弦交流信號(hào)轉(zhuǎn)換;真有效值轉(zhuǎn)換器適用于含有多次諧波的交流信號(hào)(如三角波、矩形波、梯形波、可控硅調(diào)功波等),單成本較高。轉(zhuǎn)換器5(或轉(zhuǎn)換器6) 的“基準(zhǔn)波”接地時(shí),他輸出0~5V(或0~20mA);為它們配加以個(gè)高穩(wěn)定的偏置電路,就形成1V~5V(或4mA~20mA);為它們配加一個(gè)高穩(wěn)定的偏置電路,就形成了1V~5V(4mA~20mA)輸出。
2.2.2 LCD12864基本用途
1.使用前的準(zhǔn)備
先給模塊加上工作電壓,再按照下圖的連接方法調(diào)節(jié)LCD的對(duì)比度,使其顯示出黑色的底影。此過(guò)程亦可以初步檢測(cè)LCD有無(wú)缺段現(xiàn)象。
2.字符顯示
帶中文字庫(kù)的128X64-0402B每屏可顯示4行8列共32個(gè)16×16點(diǎn)陣的漢字,每個(gè)顯示RAM可顯示1個(gè)中 文字符或2個(gè)16×8點(diǎn)陣全高ASCII碼字符,即每屏最多可實(shí)現(xiàn)32個(gè)中文字符或64個(gè)ASCII碼字符的顯示。帶中文字庫(kù)的128X64-0402B內(nèi)部提供128×2字節(jié)的字符顯示RAM緩沖區(qū)(DDRAM)。字符顯示是通過(guò)將字符顯示編碼寫(xiě)入該字符顯示RAM實(shí)現(xiàn)的。根據(jù)寫(xiě)入內(nèi)容的不同,可分別在液晶屏上顯示CGROM(中文字庫(kù))、HCGROM(ASCII碼字庫(kù))及CGRAM(自定義字形)的內(nèi)容。三種不同字符/字型的選擇編碼范圍為:0000~0006H(其代碼分別是0000、0002、0004、0006共4個(gè))顯示自定義字型,02H~7FH顯示半寬ASCII碼字符,A1A0H~F7FFH顯示8192種GB2312中文字庫(kù)字形。字符顯示RAM在液晶模塊中的地址80H~9FH。字符顯示的RAM的地址與32個(gè)字符顯示區(qū)域有著一一對(duì)應(yīng)的關(guān)系,其對(duì)應(yīng)關(guān)系如下表所示。
80H
81H
82H
83H
84H
85H
86H
87H
90H
91H
92H
93H
94H
95H
96H
97H
88H
89H
8AH
8BH
8CH
8DH
8EH
8FH
98H
99H
9AH
9BH
9CH
9DH
9EH
9FH
3、圖形顯示
先設(shè)垂直地址再設(shè)水平地址(連續(xù)寫(xiě)入兩個(gè)字節(jié)的資料來(lái)完成垂直與水平的坐標(biāo)地址)
垂直地址范圍 AC5...AC0
水平地址范圍 AC3…AC0
2.3  電池電量檢測(cè)芯片BQ26500
2.3.1 測(cè)量原理
BQ26500的電量檢測(cè)原理我們也需要做簡(jiǎn)單的了解,BQ26500內(nèi)置了溫度傳感器,它通過(guò)內(nèi)置的溫度傳感器和內(nèi)部計(jì)數(shù)器來(lái)估算被測(cè)鋰離子電池的放電程度,放電的同時(shí)還可以根據(jù)溫度需要進(jìn)行溫度補(bǔ)償,并且能夠通過(guò)鋰離子電池的放電周期,校準(zhǔn)鋰離子電池的實(shí)際容量,外接內(nèi)部寫(xiě)有初始化程序的EEPROM,負(fù)責(zé)控制電池的管理工作,串口和外部EEPROM可以用來(lái)編程。
在日常生活中,使用鋰離子電池是一般都不需要進(jìn)行溫度保護(hù),因?yàn)槿粘G闆r下,鋰離子電池工作所在環(huán)境溫度不會(huì)超過(guò)其工作溫度范圍之外,除非需要該鋰離子電池一直處于長(zhǎng)期的持續(xù)的工作狀態(tài),這時(shí)候應(yīng)該采取適當(dāng)?shù)臏囟缺Wo(hù)措施。但是BQ26500是一款流行與目前市場(chǎng)上相當(dāng)專(zhuān)業(yè)的電池電量檢測(cè)芯片,BQ26500對(duì)被測(cè)鋰離子電池進(jìn)行電量檢測(cè)的同時(shí),會(huì)檢測(cè)鋰離子電池的溫度情況,因?yàn)锽Q2040內(nèi)置了溫度傳感器,可以進(jìn)行過(guò)熱保護(hù)等控制措施,不需要外接熱敏電阻,如果檢測(cè)到溫度過(guò)低,這時(shí)候BQ26500還可以進(jìn)行溫度補(bǔ)償,不需要外接諧振器等相關(guān)器件,進(jìn)一步減少了器件,降低了設(shè)計(jì)成本。
2.3.2  電路圖設(shè)計(jì)
作為一款電池電量檢測(cè)芯片,BQ2040負(fù)責(zé)完成鋰離子電池的電量檢測(cè)模塊的功能,它先采集所需被測(cè)鋰離子電池的信號(hào)參數(shù),然后按照原先已經(jīng)設(shè)定好的算法檢測(cè)計(jì)算出被測(cè)鋰離子電池的電量,通過(guò)I2C總線(xiàn)與單片機(jī)部分進(jìn)行數(shù)據(jù)交換,最終通過(guò)LCD驅(qū)動(dòng)顯示部分?jǐn)?shù)碼輸出顯示鋰離子電池的電量信息給用戶(hù)。電量檢測(cè)結(jié)果用LCD數(shù)碼輸出顯示,從而讓我們及時(shí)了解電量信息,完全掌握鋰離子電池的用電狀態(tài),提高利用率。
本系統(tǒng)電量檢測(cè)部分采用電池電量檢測(cè)芯片BQ2040,除了支持對(duì)鋰離子電池的高精度電量檢測(cè),還滿(mǎn)足其他多種電池的電量檢測(cè)工作,比如能夠很好的檢測(cè)鎳鎘電池、鎳氫電池的電量。
                                  BQ26500 電路圖


2.4  數(shù)據(jù)傳輸存儲(chǔ)芯片24C642.4.1  24C64概述
24C64芯片屬于24C系列里面常見(jiàn)的一款,該系列的主要功能是數(shù)據(jù)的存儲(chǔ)及傳輸。既然是數(shù)據(jù)傳輸存儲(chǔ)芯片,那么就會(huì)有每款芯片帶有多少存儲(chǔ)位的問(wèn)題,該系列的芯片擁有多少存儲(chǔ)位可以從24C后面的數(shù)字讀出來(lái)。如ATMEL的24C64,從后面的數(shù)字可以讀出其存儲(chǔ)位為64K。這個(gè)系列的芯片具有許多的優(yōu)勢(shì),例如能重復(fù)擦寫(xiě)1百萬(wàn)次以上,并且在其內(nèi)部已經(jīng)存儲(chǔ)成功的數(shù)據(jù)能夠長(zhǎng)期保持,時(shí)間達(dá)100年之久。24C64具有多種封裝形式可供選擇,現(xiàn)如今已被廣大電子行業(yè)從業(yè)者所接受,廣泛應(yīng)用于電力電子各個(gè)領(lǐng)域。
ATMEL的24C64是I2C 總線(xiàn)的EEPROM,I2C總線(xiàn)(Inter Integrated Circuit 內(nèi)部集成電路總線(xiàn))是兩線(xiàn)式串行總線(xiàn),只占用微處理器的2個(gè)I/O 引腳,僅需要時(shí)鐘和數(shù)據(jù)兩根線(xiàn)就可以進(jìn)行數(shù)據(jù)傳輸,令用戶(hù)使用起來(lái)十分便捷。
2.4.2  24C64引腳說(shuō)明
圖2-6  24C64引腳分布

表2.5  24C64引腳說(shuō)明
引腳符號(hào)
引腳名稱(chēng)
引腳描述
A0到A2
地址輸入端
確定連接器件的地址
SDA
串行數(shù)據(jù)端
需要附加一個(gè)上拉電阻,雙向引腳,可以輸出或輸入地址及數(shù)據(jù)。
SCL
串行時(shí)鐘輸入端
產(chǎn)生串行同步時(shí)鐘信號(hào)
VCC
電源輸入端
電源電壓輸入
GND
接地端
接地

2.4.3  24C64特性介紹
  •   低功耗器件
  •   2線(xiàn)串行接口
  •   雙向數(shù)據(jù)傳輸協(xié)議
  •   寫(xiě)保護(hù)引腳用于硬件數(shù)據(jù)保護(hù)
  •   高可靠性

2.5  時(shí)鐘芯片DS13022.5.1  DS1302概述
DS1302是美國(guó)DALLAS公司推出的一種高性能、低功耗、帶RAM的實(shí)時(shí)時(shí)鐘電路,它可以對(duì)年、月、日、時(shí)、分、秒進(jìn)行計(jì)時(shí),具有閏年補(bǔ)償功能,工作電壓為2.5V~5.5V。通過(guò)簡(jiǎn)單的串行接口,采用三線(xiàn)接口與CPU進(jìn)行同步通信,內(nèi)部有一個(gè)31×8的用于臨時(shí)性存放數(shù)據(jù)的靜態(tài)RAM。它具有主電源/后備電源雙電源引腳,VCC1為后備電源,VCC2為主電源。在主電源關(guān)閉的情況下,也能保持時(shí)鐘的連續(xù)運(yùn)行。DS1302由VCC1或VCC2兩者中的較大者供電。當(dāng)Vcc2大于Vcc1+0.2V時(shí),DS1302由VCC2供電;當(dāng)VCC2小于VCC1時(shí),DS1302由VCC1供電。
DS1302功能:①日期時(shí)間信息;②每月的天數(shù)和閏年的天數(shù)可自動(dòng)調(diào)整;③通過(guò)AM/PM指示決定采用24或12小時(shí)格式;④保持?jǐn)?shù)據(jù)和時(shí)鐘信息時(shí)功率小于1mW。
2.5.2  DS1302引腳說(shuō)明
圖2-7  DS1302引腳分布



表2.6  DS1302引腳說(shuō)明
引腳符號(hào)
引腳名稱(chēng)
引腳描述
X1、X2
晶振引腳
32.768KHz
GND
接地引腳
接地
CE
復(fù)位腳
在讀/寫(xiě)數(shù)據(jù)期間必須為高
I/O
數(shù)據(jù)輸入/輸出
三線(xiàn)接口時(shí)的雙向數(shù)據(jù)線(xiàn)
SCLK
串行時(shí)鐘引腳
控制數(shù)據(jù)的輸入與輸出
VCC1、VCC2
電源供電引腳
VCC1:主電源;VCC2:備份電源





3.軟件系統(tǒng)設(shè)計(jì)3.1 C語(yǔ)言簡(jiǎn)介

C語(yǔ)言是近年來(lái)在國(guó)內(nèi)外普遍使用的一種程序設(shè)計(jì)語(yǔ)言。C語(yǔ)言功能豐富,表達(dá)能力強(qiáng)應(yīng)用廣,既有高級(jí)語(yǔ)言的特點(diǎn),也有匯編語(yǔ)言的特點(diǎn)。C是中級(jí)語(yǔ)言。它把高級(jí)語(yǔ)言的基本結(jié)構(gòu)和語(yǔ)句與低級(jí)語(yǔ)言的實(shí)用性結(jié)合起來(lái)。C 語(yǔ)言可以像匯編語(yǔ)言一樣對(duì)位、字節(jié)和地址進(jìn)行操作, 而這三者是計(jì)算機(jī)最基本的工作單元。

C是結(jié)構(gòu)式語(yǔ)言。結(jié)構(gòu)式語(yǔ)言的顯著特點(diǎn)是代碼及數(shù)據(jù)的分隔化,即程序的各個(gè)部分除了必要的信息交流外彼此獨(dú)立。這種結(jié)構(gòu)化方式可使程序?qū)哟吻逦阌谑褂、維護(hù)以及調(diào)試。C 語(yǔ)言是以函數(shù)形式提供給用戶(hù)的,這些函數(shù)可方便的調(diào)用,并具有多種循環(huán)、條件語(yǔ)句控制程序流向,從而使程序完全結(jié)構(gòu)化。

C語(yǔ)言功能齊全。具有各種各樣的數(shù)據(jù)類(lèi)型,并引入了指針概念,可使程序效率更高。另外C語(yǔ)言也具有強(qiáng)大的圖形功能,支持多種顯示器和驅(qū)動(dòng)器。而且計(jì)算功能、邏輯判斷功能也比較強(qiáng)大。

3.2 程序設(shè)計(jì)流程3.2.1  初始化

初始化程序流程圖

初始化程序的功能就是初始化各個(gè)端口,使其各部件完成先前的準(zhǔn)備工作。設(shè)置好各個(gè)端口的功能,比如哪些端口設(shè)置為中斷的輸入口,哪些設(shè)置為外部模塊。設(shè)置完成以后就可以打開(kāi)各個(gè)中斷使能,使系統(tǒng)響應(yīng)相對(duì)應(yīng)的中斷跳轉(zhuǎn)程序。


3.2.2  主程序流程圖

主程序流程圖
3.2.3A/D轉(zhuǎn)換與中斷服務(wù)
AT89C51內(nèi)部有兩個(gè)16位的可編程定時(shí)器/計(jì)數(shù)器,T0和T1。定時(shí)器實(shí)際上是工作在計(jì)數(shù)方式下 ,只不過(guò)對(duì)固定平率的脈沖計(jì)數(shù),由于脈沖周期也固定,由計(jì)數(shù)值可以計(jì)算出計(jì)數(shù)時(shí)就愛(ài)你,有定時(shí)的功能。AT89C51的T/C是加1計(jì)數(shù)的。當(dāng)工作在定時(shí)器方式時(shí),對(duì)振蕩源12分頻的脈沖計(jì)數(shù),即每個(gè)機(jī)器周期計(jì)數(shù)值加1,計(jì)數(shù)速率1/12fosc,當(dāng)fosc=12MHz時(shí),計(jì)數(shù)速率=1000KHz,即計(jì)數(shù)器每加1用時(shí)1us。


  A/D轉(zhuǎn)換與中斷服務(wù)流程圖
3.3  BQ26500總線(xiàn)時(shí)序
BQ26500采用電源系統(tǒng)管理Veil.0(SMBus)協(xié)議,支持智能電池?cái)?shù)據(jù)管理命令(SBData)和智能電池充電控制(SBData)功能,通過(guò)串行接口可以檢測(cè)鋰離子電池的充電狀態(tài)、剩余電量、放電剩余時(shí)間、電池材料等信息。
SMBus是System Management Bus的縮寫(xiě),譯為系統(tǒng)管理總線(xiàn),SMBus是一種二線(xiàn)制串行總線(xiàn),它大部分基于I2C(Inter-Integrated Circuit)總線(xiàn)規(guī)范。I2C兩線(xiàn)(串行數(shù)據(jù)SDA和串行時(shí)鐘SCL線(xiàn))式串行總線(xiàn),用于連接微控制器及其外圍設(shè)備,是微電子通信控制領(lǐng)域廣泛采用的一種總線(xiàn)標(biāo)準(zhǔn)。I2C是同步通信的一種特殊形式,具有接口線(xiàn)少,控制方式簡(jiǎn)單,器件封裝形式小,通信速率較高等優(yōu)點(diǎn)。和I2C一樣,SMBus不需增加額外引腳,但是工作頻率只能在10kHz到最高100kHz范圍內(nèi),且專(zhuān)門(mén)面向智能電池管理應(yīng)用。SMBus為系統(tǒng)電源管理等任務(wù)提供了一條控制總線(xiàn),使用SMBus的系統(tǒng),設(shè)備之間發(fā)送和接收消息都是通過(guò)SMBus,而不是使用單獨(dú)的控制線(xiàn),這樣可以節(jié)省設(shè)備的管腳數(shù)。
SMBus最初的目的是為智能電池、充電電池和與其他系統(tǒng)通信的微控制器之間的通信鏈路而定義的,如今也被用來(lái)連接各種設(shè)備,包括電源相關(guān)設(shè)備,系統(tǒng)傳感器,EEPROM通訊設(shè)備等等,但SMBus最適用于筆記本電腦上,檢測(cè)各元件狀態(tài)并更新硬件設(shè)置。

4.總結(jié)
    硬件設(shè)計(jì)完成將待設(shè)計(jì)的系統(tǒng)分割成各個(gè)功能模塊,然后組合成一個(gè)合理的可行性方案的任務(wù),用Protel等相關(guān)軟件完成硬件原理圖的設(shè)計(jì)后,制成PCB板。軟件設(shè)計(jì)則負(fù)責(zé)根據(jù)系統(tǒng)相關(guān)的功能要求,進(jìn)行模塊的編程等,完成硬件設(shè)計(jì)后,我們可以通過(guò)Keil4.0等類(lèi)似軟件對(duì)單片機(jī)燒入程序,最后便可進(jìn)行鋰離子電池電量檢測(cè)系統(tǒng)的檢測(cè)試驗(yàn),定時(shí)記錄相關(guān)數(shù)據(jù),對(duì)鋰離子電池電量檢測(cè)結(jié)果的準(zhǔn)確性進(jìn)行測(cè)試。
系統(tǒng)測(cè)試的思路可以針對(duì)BQ2040內(nèi)的三個(gè)重要寄存器:Full Charge Capacity(FCC)、Remaining Capacity(RM)、Discharge Count Register(DCR)。通過(guò)每隔一定時(shí)間讀取這三個(gè)寄存器的數(shù)據(jù),這樣記錄多組數(shù)據(jù)后,可以通過(guò)以下幾個(gè)主要關(guān)系進(jìn)行驗(yàn)證分析系統(tǒng)的準(zhǔn)確性及可靠性:
  • RM ≤ FCC。
  • 放電的逆過(guò)程即充電,充電期間,RM數(shù)值停止遞增,則RM=FCC,這時(shí)我們讀取的RM應(yīng)近似等于FCC,此時(shí)DCR=0。若要鋰離子電池充分充電,我們還可以根據(jù)BQ2040進(jìn)行充電控制,向RM寫(xiě)入一個(gè)用戶(hù)自定義的值。
  • DCR隨著RM的遞減逐漸增大,直到RM=0,鋰離子電池放電和自放電都會(huì)使DCR增大,但當(dāng)RM=0后,只有放電才使DCR增大。

我做的基于單片機(jī)的電量檢測(cè)系統(tǒng)課程設(shè)計(jì)完成了,基本上達(dá)到了預(yù)期的目的。當(dāng)初拿到這個(gè)題目的時(shí)候都不知道怎么入手,但在老師的指導(dǎo)下,自己找資料、看書(shū),總算完成了。通過(guò)此次的畢業(yè)設(shè)計(jì),使我對(duì)單片機(jī)有了更深一層的了解,從理論和實(shí)踐我都得到了很大的提高,所以這次任務(wù)的完成使我學(xué)到了很多知識(shí)。首先,豐富了自己的知識(shí)面,學(xué)通了以前沒(méi)學(xué)通的東西,具體了解了怎么去完成一個(gè)電路的設(shè)計(jì)。在此次的設(shè)計(jì)中,學(xué)到了單片機(jī)AT89C51的內(nèi)部結(jié)構(gòu)及工作原理,了解了時(shí)鐘電路和控制電路的工作原理,還有共陽(yáng)極數(shù)碼管的工作原理,同時(shí)也提高了我的C語(yǔ)言使用能力,并且挺高了自己分析問(wèn)題和解決問(wèn)題的能力,有了理論聯(lián)系實(shí)際的機(jī)會(huì),為以后從事這個(gè)方面的工作打好了基礎(chǔ),這也是這次畢業(yè)設(shè)計(jì)的最大收獲。
這次的畢業(yè)設(shè)計(jì)總的來(lái)說(shuō)還是比較成功的,能夠?qū)崿F(xiàn)電壓顯示,如果單獨(dú)查看電壓或電流,可以通過(guò)安檢控制查看電壓或電流,但是還是有許多不足之處,不過(guò)的確從中學(xué)到了很多,也發(fā)現(xiàn)了自己的很多問(wèn)題,為自己以后的學(xué)習(xí)、進(jìn)步打下了不錯(cuò)的基礎(chǔ)。
致謝

經(jīng)過(guò)兩個(gè)多月的時(shí)間,我在導(dǎo)師廖建文的指導(dǎo)下,完成了整個(gè)系統(tǒng)的設(shè)計(jì)和制作。在這段時(shí)間當(dāng)中,感受最深的就是解決問(wèn)題的一些方法、技巧。在整個(gè)設(shè)計(jì)過(guò)程中,我遇到了很多的問(wèn)題,通過(guò)查閱相關(guān)資料、冷靜理性的分析、方案的對(duì)比和實(shí)驗(yàn)證明,最終解決了所遇到的問(wèn)題。

對(duì)我而言,知識(shí)上的收獲重要,精神上的豐收更加可喜。挫折是一份財(cái)富,經(jīng)歷是一份擁有。這次實(shí)習(xí)必將成為我人生旅途上一個(gè)非常美好的回憶!此次課程設(shè)計(jì),學(xué)到了很多課內(nèi)學(xué)不到的東西,比如獨(dú)立思考解決問(wèn)題,出現(xiàn)差錯(cuò)的隨機(jī)應(yīng)變,和與人合作共同提高,都受益匪淺,今后的制作應(yīng)該更輕松,自己也都能扛的起并高質(zhì)量的完成項(xiàng)目。對(duì)于我來(lái)說(shuō),收獲最大的是自己主動(dòng)去解決問(wèn)題,并在試驗(yàn)中總結(jié)解決方法,學(xué)會(huì)去分析問(wèn)題出現(xiàn)的原因,以及應(yīng)該從哪個(gè)部分去解決,但無(wú)法出現(xiàn)正確結(jié)果是,需耐心的檢查電路,因?yàn)榇蠖鄶?shù)出問(wèn)題都是因?yàn)橐粌筛(xiàn)沒(méi)接或接錯(cuò)的問(wèn)題。
總體來(lái)說(shuō),通過(guò)這次課程設(shè)計(jì)學(xué)習(xí),讓我對(duì)各種電路都有了大概的了解,也學(xué)會(huì)了常用繪圖軟件的使用,在平時(shí)的理論學(xué)習(xí)中遇到的問(wèn)題都一一解決,加深了我對(duì)專(zhuān)業(yè)的了解,培養(yǎng)了我對(duì)學(xué)習(xí)的興趣,為以后的學(xué)習(xí)打下了好的開(kāi)端,我受益匪淺。同時(shí),讓我明白:這些電路還是應(yīng)該自己動(dòng)手實(shí)際操作才會(huì)有深刻理解,才會(huì)有收獲,所謂“一行勝千言”果然不假。
最后,我要感謝我系安排了此次課程設(shè)計(jì),這為我們以后的畢業(yè)設(shè)計(jì)奠定了良好的基礎(chǔ),并更好地復(fù)習(xí)和鞏固了以前學(xué)過(guò)的理論知識(shí)?傊敬握n程設(shè)計(jì)讓我們受益匪淺!

單片機(jī)源程序如下:
  1. #include<reg51.h>
  2. #include <intrins.h>

  3. #define uchar unsigned char
  4. #define uint unsigned int


  5. #define LCD_data  P0       //數(shù)據(jù)口
  6. uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
  7. sbit CLK=P1^3;   //時(shí)鐘信號(hào)
  8. sbit ST=P1^2;    //啟動(dòng)信號(hào)
  9. sbit EOC=P1^1;   //轉(zhuǎn)換結(jié)束信號(hào)
  10. sbit AD_OE=P1^0;    //輸出使能
  11. sbit LCD_RS  =  P2^6;      //寄存器選擇輸入
  12. sbit LCD_RW  =  P2^5;      //液晶讀/寫(xiě)控制
  13. sbit LCD_EN  =  P2^7;      //液晶使能控制
  14. sbit LCD_PSB =  P3^2;      //串/并方式控制
  15. sbit LCD_RST =  P3^7;      //液晶復(fù)位端口
  16. sbit OE = P3^0;
  17. sbit LE = P3^1;
  18. signed char result = 0;
  19. #define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
  20. /*********************************************************/
  21. uchar code  DIS1[] = {"**電壓測(cè)量系統(tǒng)**"};
  22. uchar code  DIS2[] = {"**U = --.- (V)**"};
  23. uchar code  DIS3[] = {"**I = --.- (A)**"};
  24. uchar code  DIS4[] = {"**P = --.- (W)**"};
  25. /*********************************************************/

  26. void DelayMS(uint ms)   //延時(shí)
  27. {
  28.               uchar i;
  29.               while(ms--)
  30.                             for(i=0;i<120;i++)
  31.                             {;}
  32. }

  33. void Display_Result(uchar d)   //顯示轉(zhuǎn)換結(jié)果
  34. {
  35.               P2=0xf7;  //第4個(gè)數(shù)碼管顯示個(gè)位數(shù)
  36.               P0=DSY_CODE[d%10];

  37.               DelayMS(5);

  38.               P2=0xfb;   //第3個(gè)數(shù)碼管顯示十位數(shù)
  39.               P0=DSY_CODE[d%100/10];

  40.               DelayMS(5);
  41.                                                                                                                                                                                                                                              
  42.               P2=0xfd;  //第2個(gè)數(shù)碼管顯示百位數(shù)
  43.               P0=DSY_CODE[d/100];
  44.               DelayMS(5);
  45. }

  46. void delay(int ms)
  47. {
  48.     while(ms--)
  49.               {
  50.       uchar i;
  51.                 for(i=0;i<150;i++)
  52.                  {
  53.                   _nop_();                                            
  54.                             _nop_();
  55.                             _nop_();
  56.                             _nop_();
  57.                  }
  58.               }
  59. }            
  60. /*******************************************************************/
  61. /*                                                                 */
  62. /*  延時(shí)函數(shù)                                                       */
  63. /*                                                                 */
  64. /*******************************************************************/
  65. void delay1(int ms)
  66. {
  67.     while(ms--)
  68.               {
  69.       uchar y;
  70.                 for(y=0;y<100;y++) ;
  71.               }
  72. }                                         
  73. /*******************************************************************/
  74. /*                                                                 */
  75. /*檢查L(zhǎng)CD忙狀態(tài)                                                    */
  76. /*lcd_busy為1時(shí),忙,等待。lcd-busy為0時(shí),閑,可寫(xiě)指令與數(shù)據(jù)。      */
  77. /*                                                                 */
  78. /*******************************************************************/
  79. bit lcd_busy()
  80. {                        
  81.     bit result;

  82.               LE = 1;
  83.               delay(1);

  84.               LCD_RS = 0;
  85.     LCD_RW = 1;
  86.     LCD_EN = 1;
  87.     delayNOP();
  88.     result = (bit)(P0&0x80);
  89.     LCD_EN = 0;
  90.             
  91.     delay(1);
  92.               LE = 0;

  93.     return(result);
  94. }
  95. /*******************************************************************/
  96. /*                                                                 */
  97. /*寫(xiě)指令數(shù)據(jù)到LCD                                                  */
  98. /*RS=L,RW=L,E=高脈沖,D0-D7=指令碼。                             */
  99. /*                                                                 */
  100. /*******************************************************************/
  101. void lcd_wcmd(uchar cmd)
  102. {                        
  103.    while(lcd_busy());
  104.     LE = 1;
  105.               delay(1);
  106.             
  107.               LCD_RS = 0;
  108.     LCD_RW = 0;
  109.     LCD_EN = 0;
  110.     _nop_();
  111.     _nop_();
  112.     P0 = cmd;
  113.     delayNOP();
  114.     LCD_EN = 1;
  115.     delayNOP();
  116.     LCD_EN = 0;
  117.             
  118.               delay(1);
  119.               LE = 0;
  120. }
  121. /*******************************************************************/
  122. /*                                                                 */
  123. /*寫(xiě)顯示數(shù)據(jù)到LCD                                                  */
  124. /*RS=H,RW=L,E=高脈沖,D0-D7=數(shù)據(jù)。                               */
  125. /*                                                                 */
  126. /*******************************************************************/
  127. void lcd_wdat(uchar dat)
  128. {                        
  129.    while(lcd_busy());
  130.                
  131.               LE = 1;
  132.               delay(1);
  133.     LCD_RS = 1;
  134.     LCD_RW = 0;
  135.     LCD_EN = 0;
  136.               delay(1);
  137.               LE = 0;

  138.     P0 = dat;
  139.     delayNOP();
  140.               LE = 1;
  141.               delay(1);
  142.     LCD_EN = 1;
  143.     delayNOP();
  144.     LCD_EN = 0;
  145.               delay(1);
  146.               LE = 0;
  147. }
  148. /*******************************************************************/
  149. /*                                                                 */
  150. /*  LCD初始化設(shè)定                                                  */
  151. /*                                                                 */
  152. /*******************************************************************/
  153. void LCD12864_init()
  154. {
  155.     LCD_PSB = 1;         //并口方式

  156.               LCD_RST = 0;                            //液晶復(fù)位
  157.     delay(3);                  
  158.     LCD_RST = 1;     
  159.     delay(3);

  160.     lcd_wcmd(0x34);      //擴(kuò)充指令操作
  161.     delay(5);
  162.     lcd_wcmd(0x30);      //基本指令操作
  163.     delay(5);
  164.     lcd_wcmd(0x0C);      //顯示開(kāi),關(guān)光標(biāo)
  165.     delay(5);
  166.     lcd_wcmd(0x01);      //清除LCD的顯示內(nèi)容
  167.     delay(5);
  168. }

  169. void T1_INIT(void )
  170. {
  171.               TMOD=0x02;  //T1工作模式2
  172.               TH0=0x14;
  173.               TL0=0x00;
  174.               IE=0x82;
  175.               TR0=1;
  176.               P1=0x3f;  //選擇ADC0809的通道3(0111)(P1.4~P1.6)
  177. }
  178. void Locker_init(void )
  179. {
  180.               OE = 0;
  181.               LE = 1;                           
  182. }
  183. /*********************************************************/
  184. /*                                                       */
  185. /* 設(shè)定顯示位置                                          */
  186. /*                                                       */
  187. /*********************************************************/
  188. void lcd_pos(uchar X,uchar Y)
  189. {                        
  190.    uchar  pos;
  191.    if (X==1)
  192.      {X=0x80;}
  193.    else if (X==2)
  194.      {X=0x90;}
  195.    else if (X==3)
  196.      {X=0x88;}
  197.    else if (X==4)
  198.      {X=0x98;}
  199.    pos = X+Y ;

  200.    lcd_wcmd(pos);     //顯示地址
  201. }
  202. /*********************************************************
  203. *                                                        *
  204. * 清屏函數(shù)                                               *
  205. *                                                        *
  206. *********************************************************/
  207. void  clr_screen()
  208. {
  209.    lcd_wcmd(0x34);      //擴(kuò)充指令操作
  210.    delay(5);   
  211.    lcd_wcmd(0x30);      //基本指令操作
  212.    delay(5);
  213.    lcd_wcmd(0x01);      //清屏
  214.    delay(5);   
  215. }

  216. void Various(uchar line,uchar num)
  217. {
  218.               uchar a,b,c;
  219.               a = 48+num/100;
  220.               b = 48+num%100/10;
  221.               c = 48+num%10;
  222.             
  223.               switch( line )
  224.               {
  225.                             case 1:line = 0x80;
  226.                                              break;
  227.                             case 2:line = 0x90;
  228.                                              break;
  229.                             case 3:line = 0x88;
  230.                                              break;
  231.                             case 4:line = 0x98;
  232.                                              break;
  233.                             default:break;
  234.               }
  235.             
  236.               lcd_wcmd(line+3);      //寫(xiě)入垂直坐標(biāo)值
  237.               lcd_wdat(a);
  238.               lcd_wdat(b);
  239.               lcd_wdat('.');
  240.               lcd_wdat(c);            
  241. }

  242. void UI_Display(void )
  243. {
  244.               uchar i;
  245.             
  246.                  lcd_pos(1,0);             //設(shè)置顯示位置為第一行
  247.               for(i=0;i<16;i++)
  248.      {
  249.        lcd_wdat(DIS1[i]);
  250.        delay(30);
  251.      }

  252.      lcd_pos(2,0);             //設(shè)置顯示位置為第二行
  253.      for(i=0;i<16;i++)
  254.      {
  255.        lcd_wdat(DIS2[i]);
  256.        delay(30);
  257.      }
  258.      lcd_pos(3,0);             //設(shè)置顯示位置為第三行
  259.      for(i=0;i<16;i++)
  260.      {
  261.        lcd_wdat(DIS3[i]);
  262.        delay(30);
  263.      }
  264.      lcd_pos(4,0);             //設(shè)置顯示位置為第四行
  265.      for(i=0;i<16;i++)
  266.      {
  267.        lcd_wdat(DIS4[i]);
  268.        delay(30);
  269.      }
  270. }

  271. void AD_gather(void )
  272. {
  273.               ST=0;ST=1;ST=0; //啟動(dòng)A/D轉(zhuǎn)換
  274. ……………………

  275. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
基于BQ26500電池測(cè)量.doc (871.46 KB, 下載次數(shù): 31)


評(píng)分

參與人數(shù) 2黑幣 +58 收起 理由
穿著安踏去拉薩 + 8 51有你更精彩
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:779899 發(fā)表于 2021-1-9 16:52 | 只看該作者
十分不錯(cuò)的思路!
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表