嵌入式系統(tǒng)設(shè)計(jì) 基于ARM的AD轉(zhuǎn)換電壓測(cè)量顯示_第1頁
嵌入式系統(tǒng)設(shè)計(jì) 基于ARM的AD轉(zhuǎn)換電壓測(cè)量顯示_第2頁
嵌入式系統(tǒng)設(shè)計(jì) 基于ARM的AD轉(zhuǎn)換電壓測(cè)量顯示_第3頁
嵌入式系統(tǒng)設(shè)計(jì) 基于ARM的AD轉(zhuǎn)換電壓測(cè)量顯示_第4頁
嵌入式系統(tǒng)設(shè)計(jì) 基于ARM的AD轉(zhuǎn)換電壓測(cè)量顯示_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

器還要求具有較高的轉(zhuǎn)換速度。轉(zhuǎn)換精度與轉(zhuǎn)換速度是衡量A/D的重要指標(biāo)。隨著集成技術(shù)的發(fā)展,現(xiàn)已研制和生產(chǎn)出許多單片和混合集成型的AMD轉(zhuǎn)換器,它們具有愈來愈先進(jìn)的技術(shù)指標(biāo)。第2章總體設(shè)計(jì)方案2.1設(shè)計(jì)任務(wù)本文設(shè)計(jì)的報(bào)警系統(tǒng)對(duì)電路電壓進(jìn)行實(shí)時(shí)的采樣,一旦電壓高于設(shè)定的正常閾值,系統(tǒng)就會(huì)觸發(fā)報(bào)警動(dòng)作,提醒人們做出相應(yīng)措施。本設(shè)計(jì)采用了32位ARM微處理器LPC2138作為核心處理器,利用A/D轉(zhuǎn)換、定時(shí)器、按鍵等模塊,實(shí)現(xiàn)電壓的檢測(cè)、顯示、閾值設(shè)置,以及超過閾值能聲光報(bào)警,并將電壓數(shù)據(jù)通過串行通信(UART)發(fā)送到PC上位機(jī)顯示等功能。2.2系統(tǒng)組成與工作原理本系統(tǒng)設(shè)計(jì)框圖如圖2.1所示。電壓檢測(cè)電壓檢測(cè)A/D轉(zhuǎn)換數(shù)字信號(hào)按鍵控制模擬信號(hào)控制門值CPULPC2134液晶顯示所測(cè)電壓串口通信實(shí)時(shí)數(shù)據(jù)聲光報(bào)警圖2.1系統(tǒng)框圖電壓信號(hào)經(jīng)電壓檢測(cè)模塊采樣得到模擬信號(hào),該信號(hào)送到A/D轉(zhuǎn)換模塊處理成數(shù)字信號(hào)。CPU接收到該信號(hào)送給LCD模塊顯示輸出,同時(shí)通過UART通信送給顯示終端實(shí)時(shí)顯示數(shù)據(jù)變化情況。與此同時(shí),還可通過按鍵設(shè)置報(bào)警門值電壓。當(dāng)被測(cè)信號(hào)超出門值電壓時(shí),會(huì)發(fā)出聲光報(bào)警信號(hào)。第3章硬件設(shè)計(jì)3.1嵌入式系統(tǒng)介紹嵌入式系統(tǒng)通常由硬件層、中間層、系統(tǒng)軟件層和應(yīng)用軟件層4部分組成。硬件層是以嵌入式處理器為核心,由存儲(chǔ)器、通用按口設(shè)備、I/O擴(kuò)展芯片、通信擴(kuò)展芯片、電源時(shí)鐘芯片等組成的集成電路,是嵌入式系統(tǒng)運(yùn)行的基礎(chǔ)。中間層也稱為硬件抽象層HAL或板級(jí)支持包BSP,它將系統(tǒng)上層軟件和底層硬件分離開來,該層一般包含相關(guān)底層硬件的初始化、數(shù)據(jù)的輸入/輸出操作和硬件設(shè)備的配置功能。硬件抽象層的引入大大推動(dòng)了嵌入式操作系統(tǒng)的通用性。系統(tǒng)軟件層,顧名思義,就是一個(gè)嵌入式系統(tǒng)最基本的應(yīng)用環(huán)境。要想實(shí)現(xiàn)所需要的功能,需要在這一層安裝相應(yīng)的應(yīng)用程序。3.2主要單元電路設(shè)計(jì)3.2.1電壓檢測(cè)模塊通過滑動(dòng)變阻器的滑動(dòng),改變采樣電阻所分電壓值,此值可以通過采樣引腳通過滑動(dòng)變阻器的滑動(dòng),改變采樣電阻所分電壓值,此值可以通過采樣引腳經(jīng)處理后送顯示輸出模塊。本系統(tǒng)采用1K的電阻作為采樣電阻,以最高采樣電壓為3.3v為例,實(shí)際應(yīng)用中可根據(jù)情況更改其他阻值。其設(shè)計(jì)如圖3.1所示。圖3.1電壓檢測(cè)模塊3.2.2按鍵模塊本系統(tǒng)設(shè)置兩個(gè)機(jī)械按鍵,一個(gè)是控制門值電壓的增加,另一個(gè)控制門值電壓的減少。每按下一次,門值電壓值加0.1v或減0.1v。這樣可以控制檢測(cè)電壓的閥值得大小,其設(shè)計(jì)電路圖如下圖3.2。圖3.2按鍵模塊3.2.3顯示模塊本模塊采用液晶顯示屏,具有顯示質(zhì)量高,數(shù)字式接口,體積小、重量輕,功耗低等特點(diǎn)。LCD1602字符型液晶顯示模塊是一種專門用于顯示字母、數(shù)字、符號(hào)等點(diǎn)陣式LCD,目前常用16×1,16×2,20×2和40×2行等的模塊。LCD1602分為帶背光和不帶背光兩種,基控制器大部分為HD44780,帶背光的比不帶背光的厚,是否帶背光在應(yīng)用中并無差別,兩者尺寸差別如圖3.3所示。圖3.3LCD1602尺寸圖顯示模塊設(shè)計(jì)如圖3.4所示。圖3.4顯示模塊設(shè)計(jì)圖3.2.4A/D轉(zhuǎn)換模塊在設(shè)計(jì)時(shí)應(yīng)考慮A/D轉(zhuǎn)換模塊的如下特性:(1)本系統(tǒng)芯片是10位逐次逼近式模數(shù)轉(zhuǎn)換器。(2)4個(gè)(LPC2114/2124)或8個(gè)(LPC2210/2212/2214)引腳復(fù)用為A/D輸入腳,本系統(tǒng)設(shè)計(jì)只采用一路A/D采樣通道。(3)測(cè)量范圍:0~3.3V。(4)4位轉(zhuǎn)換時(shí)間>=2.44us。(5)轉(zhuǎn)換器的基本時(shí)鐘由VPB時(shí)鐘提供??删幊谭诸l器可將時(shí)鐘調(diào)整至逐步逼近轉(zhuǎn)換所需的4.5MHz(最大)。10位精度要求的轉(zhuǎn)換需要11個(gè)A/D轉(zhuǎn)轉(zhuǎn)換時(shí)鐘。ADC轉(zhuǎn)換時(shí)鐘分頻值計(jì)算:CLKDIV=3.2.5串行口通信模塊LPC2114/2124/2210/2212/2的兩個(gè)UART,均具有16字節(jié)的收發(fā)FIFO,寄存器位置符合16C550工業(yè)標(biāo)準(zhǔn),內(nèi)置波特率發(fā)生器,兩個(gè)串口具有基本相同的寄存器,其中UART1帶有完全的調(diào)制解調(diào)器控制握手接口。在使用UART與上位機(jī)PC通訊時(shí),需要一個(gè)RS232電平轉(zhuǎn)換電路,在本系統(tǒng)中直接采用虛擬終端。其中,寄存器U0RBR與UOTHR是同一地址,但物理上是分開的,讀操作時(shí)為UORBR,而寫操作時(shí)為U0THR;寄存器UODLL與U0RBR/UOTHR、UODLM與UOTER具有同樣的地址,如果要訪問U0DLM、UODLL,除數(shù)訪問位DLAB必須為1,若要訪問UORBR/U0THR、U0IER,則除數(shù)訪問位DLAB必須為0。圖5.34中,U0DLM和UODLL寄存器是波特率發(fā)生器的除數(shù)鎖存寄存器,用于設(shè)置合適的串口波特率;UORBR為數(shù)據(jù)接以緩沖,用于讀取接收到的數(shù)據(jù),若FIFO使能,串口接收到的數(shù)據(jù)會(huì)壓入FIFO緩沖;UOTHR為發(fā)送保存,向此寄存器寫入數(shù)據(jù)時(shí),將會(huì)引起串口數(shù)據(jù)發(fā)送,若FIFO使能,數(shù)據(jù)會(huì)壓入FIFO緩沖。波特率的除數(shù)計(jì)算如下:UxDLM、UxDLI=其中,baud為所需要的波特率。串行口通信模塊如圖3.5所示。圖3.5串行口通信模塊設(shè)計(jì)圖3.2.6聲光報(bào)警模塊聲光報(bào)警模塊可以在被測(cè)信號(hào)超過規(guī)定值時(shí),發(fā)出蜂鳴以示警告,同時(shí)LED燈發(fā)出視覺信號(hào)。具體操作時(shí),可使用按鍵設(shè)置報(bào)警門值電壓,當(dāng)被測(cè)信號(hào)超出門值電壓時(shí),會(huì)發(fā)出聲光報(bào)警信號(hào),提醒操作者采取措施。其設(shè)計(jì)圖如圖3.6所示。圖3.6聲光報(bào)警模塊設(shè)計(jì)圖3.3整體電路設(shè)計(jì)系統(tǒng)總體電路圖如圖3.7所示。圖3.7系統(tǒng)總體電路圖第4章軟件設(shè)計(jì)4.1軟件總體設(shè)計(jì)初始化門值設(shè)置電壓檢測(cè)初始化門值設(shè)置電壓檢測(cè)聲光報(bào)警不報(bào)警顯示比較小于門值大于門值圖4.1軟件流程圖4.2各功能模塊的軟件設(shè)計(jì)4.2.1A/D轉(zhuǎn)換子模塊A/D轉(zhuǎn)換子程序用來控制對(duì)輸入的模塊電壓信號(hào)的采集測(cè)量,并將對(duì)應(yīng)的數(shù)值存入相應(yīng)的內(nèi)存單元。首先系統(tǒng)初始化,啟動(dòng)A/D轉(zhuǎn)換,采集A/D轉(zhuǎn)換值,進(jìn)行數(shù)據(jù)轉(zhuǎn)換,轉(zhuǎn)換結(jié)束,顯示到屏幕上,若屏幕中沒有顯示出數(shù)值,則返回重新調(diào)用顯示函數(shù),否則用戶讀出示數(shù)。A/D轉(zhuǎn)換流程圖如圖4.2所示。開始開始系統(tǒng)初始化采集A/D轉(zhuǎn)換值啟動(dòng)A/D轉(zhuǎn)換數(shù)據(jù)轉(zhuǎn)換調(diào)用顯示是否顯示數(shù)值?讀電壓值結(jié)束YN圖4.2A/D轉(zhuǎn)換流程圖4.2.2顯示子模塊開始清屏輸出坐標(biāo)刻度,文字開始清屏輸出坐標(biāo)刻度,文字調(diào)用A/D轉(zhuǎn)化并量化函數(shù)串口發(fā)送轉(zhuǎn)化結(jié)果調(diào)用報(bào)警函數(shù)圖4.3顯示模塊流程圖11114.2.3按鍵子模塊鍵盤輸入電路主要是用來輸入數(shù)據(jù),從而實(shí)現(xiàn)人機(jī)交互。該系統(tǒng)的鍵盤設(shè)計(jì)是采用LPC2138芯片自帶的key管腳。按鍵模塊軟件流程圖如圖4.4所示。初始化按鍵初始化按鍵檢測(cè)熱鍵,選擇通道輸出電壓值圖4.4按鍵模塊軟件流程圖4.2.4聲光報(bào)警子模塊聲光處埋模塊相當(dāng)簡(jiǎn)單,這里只是簡(jiǎn)單的在一個(gè)I/O口上送出數(shù)據(jù)來驅(qū)動(dòng)蜂鳴器,在一個(gè)I/O口上送出數(shù)據(jù)以此來驅(qū)動(dòng)LED燈,該模塊包括初始化端口和數(shù)據(jù)產(chǎn)生兩個(gè)部分。1212第5章系統(tǒng)調(diào)試本設(shè)計(jì)仿真軟件采用keiluvision3軟件。KeilSoftware公司推出的Uision3是一款可用于多種8051MCU的集成開發(fā)環(huán)境(IDE),該IDE同時(shí)也是PK51及其它開發(fā)套件的一個(gè)重要組件。除增加了源代碼、功能導(dǎo)航器、模板編輯以及改進(jìn)的搜索功能外,Uvision3還提供了一個(gè)配置向?qū)Чδ埽铀倭藛?dòng)代碼和配置文件的生成。此外其內(nèi)置的仿真器可模擬目標(biāo)MCU,包括指令集、片上外圍設(shè)備及外部信號(hào)等。Uvision3提供邏輯分析器,可監(jiān)控基于MCUI/O引腳和外設(shè)狀態(tài)變化下的程序變量。Uvision3提供對(duì)多種最新的8051類微處理器的支持,包括AnalogDevices的ADUC83x和ADUC84x,以及Infineon的XC866等。系統(tǒng)調(diào)試如下:5.1調(diào)試方法軟件調(diào)試的主要任務(wù)是排查錯(cuò)誤,錯(cuò)誤主要包括邏輯和功能錯(cuò)誤,這些錯(cuò)誤有些是顯性的,而有些是隱形的,可以通過調(diào)試系統(tǒng)逐步發(fā)現(xiàn)錯(cuò)誤并改正。本系統(tǒng)的調(diào)試主要以軟件為主,程序方面,采用的是C語言,用Keil軟件將程序?qū)懭雴纹瑱C(jī)。5.2調(diào)試結(jié)果與分析被測(cè)信號(hào)尚未超過門值電壓時(shí),仿真圖如圖5.1所示。圖5.1超過門值電壓仿真圖1313被測(cè)信號(hào)超過門值電壓時(shí),仿真圖如圖5.2所示。圖5.2超過門值電壓仿真圖串行通信仿真結(jié)果圖,如圖5.3所示。圖5.3串行通信仿真結(jié)果圖1414總結(jié)本設(shè)計(jì)完成了基于ARM的A/D轉(zhuǎn)換的電壓測(cè)量,實(shí)現(xiàn)了對(duì)電路電壓進(jìn)行實(shí)時(shí)采樣并將測(cè)量結(jié)果通過UART口向PC機(jī)發(fā)送并實(shí)時(shí)顯示出來等功能,一旦電壓高于設(shè)定的正常閾值,系統(tǒng)還可以觸發(fā)報(bào)警動(dòng)作,提醒人們做出相應(yīng)措施。在這過程中我收獲頗豐,從這學(xué)期學(xué)習(xí)嵌入式系統(tǒng)這門課程開始,到課程設(shè)計(jì)結(jié)束,我們將以往書本上的知識(shí)成功應(yīng)用到實(shí)踐中去了,并且也對(duì)keil、proteus、ADS等軟件進(jìn)一步熟悉,掌握得更加牢固,對(duì)LPC2138系列ARM7的芯片有所了解,并可以初步的去運(yùn)用它做一些小的程序編寫,在編程的過程中,可以說是比較曲折,稍有不慎,程序調(diào)試結(jié)果就會(huì)出現(xiàn)偏差,因此花了比較長的時(shí)間。這次的課程設(shè)計(jì)讓我把ARM的理論知識(shí)用在實(shí)踐中,實(shí)現(xiàn)了理論和實(shí)踐相結(jié)合,從中更懂得理論的是實(shí)踐的基礎(chǔ),實(shí)踐有能檢驗(yàn)理論的正確性,對(duì)我以后參加工作或者繼續(xù)學(xué)習(xí)將會(huì)產(chǎn)生巨大的幫助和影響。同時(shí)也發(fā)現(xiàn)個(gè)人能力還不足,還需更加努力地學(xué)習(xí),特別是在編程方面還需要提高和進(jìn)步,希望自己能再接再厲,不斷提高個(gè)人能力。1515參考文獻(xiàn)[1]GuerinDava,BivensTerry,DavisJackE,ScholzFloyd.TheEagleonMyArm:HowtheWildernessandBirdsofPreySavedaVeteran'sLife[M].TheUniversityPressofKentucky:2020.[2]HughesMichaelJ.ForgingNapoleon'sGrandeArmée:Motivation,MilitaryCulture,andMasculinityintheFrenchArmy,1800-1808[M].NewYorkUniversityPress:2020.[3]華清遠(yuǎn)見嵌入式學(xué)院,劉洪濤,秦山虎,武立鑫,陳澤順.ARM嵌入式體系結(jié)構(gòu)與接口技術(shù)[M].人民郵電出版社,201704.[4]劉奇.淺析數(shù)據(jù)采集系統(tǒng)中典型的模數(shù)轉(zhuǎn)換原理[J].科技資訊,2017,15(03):13-14.[5]郭乾利,蘇建輝,陳麗霞,楊尚國.基于ARM+FPGA的高精度數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)[J].電子世界,2016,(23):51.[6]常本超,夏寧,但唐仁.嵌入式系統(tǒng)開發(fā)技術(shù)[M].人民郵電出版社,201509.[7]嵌入式控制系統(tǒng)開發(fā)及應(yīng)用實(shí)例[M].哈爾濱工業(yè)大學(xué)出版社:普通高等教育“十二五”創(chuàng)新型規(guī)劃教材,201208.[8]丘宏烈.基于嵌入式ARM7和以太網(wǎng)監(jiān)測(cè)電壓參數(shù)的研究[D].西華大學(xué),2011.[9]敖俊秋.基于ARM-V7的智能道岔表示電壓采集系統(tǒng)[D].北京交通大學(xué),2011.[10]滕少卿.基于ARM7的數(shù)字化控制零電壓零電流全橋PWMDC-DC變換器研究[D].江蘇大學(xué),2010.[11]謝毓,鄭珊珊,余強(qiáng).基于ARM7的LCD顯示電壓示波系統(tǒng)的設(shè)計(jì)[J].今日電子,2009,(08):67-68.[12]劉佩峰.基于ARM和PEBB的單相橋式電壓逆變器研究[D].中南大學(xué),2009.[13]侯思祖,王桂云.基于ARM7的電壓諧波智能監(jiān)測(cè)及消諧裝置[J].低壓電器,2008,(21):20-2.1616附錄1、主程序設(shè)計(jì)#include<stdio.h>#include"NXP/iolpc2138.h"#include"cry1602.c"#include"cry1602.h"#include"uart.h"#defineuintunsignedint#defineucharunsignedcharVoidadcini();VoidTime0init(void);Uintv_gate=120,v_now,v_nows;Voidmain()

