版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
目錄摘要 iAbstract ii1緒論 11.1前言 11.2本課題的研究背景、研究意義及國(guó)內(nèi)外相關(guān)研究情況 12三項(xiàng)電特性測(cè)量軟件設(shè)計(jì)方案 12.1基本功能要求 12.2總體方案設(shè)計(jì) 12.2.1硬件平臺(tái) 12.2.2開發(fā)環(huán)境與仿真 12.2.3開發(fā)語言 12.2.4軟件總體結(jié)構(gòu) 13系統(tǒng)的初始化 13.1系統(tǒng)的初始化的含義 13.1.1初始化的執(zhí)行順序 13.1.2系統(tǒng)的啟動(dòng)代碼 14數(shù)據(jù)采集程序和數(shù)據(jù)處理 14.1數(shù)據(jù)采集技術(shù)簡(jiǎn)介 14.2A/D寄存器的描述 14.2.1A/D控制寄存器ADCR 14.2.2A/D數(shù)據(jù)寄存器ADDR 24.3A/D的基本操作 34.4數(shù)據(jù)處理 34.5A/D采集功能介紹及軟件編程 75鍵盤顯示模塊 125.1關(guān)于鍵盤使用的簡(jiǎn)單介紹 125.2鍵盤控制模塊的功能介紹及程序 135.2.1鍵盤掃描頭文件Keyboard.h 145.2.2按鍵掃描去抖程序 146液晶顯示模塊 176.1液晶簡(jiǎn)介 176.1.1LCD介紹 176.1.2LCD顯示的原理 176.1.3LCD的分類 186.2液晶顯示模塊 186.2.1點(diǎn)陣式液晶顯示器LM12864簡(jiǎn)介 186.2.2液晶顯示流程圖以及LCD驅(qū)動(dòng) 196.3LCD顯示的應(yīng)用程序 296.3.1LCD的簡(jiǎn)單GUI實(shí)現(xiàn) 296.3.2LCD實(shí)時(shí)時(shí)鐘顯示模塊 306.3.3LCD的實(shí)時(shí)時(shí)鐘軟件編程 316.3.4外部擴(kuò)展I2C 356.3.5LCD顯示電特性參數(shù) 377電特性參數(shù)的計(jì)算 417.1電特性參數(shù) 417.2采用過零點(diǎn)檢測(cè)測(cè)量周期的軟件編程Guolindian.C 427.3電特性參數(shù)軟件程序 448Proteus仿真 458.1proteus簡(jiǎn)介 458.2電路仿真 458.3分散加載文件 468.4系統(tǒng)的電路圖以及proteus中的仿真結(jié)果 488.4.1系統(tǒng)的電路圖 488.4.2proteus中的仿真結(jié)果 48結(jié)束語 51致謝 52參考文獻(xiàn) 53畢業(yè)設(shè)計(jì)(論文)知識(shí)產(chǎn)權(quán)聲明 54畢業(yè)設(shè)計(jì)(論文)獨(dú)創(chuàng)性聲明 551緒論1緒論1.1前言能源是人類社會(huì)賴于生存和發(fā)展的基礎(chǔ),電能作為能源的第二次形式,具有簡(jiǎn)單、方便、可靠等特點(diǎn),是現(xiàn)代社會(huì)運(yùn)行的主要能源之一。充足、可靠的能源是提高經(jīng)濟(jì)高速發(fā)展、社會(huì)正常運(yùn)行的基本前提。上世紀(jì)六十年代以來,微電子、計(jì)算機(jī)、電力電子技術(shù)在各個(gè)領(lǐng)域廣泛應(yīng)用,位現(xiàn)代工業(yè)的自動(dòng)化、提高勞動(dòng)生產(chǎn)率開辟了廣闊的前景。近年來隨著大功率電力電子技術(shù)的發(fā)展以及它們的廣泛應(yīng)用,使得非線性負(fù)載大量的增加,給供電設(shè)備造成了很大的影響。本文主要研究基于數(shù)字采樣測(cè)量的三相電參數(shù)測(cè)量系統(tǒng),主要包括電壓、電流、頻率、相位、功率因數(shù)、有功功率、無功功率,視在功率,電能等的測(cè)量。1.2本課題的研究背景、研究意義及國(guó)內(nèi)外相關(guān)研究情況電力是國(guó)家經(jīng)濟(jì)發(fā)展的命脈,隨著社會(huì)對(duì)電力需求量的不斷增長(zhǎng),工業(yè)、農(nóng)業(yè)、商業(yè)、居民用電的日益增長(zhǎng),供電量日益增加,電能作為一種具有多種參數(shù)指標(biāo)、直接反映電力企業(yè)經(jīng)濟(jì)效益的商品備受重視。隨著工業(yè)技術(shù)的不斷進(jìn)步,對(duì)電力的需要越來越大,電能緊缺問題日趨嚴(yán)重,極大地制約著社會(huì)經(jīng)濟(jì)的發(fā)展。近年來,我國(guó)電力負(fù)荷急劇增大,各種非線性負(fù)載,特別是新型電力電子器件在電力系統(tǒng)、工業(yè)各部門和家用電器產(chǎn)品中的日益廣泛應(yīng)用,給供電設(shè)備的電能質(zhì)量造成了極大的影響。因此,在大多數(shù)情況下,電力信號(hào)己不是標(biāo)準(zhǔn)的正弦信號(hào),而是一種復(fù)雜的周期信號(hào)。國(guó)內(nèi)電力參數(shù)檢測(cè)技術(shù)的研究和開發(fā)起步較晚,目前對(duì)電力參數(shù)測(cè)量的方式基本上可分為芯片轉(zhuǎn)化為有效值測(cè)量,直接離散時(shí)序測(cè)量和多諧波測(cè)量等。相對(duì)國(guó)內(nèi)而言,國(guó)外對(duì)電能質(zhì)量的研究起步就比較早,也已經(jīng)取得了很多關(guān)于這方面的研究和應(yīng)用成果,世界對(duì)電能質(zhì)量的認(rèn)識(shí)程度也越來越高,每隔兩年就召開一次電能質(zhì)量與電力諧波學(xué)術(shù)會(huì)議。在電能質(zhì)量檢測(cè)產(chǎn)品研究領(lǐng)域,尤其是這些領(lǐng)域的高端產(chǎn)品在全球市場(chǎng)的份額,幾乎是被美國(guó)的FLUKE公司、瑞士的LEM公司、瑞典的UNIPOWER公司等國(guó)際知名公司占據(jù),這些公司的技術(shù)水平為國(guó)際最先進(jìn),當(dāng)然價(jià)格也非常昂西安工業(yè)大學(xué)畢業(yè)設(shè)計(jì)(論文)電能質(zhì)量對(duì)于電網(wǎng)的安全經(jīng)濟(jì)運(yùn)行,保證工業(yè)產(chǎn)品的質(zhì)量和科學(xué)實(shí)驗(yàn)的正常進(jìn)行以及降低能耗等均有重要意義。為了改善這一狀況,對(duì)電力系統(tǒng)進(jìn)行完整分析和監(jiān)測(cè)是成功的關(guān)鍵。此外,對(duì)于電力參數(shù)進(jìn)行高精度、多參數(shù)的測(cè)量,又是充分了解電網(wǎng)的運(yùn)行狀況,尋找并解決電力系統(tǒng)中出現(xiàn)的問題的重要途徑。因此,對(duì)于電力參數(shù)的測(cè)量,尤其是高精度、多參數(shù)、低價(jià)格、便攜、穩(wěn)定的實(shí)時(shí)測(cè)量就顯得尤為重要,也一直是人們研究的一個(gè)重要方向。在我國(guó)電力工業(yè)領(lǐng)域,電網(wǎng)質(zhì)量的問題已經(jīng)成為關(guān)鍵,電力參數(shù)的分析和監(jiān)測(cè)已經(jīng)成為國(guó)際上討論和研究的重點(diǎn)。2三相電特性測(cè)量軟件設(shè)計(jì)方案2三項(xiàng)電特性測(cè)量軟件設(shè)計(jì)方案2.1基本功能要求(1)熟悉工廠供電技術(shù);(2)熟悉測(cè)量系統(tǒng)硬件電路原理;(3)設(shè)計(jì)軟件結(jié)構(gòu);(4)掌握ADS1.2開發(fā)工具;(5)熟練運(yùn)用PROTEUS仿真;(6)編寫程序代碼及調(diào)試;(7)軟、硬件系統(tǒng)聯(lián)調(diào)。2.2總體方案設(shè)計(jì)2.2.1硬件平臺(tái)課題主要研究電特性測(cè)量系統(tǒng)的軟件程序設(shè)計(jì)。選用的是ARM為核的LPC2000系列的芯片,LPC2000系列是NXP公司生產(chǎn)的以ARM7TDMI-S核為基礎(chǔ)的嵌入式處理器,在芯片內(nèi)部配置了大量的接口及功能模塊。本設(shè)計(jì)選用的是LPC2124芯片,LPC2124具有較小的64引腳封裝,低功耗的特點(diǎn),以及多個(gè)片內(nèi)外設(shè)(如32位定時(shí)器、A/D轉(zhuǎn)換器、外部中斷等),多個(gè)32位定時(shí)器,4路10位ADC,內(nèi)置多種串行通信接口以及多達(dá)9個(gè)外部中斷,因此特別適用于工業(yè)控制、醫(yī)療系統(tǒng)訪問控制、通信網(wǎng)關(guān)、協(xié)議轉(zhuǎn)換器、嵌入式MODEM等各種類型的應(yīng)用。2.2.2開發(fā)環(huán)境與仿真本課題選用的是ADS1.2開發(fā)工具,ADS1.2是ARM公司推出的ARM集成開發(fā)工具,具有用戶多、編譯效率高、支持的ARM內(nèi)核多的特點(diǎn)。ARMADS全稱為ARMdeveloperSuite,是ARM公司推出的ARM集成開發(fā)工具,成熟版本為ADS1.2,他的前身是SDT,SDT是ARM公司幾年前的開發(fā)環(huán)境軟件。ADS1.2支持ARM10之前的所有ARM系列微控制器,支持軟件調(diào)試,支持匯編、C語言、C++源程序,具有編譯效率高、系統(tǒng)庫(kù)功能強(qiáng)等特點(diǎn)。本課題用ADS1.2開發(fā)工具圍繞LPC2124片上的基本功能模塊實(shí)現(xiàn)三相電特性的測(cè)試,最終通過了西安工業(yè)大學(xué)畢業(yè)設(shè)計(jì)(論文)PROTEUS的仿真驗(yàn)證。PROTEUS是英國(guó)Labcenter公司推出的適合嵌入式設(shè)計(jì)仿真與開發(fā)的仿真軟件,使用PROTEUS軟件可以完全脫離硬件平臺(tái)來學(xué)習(xí)嵌入式系統(tǒng),可以說是嵌入式學(xué)習(xí)的一次革命。2.2.3開發(fā)語言本課題軟件用的語言主要有C語言,還有啟動(dòng)代碼中所用到的匯編語言。本文選用C語言主要是由于C語言有以下優(yōu)點(diǎn):(1)寄存器分配,數(shù)據(jù)類型等由編譯器管理;(2)編程及調(diào)試的時(shí)間減少,大大縮短開發(fā)周期;(3)明顯增加軟件可讀性,便于改進(jìn)和擴(kuò)展。2.2.4軟件總體結(jié)構(gòu)本系統(tǒng)主要針對(duì)我國(guó)電力系統(tǒng)供配電的實(shí)際情況,通過ARM7單片機(jī)為核心,配以相應(yīng)的外圍電路和功能軟件,采用交流采樣技術(shù)實(shí)現(xiàn)多種電力參數(shù)的在線實(shí)時(shí)測(cè)量和數(shù)據(jù)分析,為電網(wǎng)的安全經(jīng)濟(jì)運(yùn)行提供可靠保證。本課題主要研究電特性測(cè)量系統(tǒng)的軟件程序設(shè)計(jì)。本課題的軟件部分主要是通過實(shí)時(shí)采樣電流電壓的瞬時(shí)值,以及過零檢測(cè),進(jìn)而計(jì)算出電流電壓的有效值、頻率值、有用功率、無用功率、視在功率、功率因數(shù)等電力參數(shù)。本測(cè)量系統(tǒng)的軟件設(shè)計(jì)主要分為以下幾個(gè)模塊:(1)主程序模塊(2)電壓、電流采集程序(3)頻率采集程序(4)數(shù)據(jù)處理程序(5)時(shí)鐘日歷程序(6)鍵盤服務(wù)程序(7)顯示服務(wù)程序本設(shè)計(jì)擬采用ADS1.2集成開發(fā)工具編寫C語言程序?qū)崿F(xiàn)測(cè)量系統(tǒng)的相關(guān)功能。數(shù)據(jù)的處理與計(jì)算是程序設(shè)計(jì)的主要部分。系統(tǒng)基本測(cè)量的參數(shù)主要包括:電流有效值、電壓有效值、有功功率、無功功率、視在功率、功率因數(shù)等。首要環(huán)節(jié)是對(duì)輸入的電氣信號(hào)進(jìn)行離散化,即采樣。根據(jù)被采集信號(hào)的不同,數(shù)據(jù)采集可分為直流采樣和交流采樣兩大類。對(duì)比分析后,系統(tǒng)選用交流采樣,數(shù)值的計(jì)算采用離散的電壓電流有效值計(jì)算公式來實(shí)現(xiàn)。為了提高ARM7核的LPC2124芯片程序編寫效率,系統(tǒng)軟件采用了分模塊編寫的方法,用C語言和匯編語言混合編寫。對(duì)于LPC2124和各模塊的初始化、數(shù)據(jù)采集程序采用匯編編程,對(duì)于主程序、鍵盤顯示等通用性較強(qiáng)程序,采用C語言編寫。本系統(tǒng)的主要功能模塊有數(shù)據(jù)采集模塊、數(shù)據(jù)處理模塊、時(shí)鐘模塊,按鍵顯示模塊等。所有軟件模塊的功能都在主控模塊的調(diào)配下協(xié)調(diào)執(zhí)行,主控模塊首先對(duì)系統(tǒng)進(jìn)行初始化操作,包括CPU初始化、I/O初始化、A/D初始化、LCD初始化、時(shí)鐘初始化、異步通訊初始化等。隨即對(duì)數(shù)據(jù)進(jìn)行采集、處理、顯示。然后判斷是否有鍵按下,根據(jù)判斷結(jié)果,執(zhí)行相應(yīng)按鍵服務(wù)程序。系統(tǒng)的主要電特性參量介紹:(1)電壓有效值:讓恒定電壓和交變電壓分別加在阻值相等的電阻上,使它們?cè)谙嗤瑫r(shí)間內(nèi)產(chǎn)生的熱量相等,就可以把該恒定電壓的數(shù)值規(guī)定為這個(gè)交變電壓的有效值.(2)電流有效值:將一直流電與一交流電分別通過相同阻值的電阻,如果相同時(shí)間內(nèi)兩電流通過電阻產(chǎn)生的熱量相同,就說這一直流電的電流值是這一交流電的有效值。(3)有功功率:在交流電路中,電源在一個(gè)周期內(nèi)發(fā)出瞬時(shí)功率的平均值(或負(fù)載電阻所消耗的功率),稱為"有功功率"。(4)無功功率:在正弦電流電路中,復(fù)功率的虛部:,且供給電感的無功功率為正值。(5)視在功率:在電工技術(shù)中,將單口網(wǎng)絡(luò)端鈕電壓和電流有效值的乘積,稱為視在功率(apparentpower),記為S=UI。(6)功率因數(shù):在交流電路中,電壓與電流之間的相位差(Φ)的余弦叫做功率因數(shù),用符號(hào)cosΦ表示,在數(shù)值上,功率因數(shù)是有功功率和視在功率的比值,即cosΦ=P/S。系統(tǒng)主程序流程圖如2.1圖所示。3系統(tǒng)初始化3系統(tǒng)的初始化3.1系統(tǒng)的初始化的含義首先來講講系統(tǒng)初始化,什么是系統(tǒng)初始化呢?初始化就是把變量(variable)賦為默認(rèn)值,把控件設(shè)為默認(rèn)狀態(tài),把沒準(zhǔn)備的準(zhǔn)備好。但是如果是整個(gè)系統(tǒng)初始化那就不一樣了。每個(gè)軟件,或是工具,系統(tǒng)等都有一個(gè)初始化。如系統(tǒng)的初始化就是將你的系統(tǒng)還原到一開始做的備份的狀態(tài)。把設(shè)置等都還原至那個(gè)位置。如果是一個(gè)軟件的初始化,基本都是將一些功能的設(shè)置都還原為開始設(shè)置,意思就和恢復(fù)默認(rèn)設(shè)置差不多。3.1.1初始化的執(zhí)行順序每一個(gè)初始化部分里面的代碼在程序運(yùn)行后,或庫(kù)的begin-end塊運(yùn)行之前。delphi使用對(duì)單元相關(guān)樹的深度優(yōu)先遍歷來運(yùn)行初始化部分。換句話說,就只在一個(gè)單元的初始化代碼運(yùn)行前,delphi就運(yùn)行了特他使用的每一個(gè)單元的初始化部分。每一個(gè)單元僅初始化一次。程序代碼當(dāng)中可以有Initialization聲明部分。這部分里面的代碼的執(zhí)行,是在windows加載包含該單元(指Initialization所屬單元)的模塊(應(yīng)用程序,DLL或者包)時(shí)運(yùn)行的。一般來說是:先Initialization單元,然后interface單元,然后implementation單元。程序中Intialize過程??梢栽谶@里初始化字符串、動(dòng)態(tài)數(shù)組、接口和Variants系統(tǒng)為什么要初始化呢?第一,信息系統(tǒng)是以數(shù)據(jù)庫(kù)為主的軟件系統(tǒng),是數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng),必須設(shè)定數(shù)據(jù)庫(kù)應(yīng)用的安全體系否則無法保證數(shù)據(jù)安全;第二,信息系統(tǒng)是組織的管理方法,必須具備組織使用的共享數(shù)據(jù)才能供組織使用;第三,初始化的核心是數(shù)據(jù)準(zhǔn)備,沒有歷史數(shù)據(jù)不能實(shí)現(xiàn)系統(tǒng)切換,無法使用;第四,數(shù)據(jù)必須定期存檔和更新才能使信息系統(tǒng)有較高的運(yùn)轉(zhuǎn)效率;西安工業(yè)大學(xué)畢業(yè)設(shè)計(jì)(論文)3.1.2系統(tǒng)的啟動(dòng)代碼系統(tǒng)初始化主要是由軟件來完成的,一般在32位ARM應(yīng)用系統(tǒng)中,大多數(shù)軟件采用C語言來進(jìn)行編程,并且以嵌入式操作系統(tǒng)作為平臺(tái),這樣能大大提升開發(fā)效率及軟件性能。但是,由于C語言生成的代碼不能上電后立馬運(yùn)行的,因?yàn)榇藭r(shí)還不具備運(yùn)行條件,比如全局變量還沒有初始化,系統(tǒng)堆棧還沒有設(shè)置等。因此從系統(tǒng)上電,到正式運(yùn)行用戶的main函數(shù)之前,要運(yùn)行一段代碼,這段代碼就稱為啟動(dòng)代碼。啟動(dòng)代碼大部分由匯編指令構(gòu)成,它可以實(shí)現(xiàn)向量表定義、堆棧初始化、系統(tǒng)變量初始化、中斷初始化、外圍初始化、地址重映射等操作。見圖2-2。圖2.2首先是應(yīng)該完成頭文件的編寫,下面就是系統(tǒng)初試化的頭文件(target.h)和系統(tǒng)的初始化軟件(target.c)、(Startup.s)。(1)系統(tǒng)初試化的頭文件(target.h)#ifndef__TARGET_H#define__TARGET_H#ifdef__cplusplusextern"C"{#endif#ifndefIN_TARGETexternvoidReset(void);externvoidTargetInit(void);#endif#ifdef__cplusplus}#endif#endi(2)系統(tǒng)的初始化軟件(Startup.s);definethestacksize;定義堆棧的大小SVC_STACK_LEGTHEQU0FIQ_STACK_LEGTHEQU0IRQ_STACK_LEGTHEQU256ABT_STACK_LEGTHEQU0UND_STACK_LEGTHEQU0NoIntEQU0x80NoFIQ EQU 0x40USR32ModeEQU0x10SVC32ModeEQU0x13SYS32ModeEQU0x1fIRQ32ModeEQU0x12FIQ32ModeEQU0x11;IMPORT__use_no_semihosting_swi;Theimportedlabels;引入的外部標(biāo)號(hào)在這聲明IMPORTFIQ_Exception;快速中斷異常處理程序IMPORT__main;C語言主程序入口IMPORTTargetResetInit;目標(biāo)板基本初始化 ;Theemportedlabels;給外部使用的標(biāo)號(hào)在這聲明EXPORTbottom_of_heapEXPORTStackUsrEXPORTResetEXPORT__user_initial_stackheapCODE32AREAvectors,CODE,READONLYENTRY;interruptvectors;中斷向量表ResetLDRPC,ResetAddrLDRPC,UndefinedAddrLDRPC,SWI_AddrLDRPC,PrefetchAddrLDRPC,DataAbortAddrDCD0xb9205f80LDRPC,[PC,#-0xff0]LDRPC,FIQ_AddrResetAddrDCDResetInitUndefinedAddrDCDUndefinedSWI_AddrDCDSoftwareInterruptPrefetchAddrDCDPrefetchAbortDataAbortAddrDCDDataAbortNouseDCD0IRQ_AddrDCD0FIQ_AddrDCDFIQ_Handler;未定義指令UndefinedBUndefined;軟中斷SoftwareInterrupt ;BSoftwareInterruptCMPR0,#4LDRLOPC,[PC,R0,LSL#2]MOVSPC,LRSwiFunctionDCDIRQDisable;0DCDIRQEnable;1DCD FIQDisable ;2DCD FIQEnable ;3IRQDisable;關(guān)IRQ中斷MRSR0,SPSRORRR0,R0,#NoIntMSRSPSR_c,R0MOVSPC,LRIRQEnable;開IRQ中斷MRSR0,SPSRBICR0,R0,#NoIntMSRSPSR_c,R0MOVSPC,LRFIQDisable;關(guān)FIQ中斷MRSR0,SPSRORRR0,R0,#NoFIQMSRSPSR_c,R0MOVSPC,LRFIQEnable;開FIQ中斷MRSR0,SPSRBICR0,R0,#NoFIQMSRSPSR_c,R0MOVSPC,LR;取指令中止PrefetchAbortBPrefetchAbort;取數(shù)據(jù)中止DataAbortBDataAbort;快速中斷FIQ_HandlerSTMFDSP!,{R0-R3,LR}BLFIQ_ExceptionLDMFDSP!,{R0-R3,LR}SUBSPC,LR,#4InitStackMOVR0,LR;BuildtheSVCstack;設(shè)置管理模式堆棧MSRCPSR_c,#0xd3 LDRSP,StackSvc ;BuildtheIRQstack ;設(shè)置中斷模式堆棧MSRCPSR_c,#0xd2LDRSP,StackIrq;BuildtheFIQstack;設(shè)置快速中斷模式堆棧MSRCPSR_c,#0xd1LDRSP,StackFiq;BuildtheDATAABORTstack;設(shè)置中止模式堆棧MSRCPSR_c,#0xd7LDRSP,StackAbt;BuildtheUDFstack;設(shè)置未定義模式堆棧MSRCPSR_c,#0xdbLDRSP,StackUnd;BuildtheSYSstack;設(shè)置系統(tǒng)模式堆棧MSRCPSR_c,#0xdfLDRSP,=StackUsrMOVPC,R0ResetInitBLInitStack;初始化堆棧BLTargetResetInit;目標(biāo)板基本初始化;跳轉(zhuǎn)到c語言入口B__main__user_initial_stackheapLDRr0,=bottom_of_heap;LDRr1,=StackUsrMOVpc,lrStackSvcDCDSvcStackSpace+(SVC_STACK_LEGTH-1)*4StackIrqDCDIrqStackSpace+(IRQ_STACK_LEGTH-1)*4StackFiqDCDFiqStackSpace+(FIQ_STACK_LEGTH-1)*4StackAbtDCDAbtStackSpace+(ABT_STACK_LEGTH-1)*4StackUndDCDUndtStackSpace+(UND_STACK_LEGTH-1)*4IF:DEF:EN_CRPIF.>=0x1fcINFO1,"\nThedataat0x000001fcmustbe0x87654321.\nPleasedeletesomesourcebeforethisline."ENDIFCrpDataWHILE.<0x1fcNOPWENDCrpData1DCD0x87654321;/*WhentheDatais為0x87654321,usercodebeprotected.當(dāng)此數(shù)為0x87654321時(shí),用戶程序被保護(hù)*/ENDIF;/*分配堆??臻g*/AREAMyStacks,DATA,NOINIT,ALIGN=2SvcStackSpaceSPACESVC_STACK_LEGTH*4;管理模式堆棧空間IrqStackSpaceSPACEIRQ_STACK_LEGTH*4;中斷模式堆??臻gFiqStackSpaceSPACEFIQ_STACK_LEGTH*4;快速中斷模式堆棧空間AbtStackSpaceSPACEABT_STACK_LEGTH*4;中止模式堆??臻gUndtStackSpaceSPACEUND_STACK_LEGTH*4;未定義模式堆棧AREAHeap,DATA,NOINITbottom_of_heapSPACE1AREAStacks,DATA,NOINITStackUsrEND(3)系統(tǒng)的初始化軟件(target.c)#defineIN_TARGET#include"config.h"#include"guolindian.h"voidTargetResetInit(void);voidIRQ_Exception(void){while(1);}voidFIQ_Exception(void){while(1);}voidTimer0_Exception(void){T0IR=0x01;VICVectAddr=0;//通知中斷控制器中斷結(jié)束}voidVICInit(void){}/*過零點(diǎn)檢測(cè)功能初試化函數(shù)*/voidGuoLinDianInit(void){ PINSEL1=0x00000001; EXTMODE=0x01;//邊沿觸發(fā) VICIntSelect=0x00000000; VICDefVectAddr=(int)IRQ_Eint1; EXTINT=0x01; VICIntEnable=0x00004000;}#defineTARGET_DEBUG_BY_LCMvoidTargetInit(void){#ifdefTARGET_DEBUG_BY_LCM TargetResetInit(); GuoLinDianInit();GUI_Initialize();//初始化LCM GUI_SetColor(1,0); //設(shè)置前景色和背景色#endif }voidInitialiseUART0(uint32bps){ }voidTargetResetInit(void){#ifdef__DEBUG_RAMMEMMAP=0x2;//remap#endif#ifdef__DEBUG_FLASHMEMMAP=0x1;//remap#endif#ifdef__IN_CHIPMEMMAP=0x1;//remap#endif/*設(shè)置系統(tǒng)各部分時(shí)鐘*//*Setsystemtimersforeachcomponent*/PLLCON=1;#if(Fpclk/(Fcclk/4))==1VPBDIV=0;#endif#if(Fpclk/(Fcclk/4))==2VPBDIV=2;#endif#if(Fpclk/(Fcclk/4))==4VPBDIV=1;#endif#if(Fcco/Fcclk)==2PLLCFG=((Fcclk/Fosc)-1)|(0<<5);#endif#if(Fcco/Fcclk)==4PLLCFG=((Fcclk/Fosc)-1)|(1<<5);#endif#if(Fcco/Fcclk)==8PLLCFG=((Fcclk/Fosc)-1)|(2<<5);#endif#if(Fcco/Fcclk)==16PLLCFG=((Fcclk/Fosc)-1)|(3<<5);#endifPLLFEED=0xaa;PLLFEED=0x55;while((PLLSTAT&(1<<10))==0);PLLCON=3;PLLFEED=0xaa;PLLFEED=0x55;/*設(shè)置存儲(chǔ)器加速模塊*//*Setmemoryacceleratermodule*/MAMCR=0;#ifFcclk<20000000MAMTIM=1;#else#ifFcclk<40000000MAMTIM=2;#elseMAMTIM=3;#endif#endifMAMCR=2;/*設(shè)置串行口*//*initializeUART*/CCR=1;PREINT=Fpclk/32768-1;PREFRAC=Fpclk-(Fpclk/32768)*32768;YEAR=2012;MONTH=4;DOM=26;HOUR=21;MIN=10;SEC=0;}#include"rt_sys.h"#include"stdio.h"4數(shù)據(jù)采集程序和數(shù)據(jù)處理4數(shù)據(jù)采集程序和數(shù)據(jù)處理4.1數(shù)據(jù)采集技術(shù)簡(jiǎn)介從廣義上來講,數(shù)據(jù)采集(DAQ),是指從傳感器和其它待測(cè)設(shè)備等模擬和數(shù)字被測(cè)單元中自動(dòng)采非電量或者電量信號(hào),送到上位機(jī)中進(jìn)行分析,處理。數(shù)據(jù)采集系統(tǒng)是結(jié)合基于計(jì)算機(jī)或者其他專用測(cè)試平臺(tái)的測(cè)量軟硬件產(chǎn)品來實(shí)現(xiàn)靈活的、用戶自定義的測(cè)量系統(tǒng)。采集又稱取樣、抽樣,對(duì)模擬信號(hào)在時(shí)間上的離散化、幅值離散化,這樣用在電參量測(cè)量中可以克服模擬運(yùn)算準(zhǔn)確度較低且模擬器件易受各種干擾影響的缺點(diǎn),從同一批數(shù)據(jù)中可獲得許多電參量信息。本文所述的數(shù)字采樣技術(shù)主要應(yīng)用于電參量測(cè)量領(lǐng)域。就是對(duì)周期或非周期交流待測(cè)信號(hào),在CPU的控制下,由采樣保持器進(jìn)行采樣和保持,再送給A/D轉(zhuǎn)換器進(jìn)行模數(shù)轉(zhuǎn)換,量化處理,將模擬量變?yōu)閿?shù)字量,送存儲(chǔ)器存儲(chǔ),最后由CPU進(jìn)行一系列運(yùn)算,處理,得到結(jié)果送到LCD顯示。本文用的是LPC2124,LPC2124具有一個(gè)A/D轉(zhuǎn)換器,A/D轉(zhuǎn)換器的基本時(shí)鐘由VPB時(shí)鐘提供??删幊谭诸l器可將時(shí)鐘調(diào)整至4.5MHZ(逐步逼近最大時(shí)鐘)。10位精度要求的轉(zhuǎn)換需要11個(gè)A/D轉(zhuǎn)換時(shí)鐘。LPC2124具有一個(gè)A/D轉(zhuǎn)換器。A/D轉(zhuǎn)換具有如下特性:(1)10位逐次逼近模式轉(zhuǎn)換器;(2)測(cè)量范圍:0~3.3V;(3)10位轉(zhuǎn)換時(shí)間≥2.4us;(4)轉(zhuǎn)換觸發(fā)信號(hào)可選擇:輸入引腳的跳變或定時(shí)器匹配;(5)具有掉電模式。4.2A/D寄存器的描述A/D寄存器包含控制寄存器ADCR和數(shù)據(jù)寄存器ADDR。A/D寄存器的使用情況詳見下表4.1。西安工業(yè)大學(xué)畢業(yè)設(shè)計(jì)(論文)表4.1A名稱描述訪問復(fù)位值地址ADCRA/D控制寄存器。A/D轉(zhuǎn)換開始前,必須寫入ADCR寄存器來選擇工作模式R/W0x000000010xE0034000ADDRA/D數(shù)據(jù)寄存器。該寄存器包含ADC的DONE標(biāo)志位和10位的轉(zhuǎn)換結(jié)果(當(dāng)前DONE位為1時(shí),轉(zhuǎn)換結(jié)果才是有效的)R/WNA0xE00340004.2.1A/D控制寄存器ADCRADCR寄存器描述如表4.2所列。表4.2A/D控制寄存器ADCR名稱功能復(fù)位值7:0SEL從AIN3~AIN0中選擇采樣引腳。SEL段中的bit0~bit3分別對(duì)應(yīng)AIN3~AIN0引腳,為1表示選中。在64腳封裝的LPC2124有bit0~bit3可置位。軟件控制模式下,只有一位可被置位;硬件掃描模式下,SEL可為1~0x0F中的任何一個(gè)值。SEL為0時(shí),等效于0x01。0x0115:8CLKDIV將VPB時(shí)鐘(PCLK)進(jìn)行(CLKDIV的值加1)分頻得到A/D轉(zhuǎn)換時(shí)鐘,該時(shí)鐘必須小于或等于45MHz。016BURST如果該位為0,轉(zhuǎn)換由軟件控制,需要11個(gè)時(shí)鐘方能完成。如果該位為1,A/D轉(zhuǎn)換器以CLKS字段選擇的速率重復(fù)執(zhí)行轉(zhuǎn)換,并從SEL字段為1的位對(duì)應(yīng)的引腳開始掃描。A/D轉(zhuǎn)換器啟動(dòng)后,第一次轉(zhuǎn)換的時(shí)SEL字段中為1的位中的最低有效位程度模擬輸入,然后時(shí)為1的更高有效為對(duì)應(yīng)的模擬輸入(如果可用)。重復(fù)轉(zhuǎn)換通過清零該位終止,但該位被清零時(shí)并不會(huì)中止正在進(jìn)行的轉(zhuǎn)換。019:7CLKS該字段用來選擇Burst模式下每次轉(zhuǎn)換使用的時(shí)鐘數(shù)和所得ADDR轉(zhuǎn)換結(jié)果放入LS位中可確保精度的位的數(shù)目,CLKS可在11個(gè)時(shí)鐘(10位)~4個(gè)時(shí)鐘(3位)之間選擇:000=11個(gè)時(shí)鐘/10位,……,111=4個(gè)時(shí)鐘/3位。00021PDN1:A/D轉(zhuǎn)換器處于正常模式。0:A/D轉(zhuǎn)換器處于掉電模式。023:22TEST[1:0]這些位用于器件測(cè)試,00為正常測(cè)試,01為數(shù)字測(cè)試模式,10為DAC測(cè)試模式,11為一次轉(zhuǎn)換測(cè)試模式。026:24START當(dāng)BURST為0時(shí),這些位控制著A/D轉(zhuǎn)換是否啟動(dòng)和何時(shí)啟動(dòng);000:不啟動(dòng)001:立即啟動(dòng)轉(zhuǎn)換010:當(dāng)ADCR寄存器bit27選擇的邊沿出現(xiàn)P0.1/ENT0/MAT0.2/CAP0.2腳時(shí)啟動(dòng)轉(zhuǎn)換注意:START選擇100~111時(shí),MAT信號(hào)不必輸出到引腳上100:當(dāng)ADCR寄存器bit27選擇的邊沿在MAT0.1出現(xiàn)時(shí)啟動(dòng)轉(zhuǎn)換101:當(dāng)ADCR寄存器bit27選擇的邊沿在MAT0.3出現(xiàn)時(shí)啟動(dòng)轉(zhuǎn)換110:當(dāng)ADCR寄存器bit27選擇的邊沿在MAT1.0出現(xiàn)時(shí)啟動(dòng)轉(zhuǎn)換111:當(dāng)ADCR寄存器bit27選擇的邊沿在MAT1.1出現(xiàn)時(shí)啟動(dòng)轉(zhuǎn)換00027EDGE該位只有在START字段為010~111時(shí)有效0:在所選CAP/MAT信號(hào)的下降沿啟動(dòng)轉(zhuǎn)換1:在所選CAP/MAT信號(hào)的上升沿啟動(dòng)轉(zhuǎn)換04.2.2A/D數(shù)據(jù)寄存器ADDRADDR寄存器描述見表4.3。其中ADDR[15:6]為10位的A/D轉(zhuǎn)換結(jié)果,bit5為最高位。表4.3數(shù)據(jù)寄存器ADDRADDR名稱功能復(fù)位值31DONEA/D轉(zhuǎn)換完成標(biāo)志位,當(dāng)A/D轉(zhuǎn)換結(jié)束時(shí)該位置位。該位在ADDR被讀出和ADCR被寫入時(shí)清零。如果ADCR在轉(zhuǎn)換過程中被寫入,并啟動(dòng)一次新的轉(zhuǎn)換。030OVERUNBrust模式下,如果產(chǎn)生LS位結(jié)果前,一個(gè)或多個(gè)轉(zhuǎn)換結(jié)果被丟失和覆蓋,該位置位。讀位通過讀ADDR寄存器清零。029:27這些位讀出為0.他們用于未來CHN字段的擴(kuò)展,使之兼容包含更多通道的轉(zhuǎn)換器。026:24CHN這些位包含的是LS位的轉(zhuǎn)換通道X23:16這些位讀出時(shí)為0.他們?cè)试S連續(xù)A/D值的累加,而不需要使用與門屏蔽處理,使得至少有256個(gè)值不溢出到CHN字段015:6V/Vdda當(dāng)DONE為時(shí),該字段包含一個(gè)二進(jìn)制數(shù),用來代表SEL字段選中的Ain腳的電壓接近于、等于或大于VddaX5:0這些位讀出時(shí)為0.專門用于未來的擴(kuò)展和功能更強(qiáng)大的A/D轉(zhuǎn)換器。04.3A/D的基本操作ADC(模數(shù)轉(zhuǎn)換器)轉(zhuǎn)換時(shí)鐘分頻計(jì)算公式如下:CLKDIV=Fpclk/Fadclk-1其中Fpclk為所要設(shè)置的ADC時(shí)鐘,其值不能大于4.5MH值。ADC轉(zhuǎn)換的基本操作方法:(1)將測(cè)量通道引腳設(shè)置為AINx功能;(2)通過ADCR寄存器設(shè)置ADC的工作模式,ADC轉(zhuǎn)換通道,轉(zhuǎn)換時(shí)鐘(CLKDIV時(shí)鐘分頻值);(3)啟動(dòng)ADC轉(zhuǎn)換;(4)通過查詢或中斷方式等待ADC轉(zhuǎn)換完畢,轉(zhuǎn)換數(shù)據(jù)存在ADDR寄存器中。4.4數(shù)據(jù)處理由于本課題用的是交流采樣,所以就要進(jìn)行數(shù)據(jù)處理,數(shù)據(jù)處理主要是進(jìn)行濾波,然而濾波的方法是多種多樣的,本文對(duì)常用的幾種方法進(jìn)行比較:(1)限幅濾波法(又稱程序判斷濾波法)a.方法:根據(jù)經(jīng)驗(yàn)判斷,確定兩次采樣允許的最大偏差值(設(shè)為A),每次檢測(cè)到新值時(shí)判斷:如果本次值與上次值之差<=A,則本次值有效;如果本次值與上次值之差>A,則本次值無效,放棄本次值,用上次值代替本次值。b.優(yōu)點(diǎn):能有效克服因偶然因素引起的脈沖干擾c.缺點(diǎn):無法抑制那種周期性的干擾;平滑度差。濾波方法:/*A值可根據(jù)實(shí)際情況調(diào)整value為有效值,new_value為當(dāng)前采樣值濾波程序返回有效的實(shí)際值*/#defineA10charvalue;charfilter(){charnew_value;new_value=get_ad();if((new_value-value>A)||(value-new_value>A)returnvalue;returnnew_value;}(2)中位值濾波法a.方法:連續(xù)采樣N次(N取奇數(shù)),把N次采樣值按大小排列,取中間值為本次有效值。b.優(yōu)點(diǎn):能有效克服因偶然因素引起的波動(dòng)干擾;對(duì)溫度、液位的變化緩慢的被測(cè)參數(shù)有良好的濾波效果。c.缺點(diǎn):對(duì)流量、速度等快速變化的參數(shù)不宜。濾波方法:/*N值可根據(jù)實(shí)際情況調(diào)整排序采用冒泡法*/#defineN11charfilter(){charvalue_buf[N];charcount,i,j,temp;for(count=0;count<N;count++){value_buf[count]=get_ad();delay();}for(j=0;j<N-1;j++){for(i=0;i<N-j;i++){if(value_buf>value_buf[i+1]){temp=value_buf;value_buf=value_buf[i+1];value_buf[i+1]=temp;}}}returnvalue_buf[(N-1)/2];}(3)算術(shù)平均濾波法a.方法:連續(xù)取N個(gè)采樣值進(jìn)行算術(shù)平均運(yùn)算,N值較大時(shí),信號(hào)平滑度較高,但靈敏度較低;N值較小時(shí),信號(hào)平滑度較低,但靈敏度較高。N值的選?。阂话懔髁浚琋=12;壓力:N=4。b.優(yōu)點(diǎn):適用于對(duì)一般具有隨機(jī)干擾的信號(hào)進(jìn)行濾波;這樣信號(hào)的特點(diǎn)是有一個(gè)平均值,信號(hào)在某一數(shù)值范圍附近上下波動(dòng)。c.缺點(diǎn):對(duì)于測(cè)量速度較慢或要求數(shù)據(jù)計(jì)算速度較快的實(shí)時(shí)控制不適用;比較浪費(fèi)RAM濾波方法:#defineN12charfilter(){intsum=0;for(count=0;count<N;count++){sum+=get_ad();delay();}return(char)(sum/N);}(4)遞推平均濾波法(又稱滑動(dòng)平均濾波法)a.方法:把連續(xù)取N個(gè)采樣值看成一個(gè)隊(duì)列,隊(duì)列的長(zhǎng)度固定為N,每次采樣到一個(gè)新數(shù)據(jù)放入隊(duì)尾,并扔掉原來隊(duì)首的一次數(shù)據(jù)(先進(jìn)先出原則)。把隊(duì)列中的N個(gè)數(shù)據(jù)進(jìn)行算術(shù)平均運(yùn)算,就可獲得新的濾波結(jié)果。N值的選?。毫髁浚琋=12;壓力:N=4;液面,N=4~12;溫度,N=1~4。b.優(yōu)點(diǎn):對(duì)周期性干擾有良好的抑制作用,平滑度高;適用于高頻振蕩的系統(tǒng)。c.缺點(diǎn):靈敏度低;對(duì)偶然出現(xiàn)的脈沖性干擾的抑制作用較差;不易消除由于脈沖干擾所引起的采樣值偏差;不適用于脈沖干擾比較嚴(yán)重的場(chǎng)合;比較浪費(fèi)RAM。濾波方法:#defineN12charvalue_buf[N];chari=0;charfilter(){charcount;intsum=0;value_buf[i++]=get_ad();if(i==N)i=0;for(count=0;count<N,count++)sum=value_buf[count];return(char)(sum/N);}(5)中位值平均濾波法(又稱防脈沖干擾平均濾波法)a.方法:此方法相當(dāng)于“中位值濾波法”+“算術(shù)平均濾波法”,連續(xù)采樣N個(gè)數(shù)據(jù),去掉一個(gè)最大值和一個(gè)最小值,然后計(jì)算N-2個(gè)數(shù)據(jù)的算術(shù)平均值。N值的選?。?~14。b.優(yōu)點(diǎn):融合了兩種濾波法的優(yōu)點(diǎn);對(duì)于偶然出現(xiàn)的脈沖性干擾,可消除由于脈沖干擾所引起的采樣值偏差。c.缺點(diǎn):測(cè)量速度較慢,和算術(shù)平均濾波法一樣;比較浪費(fèi)RAM。濾波方法:#defineN12charfilter(){charcount,i,j;charvalue_buf[N];intsum=0;for(count=0;count<N;count++){value_buf[count]=get_ad();delay();}for(j=0;j<N-1;j++){for(i=0;i<N-j;i++){if(value_buf>value_buf[i+1]){temp=value_buf;value_buf=value_buf[i+1];value_buf[i+1]=temp;}}}for(count=1;count<N-1;count++)sum+=value[count];return(char)(sum/(N-2));}經(jīng)過比較,所以選擇了一種比較簡(jiǎn)單容易實(shí)現(xiàn)的濾波方法—限幅濾波。4.5A/D采集功能介紹及軟件編程首先對(duì)A/D進(jìn)行初始化,初始化的詳細(xì)設(shè)置見表4.2-2。初始化后,A/D就開始選擇通道,選擇通道1,并進(jìn)行第一次轉(zhuǎn)換,等待轉(zhuǎn)換結(jié)束,再啟動(dòng),再轉(zhuǎn)換;讀取ADC結(jié)果,提取AD轉(zhuǎn)換值;最后進(jìn)行數(shù)值轉(zhuǎn)換。以此選擇2、3、4等通道,并重復(fù)上述操作。采集電流和電壓值各3路,進(jìn)行濾波,最后顯示。具體的實(shí)現(xiàn)見流程圖4.1。圖4.1A/D采集以及濾波處理的軟件編程:#include"config.h"#include"stdlib.h"#include<math.h>uint8F_flag;#defineA10uint32value_IA;uint32value_IB;uint32value_IC;uint32value_VA;uint32value_VB;uint32value_VC;uint32filer(uint32adVlaueNew,uint32adVlaueOld){uint32new_value;new_value=adVlaueNew;if((new_value-adVlaueOld>A)||(adVlaueOld-new_value>A))returnadVlaueNew;returnadVlaueOld;}VoidFunction_1_ADC(void){externuint8*title2[11];uint32ADC_Data;uint32i;charstr[14];if((F_flag&0x01)==0){PINSEL1=PINSEL1|0x01400000;ADCR=(1<<0)|//SEL=1,選擇通道0((Fpclk/1000000-1)<<8)|//CLKDIV=Fpclk/1000000-1,即轉(zhuǎn)換時(shí)鐘為1MHz(0<<16)|//BURST=0,軟件控制轉(zhuǎn)換操作(0<<17)|//CLKS=0,使用11clock轉(zhuǎn)換(1<<21)|//PDN=1,正常工作模式(非掉電轉(zhuǎn)換模式)(0<<22)|//TEST1:0=00,正常工作模式(非測(cè)試模式)(0<<24)|//START=1,直接啟動(dòng)ADC轉(zhuǎn)換Q(0<<27);//EDGE=0(CAP/MAT引腳下降沿觸發(fā)ADC轉(zhuǎn)換)}F_flag=0x01;ADC_Data=ADDR;ADCR=(ADCR&0x00FFFF00)|0x01|(1<<24);//設(shè)置通道1,并進(jìn)行第一次轉(zhuǎn)換while((ADDR&0x80000000)==0);//等待轉(zhuǎn)換結(jié)束ADCR=ADCR|(1<<24);//再次啟運(yùn)轉(zhuǎn)換while((ADDR&0x80000000)==0);//等待轉(zhuǎn)換結(jié)束ADC_Data=ADDR;//讀取ADC結(jié)果ADC_Data=(ADC_Data>>6)&0x3FF;//提取AD轉(zhuǎn)換值A(chǔ)DC_Data=filer(ADC_Data,value_IA);ADC_Data=ADC_Data*3300/1024;//數(shù)值轉(zhuǎn)換F_flag=0;ADC_Data=ADC_Data-200;sprintf(str,":%dA\r",ADC_Data//顯示GUI_PutString(60,16,str);ADC_Data=ADDR;ADCR=(ADCR&0x00FFFF00)|0x02|(1<<24);//設(shè)置通道2,并進(jìn)行第一次轉(zhuǎn)換while((ADDR&0x80000000)==0);//等待轉(zhuǎn)換結(jié)束ADCR=ADCR|(1<<24);//再次啟運(yùn)轉(zhuǎn)換while((ADDR&0x80000000)==0); //等待轉(zhuǎn)換結(jié)束ADC_Data=ADDR;//讀取ADC結(jié)果ADC_Data=(ADC_Data>>6)&0x3FF;//提取AD轉(zhuǎn)換值A(chǔ)DC_Data=ADC_Data*3300/1024;//數(shù)值轉(zhuǎn)換ADC_Data=filer(ADC_Data,value_IB);ADC_Data=ADC_Data-200;sprintf(str,":%dA\r",ADC_Data);//顯示GUI_PutString(60,32,str);ADC_Data=ADDR;ADCR=(ADCR&0x00FFFF00)|0x03|(1<<24);//設(shè)置通道3,并進(jìn)行第一次轉(zhuǎn)換while((ADDR&0x80000000)==0);//等待轉(zhuǎn)換結(jié)束ADCR=ADCR|(1<<24);//再次啟運(yùn)轉(zhuǎn)換while((ADDR&0x80000000)==0);//等待轉(zhuǎn)換結(jié)束ADC_Data=ADDR;//讀取ADC結(jié)果ADC_Data=(ADC_Data>>6)&0x3FF;//提取AD轉(zhuǎn)換值A(chǔ)DC_Data=ADC_Data*3300/1024;//數(shù)值轉(zhuǎn)換ADC_Data=filer(ADC_Data,value_IC);ADC_Data=ADC_Data-200;sprintf(str,":%dA\r",ADC_Data);//顯示GUI_PutString(60,48,str);ADC_Data=ADDR;ADCR=(ADCR&0x00FFFF00)|0x04|(1<<24);//設(shè)置通道4,并進(jìn)行第一次轉(zhuǎn)換while((ADDR&0x80000000)==0);//等待轉(zhuǎn)換結(jié)束ADCR=ADCR|(1<<24);//再次啟運(yùn)轉(zhuǎn)換while((ADDR&0x80000000)==0);//等待轉(zhuǎn)換結(jié)束ADC_Data=ADDR;//讀取ADC結(jié)果ADC_Data=(ADC_Data>>6)&0x3FF;//提取AD轉(zhuǎn)換值A(chǔ)DC_Data=ADC_Data*3300/1024;//數(shù)值轉(zhuǎn)換ADC_Data=filer(ADC_Data,value_VA);ADC_Data=ADC_Data-200;sprintf(str,":%dV\r",ADC_Data);//顯示GUI_PutString(60,82,str);ADC_Data=ADDR;ADCR=(ADCR&0x00FFFF00)|0x05|(1<<24);//設(shè)置通道5,并進(jìn)行第一次轉(zhuǎn)換while((ADDR&0x80000000)==0); //等待轉(zhuǎn)換結(jié)束ADCR=ADCR|(1<<24);//再次啟運(yùn)轉(zhuǎn)換while((ADDR&0x80000000)==0);//等待轉(zhuǎn)換結(jié)束ADC_Data=ADDR;//讀取ADC結(jié)果ADC_Data=(ADC_Data>>6)&0x3FF;//提取AD轉(zhuǎn)換值A(chǔ)DC_Data=ADC_Data*3300/1024;//數(shù)值轉(zhuǎn)換ADC_Data=filer(ADC_Data,value_VB);ADC_Data=ADC_Data-200;sprintf(str,":%dV\r",ADC_Data);//顯示GUI_PutString(60,98,str);ADC_Data=ADDR;ADCR=(ADCR&0x00FFFF00)|0x06|(1<<24);//設(shè)置通道6,并進(jìn)行第一次轉(zhuǎn)換while((ADDR&0x80000000)==0);//等待轉(zhuǎn)換結(jié)束ADCR=ADCR|(1<<24);//再次啟運(yùn)轉(zhuǎn)換while((ADDR&0x80000000)==0);//等待轉(zhuǎn)換結(jié)束ADC_Data=ADDR;//讀取ADC結(jié)果ADC_Data=(ADC_Data>>6)&0x3FF;//提取AD轉(zhuǎn)換值A(chǔ)DC_Data=ADC_Data*3300/1024;//數(shù)值轉(zhuǎn)換ADC_Data=filer(ADC_Data,value_VC);ADC_Data=ADC_Data-200;sprintf(str,":%dV\r",ADC_Data);//顯示GUI_PutString(60,114,str);}5鍵盤顯示模塊5鍵盤顯示模塊5.1關(guān)于鍵盤使用的簡(jiǎn)單介紹鍵盤顯示的內(nèi)容單片機(jī)應(yīng)用系統(tǒng)常需連接鍵盤、顯示器、打印機(jī)、A/D和D/A轉(zhuǎn)換器等外設(shè),其中,鍵盤和顯示器是使用最頻繁的外設(shè),它們是構(gòu)成人機(jī)對(duì)話的一種基本方式。(1)鍵輸入原理在單片機(jī)應(yīng)用系統(tǒng)中,除了復(fù)位按鍵有專門的復(fù)位電路及專一的復(fù)位功能外,其它按鍵都是以開關(guān)狀態(tài)來設(shè)置控制功能或輸入數(shù)據(jù)。當(dāng)所設(shè)置的功能鍵或數(shù)字鍵按下時(shí),計(jì)算機(jī)應(yīng)用系統(tǒng)應(yīng)完成該按鍵所設(shè)定的功能,鍵信息輸入是與軟件結(jié)構(gòu)密切相關(guān)的過程。對(duì)于一組鍵或一個(gè)鍵盤,總有一個(gè)接口電路與CPU相連。CPU可以采用查詢或中斷方式了解有無將鍵輸入并檢查是哪一個(gè)鍵按下,將該鍵號(hào)送入累加器ACC,然后通過跳轉(zhuǎn)指令轉(zhuǎn)入執(zhí)行該鍵的功能程序,執(zhí)行完后再返回主程序。(2)按鍵結(jié)構(gòu)與特點(diǎn)微機(jī)鍵盤通常使用機(jī)械觸點(diǎn)式按鍵開關(guān),其主要功能是把機(jī)械上的通斷轉(zhuǎn)換成為電氣上的邏輯關(guān)系。也就是說,它能提供標(biāo)準(zhǔn)的TTL邏輯電平,以便與通用數(shù)字系統(tǒng)的邏輯電平相容。機(jī)械式按鍵再按下或釋放時(shí),由于機(jī)械彈性作用的影響,通常伴隨有一定時(shí)間的觸點(diǎn)機(jī)械抖動(dòng),然后其觸點(diǎn)才穩(wěn)定下來。其抖動(dòng)過程如圖3.9所示,抖動(dòng)時(shí)間的長(zhǎng)短與開關(guān)的機(jī)械特性有關(guān),一般為510ms。圖3.9按鍵觸點(diǎn)的機(jī)械抖動(dòng)在觸點(diǎn)抖動(dòng)期間檢測(cè)按鍵的通與斷狀態(tài),可能導(dǎo)致判斷出錯(cuò)。即按鍵一次按下或釋放被錯(cuò)誤地認(rèn)為是多次操作,這種情況是不允許出現(xiàn)的。為了克服按鍵觸點(diǎn)機(jī)械抖動(dòng)所致的檢測(cè)誤判,必須采取去抖動(dòng)措施,可從硬件、軟件兩方面予以考慮。在鍵數(shù)較少時(shí),可采用硬件去抖,而當(dāng)鍵數(shù)較多時(shí),采用軟件去抖。西安工業(yè)大學(xué)畢業(yè)設(shè)計(jì)(論文)軟件上采取的措施是:在檢測(cè)到有按鍵按下時(shí),執(zhí)行一個(gè)5ms左右(具體時(shí)間應(yīng)視所使用的按鍵進(jìn)行調(diào)整)的延時(shí)程序后,再確認(rèn)該鍵電平是否仍保持閉合狀態(tài)電平,若仍保持閉合狀態(tài)電平,則確認(rèn)該鍵處于閉合狀態(tài);同理,在檢測(cè)到該鍵釋放后,也應(yīng)采用相同的步驟進(jìn)行確認(rèn),從而可消除抖動(dòng)的影響。(3)按鍵編碼一組按鍵或鍵盤都要通過I/O口線查詢按鍵的開關(guān)狀態(tài)。根據(jù)鍵盤結(jié)構(gòu)的不同,采用不同的編碼。無論有無編碼,以及采用什么編碼,最后都要轉(zhuǎn)換成為與累加器中數(shù)值相對(duì)應(yīng)的鍵值,以實(shí)現(xiàn)按鍵功能程序的跳轉(zhuǎn)。(4)編制鍵盤程序一個(gè)完善的鍵盤控制程序應(yīng)具備以下功能:a.檢測(cè)有無按鍵按下,并采取硬件或軟件措施,消除鍵盤按鍵機(jī)械觸點(diǎn)抖動(dòng)的影響。b.有可靠的邏輯處理辦法。每次只處理一個(gè)按鍵,其間對(duì)任何按鍵的操作對(duì)系統(tǒng)不產(chǎn)生影響,且無論一次按鍵時(shí)間有多長(zhǎng),系統(tǒng)僅執(zhí)行一次按鍵功能程序。c.準(zhǔn)確輸出按鍵值(或鍵號(hào)),以滿足跳轉(zhuǎn)指令要求。5.2鍵盤控制模塊的功能介紹及程序本課題選用三個(gè)按鍵keyA.,keyB,keyC,當(dāng)keyA按下時(shí),顯示的是我的基本信息:當(dāng)keyB按下時(shí)顯示的是采集的三路電流值和三路電壓值;當(dāng)keyC按下時(shí),顯示的是有功功率、無功功率、視在功率、功率因數(shù)等電特性參數(shù)。具體的鍵盤掃描流程圖如圖5.1圖。5.1圖5.2.1鍵盤掃描頭文件Keyboard.h#ifndefKEYDRV_H#defineKEYDRV_H/*定義鍵盤行列*/#defineKEYBOARD_ROW 4 /*定義*/#defineKEYBOARD_COLUMN 4 /*定義*/externvoidKeyboard_Initialize(void);externuint8Keyboard_Scan(void);//鍵值,無鍵按下,返回0xFFvoid Keyboard_Process(void);#endif5.2.2按鍵掃描去抖程序voidkeyscane(void){ uint8 i,x,y; if((IO1PIN&0x00010000)==0) { delay(5);//去抖 if((IO1PIN&0x00010000)==0) { keyFlag=MNUE_ONE;//設(shè)置按鍵值 GUI_ClearSCR(); uishow_A()
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024污水處理廠運(yùn)營(yíng)合同書(范本)
- 2024幼兒園租房合同協(xié)議書樣本
- 房產(chǎn)抵押擔(dān)保借款合同書范例
- 2024貨船租賃合同范本范文
- 股權(quán)抵押借款合同范文2024年
- 店面租房門面房租房合同協(xié)議
- 商業(yè)鋪?zhàn)赓U合同格式
- 項(xiàng)目合作協(xié)議書模板示例
- 2024居間合同,居間合同范例
- 技術(shù)合作協(xié)議樣式
- 精品堆垛機(jī)安裝指導(dǎo)書
- 前臺(tái)月度績(jī)效考核表(KPI)
- 雞的飼養(yǎng)管理-優(yōu)質(zhì)課件
- 德育課(共19張PPT)
- 歷史幽憤的現(xiàn)代回響——《記念劉和珍君》課堂實(shí)錄
- 化學(xué)微生物學(xué)第7章 微生物轉(zhuǎn)化
- 《少年正是讀書時(shí)》-完整版PPT課件
- 四、貼標(biāo)機(jī)基本調(diào)整法1
- 船舶建造方案
- 35KV集電線路鐵塔組立專項(xiàng)方案
- 不銹鋼管規(guī)格表大全以及理論重量表大全
評(píng)論
0/150
提交評(píng)論