{

PINSEL0=0;PINSEL0=0x00000005;//設(shè)置I/O連接到UART0PINSEL1=0x00000000;PINSEL2=0x00000000;I01DIR=I01DIR|0xffffffff;I00DIR&=(~0x00003800<<16);I00DIR=1<<16;LcdReset();adcini();Time0init();UART0_Ini();DispNChar(0,0,16,"VOLTAGE:GATE:");show_num1(v_gate);while(1)1717{if((IO0PIN&0x00001000)==0)

{Delay5ms();if((IO0PIN&0x00001000)==0){while((IO0PIN&0x00001000)==0);v_gate+=10;if(v_gate>256)v_gate=256;show_num1(v_gate);}}if((IO0PIN&0x00002000)==0){Delay5ms();if((IO0PIN&0x00002000)==0){while((IO0PIN&0x00002000)==0);if(v_gate<10)v_gate=10;v_gate-=10;show_num1(v_gate);}}AD0CR=AD0CR|(1<<24);

while((AD0DR&0x80000000)==0);

v_now=(AD0DR&0xfffc0)>>8;

v_nows=v_now*330/255;

show_num(v_nows);

if((T0IR&0X01)==0x01)

{T0IR=1;

send_num(v_nows);}

if(v_nows>v_gate)

IO0SET|=1<<16;

else

IO0CLR|=1<<16;}}1818voidadcini()

{PINSEL1=0x00400000;

AD0CR=(1<<0)(11<<8)(0<<16)(0<<17)(1<<21)(0<<22)(1<<24)(0<<27);

Delay5ms();

v_now=AD0DR;}

voidTime0init(void)

{T0TC=0;

T0PR=99;

T0MCR=0X03;

T0MR0=30000;

T0TCR=0X03;

T0TCR=0X01;

VICIntSelect=0;

VICVectCntl0=0x24;

VICIntEnable=0X00000010;}2、液晶顯示部分#include"NXP/iolpc2138.h"#include"cry1602.h"typedefunsignedcharuchar;typedefunsignedintuint;#defineBusy0x80<<16#defineCLR_RSIO1CLR|=0x0100<<16;//RS=P3.0#defineSET_RSIO1SET|=0x0100<<16;1919#defineCLR_RWIO1CLR|=0x0200<<16;//RW=P3.1#defineSET_RWIO1SET|=0x0200<<16;#defineCLR_ENIO1CLR|=0x0400<<16;//EN=P3.2#defineSET_ENIO1SET|=0x0400<<16;/***********************************************函數(shù)名稱:DispStr功能:讓液晶從某個(gè)位置起連續(xù)顯示一個(gè)字符串參數(shù):x--位置的列坐標(biāo)y--位置的行坐標(biāo)ptr--指向字符串存放位置的指針返回值:無***********************************************/voidDispStr(ucharx,uchary,uchar*ptr){uchar*vol;uchari,n=0;vol=ptr;while(*ptr++!='\0')n++;//計(jì)算字符串有效字符的個(gè)數(shù)for(i=0;i<n;i++){Disp1Char(x++,y,vol[i]);if(x==0x0f){x=0;y^=1;}}}/*******************************************函數(shù)名稱:DispNchar功能:讓液晶從某個(gè)位置起連續(xù)顯示N個(gè)字符參數(shù):x--位置的列坐標(biāo)y--位置的行坐標(biāo)n--字符個(gè)數(shù)ptr--指向字符存放位置的指針返回值:無********************************************/voidDispNChar(ucharx,uchary,ucharn,uchar*ptr)2020{uchari;for(i=0;i<n;i++){Disp1Char(x++,y,ptr[i]);if(x==0x0f){x=0;y^=1;}}}/*******************************************函數(shù)名稱:LocateXY功能:向液晶輸入顯示字符位置的坐標(biāo)信息參數(shù):x--位置的列坐標(biāo)y--位置的行坐標(biāo)返回值:無********************************************/voidLocateXY(ucharx,uchary){ucharvol;vol=x&0x0f;y&=0x01;if(y)vol|=0x40;//如果在第2行vol|=0x80;LcdWriteCommand(vol,1);}/*******************************************函數(shù)名稱:Disp1Char功能:在某個(gè)位置顯示一個(gè)字符參數(shù):x--位置的列坐標(biāo)y--位置的行坐標(biāo)data--顯示的字符數(shù)據(jù)返回值:無********************************************/voidDisp1Char(ucharx,uchary,uchardata){LocateXY(x,y);LcdWriteData(data);}/*******************************************2121函數(shù)名稱:LcdReset功能:對(duì)1602液晶模塊進(jìn)行復(fù)位操作參數(shù):無返回值:無********************************************/voidLcdReset(void){IO1DIR|=0X7FF;//CtrlDir|=0x07;//控制線端口設(shè)為輸出狀態(tài)//DataDir=0xFF;//數(shù)據(jù)端口設(shè)為輸出狀態(tài)LcdWriteCommand(0x38,0);//規(guī)定的復(fù)位操作

Delay5ms();

LcdWriteCommand(0x38,0);

Delay5ms();

LcdWriteCommand(0x38,0);

Delay5ms();

LcdWriteCommand(0x38,1);//顯示模式設(shè)置

LcdWriteCommand(0x08,1);//顯示關(guān)閉

LcdWriteCommand(0x01,1);//顯示清屏

LcdWriteCommand(0x06,1);//寫字符時(shí)整體不移動(dòng)

LcdWriteCommand(0x0c,1);//顯示開,不開游標(biāo),不閃爍

}/*******************************************

函數(shù)名稱:LcdWriteCommand

功能:向液晶模塊寫入命令

參數(shù):cmd--命令,

chk--是否判忙的標(biāo)志,1:判忙,0:不判

返回值:無

********************************************/

voidLcdWriteCommand(ucharcmd1,ucharchk)2222{if(chk)WaitForEnable();//檢測(cè)忙信號(hào)?

uintcmd;

cmd=cmd1<<16;

CLR_RS;

CLR_RW;

asm("NOP");

IO1SET|=cmd;

IO1CLR|=((~cmd)&(0xff<<16));

//DataPort=cmd;//將命令字寫入數(shù)據(jù)端口

asm("NOP");

SET_EN;//產(chǎn)生使能脈沖信號(hào)

asm("NOP");

asm("NOP");

CLR_EN;

}/*******************************************

函數(shù)名稱:LcdWriteData

功能:向液晶顯示的當(dāng)前地址寫入顯示數(shù)據(jù)

參數(shù):data--顯示字符數(shù)據(jù)

返回值:無

********************************************/

voidLcdWriteData(uchardata1)

{WaitForEnable();//等待液晶不忙

uintdata;

data=data1<<16;

SET_RS;

CLR_RW;

asm("NOP");

IO1SET|=data;

IO1CLR|=((~data)&(0xff<<16));2323//DataPort=data;//將顯示數(shù)據(jù)寫入數(shù)據(jù)端口

asm("NOP");

SET_EN;//產(chǎn)生使能脈沖信號(hào)

asm("NOP");

asm("NOP");

CLR_EN;}

/*******************************************

函數(shù)名稱:WaitForEnable

功能:等待1602液晶完成內(nèi)部操作

參數(shù):無

返回值:無

********************************************/

voidWaitForEnable(void)

{IO1DIR&=(~(0x000000FF<<16));//將P4口切換為輸入狀態(tài)

CLR_RS;

SET_RW;

asm("NOP");

SET_EN;

asm("NOP");

asm("NOP");

asm("NOP");

asm("NOP");

while((IO1PIN&Busy&(0xff<<16))!=0);//檢測(cè)忙標(biāo)志

CLR_EN;

IO1DIR|=0xFF<<16;//將P4口切換為輸出狀態(tài)}

/*******************************************

函數(shù)名稱:Delay5ms

功能:延時(shí)約5ms

參數(shù):無2424返回值:無

********************************************/

voidDelay5ms(void)

{

uinti=4000;

while(i!=0)

{

i--;

}

}

voidshow_num(intx)

{

Disp1Char(0,1,0x30+x/100);

Disp1Char(1,1,46);

Disp1Char(2,1,0x30+x%100/10);

Disp1Char(3,1,0x30+x%10);

Disp1Char(4,1,'v');

}

voidshow_num1(intx)

{

Disp1Char(10,1,0x30+x/100);

Disp1Char(11,1,46);

Disp1Char(12,1,0x30+x%100/10);

Disp1Char(13,1,0x30+x%10);

Disp1Char(14,1,'v');

}3、UART部分程序:

#include"NXP/iolpc2138.h"

#include"uart.h"

typedefunsignedcharuint8;/*無符號(hào)8位整型變量*/2525typedefsignedcharint8;/*有符號(hào)8位整型變量*/

typedefunsignedshortuint16;/*無符號(hào)16位整型變量*/

typedefsignedshortint16;/*有符號(hào)16位整型變量*/

typedefunsignedintuint32;/*無符號(hào)32位整型變量*/

typedefsignedintint32;/*有符號(hào)32位整型變量*/

typedeffloatfp32;/*單精度浮點(diǎn)數(shù)(32位長度)*/

typedefdoublefp64;/*雙精度浮點(diǎn)數(shù)(64位長度)*/

#defineFosc11059200//晶振頻率,10MHz~25MHz,應(yīng)當(dāng)與實(shí)際一至

#defineFcclk(Fosc*1)//系統(tǒng)頻率,必須為Fosc的整數(shù)倍(1~32),且<=60MHZ

#defineFcco(Fcclk*4)//CCO頻率,必須為Fcclk的2、4、8、16倍,范圍為156MHz~320MHz

#defineFpclk(Fcclk/4)*1//VPB時(shí)鐘頻率,只能為(Fcclk/4)的1~4倍

voidDelayNS(uint32dly)

{uint32i;

for(;dly>0;dly--)

for(i=0;i<5000;i++);

}

#defineUART_BPS9600/*定義通訊波特率*/

/*****

溫馨提示

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

評(píng)論

0/150

提交評(píng)論