1.001.jpg (14.45 KB, 下載次數(shù): 84)
下載附件
2017-7-12 23:00 上傳
電控學(xué)院課程設(shè)計(jì)(論文) 課程名稱:ARM課程設(shè)計(jì) 題 目:雙通道數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì) 院 (系):電氣與控制工程學(xué)院 專業(yè)班級(jí):自動(dòng)化1002班 姓 名:李*斌 魚*輪 陳*姣 朱*甜 學(xué) 號(hào):1106050209H6050218H6050201H6050203 指導(dǎo)教師:李紅巖 楊學(xué)存
第1章 緒論 1.1 ARM概述及其發(fā)展 ARM公司的IP核已經(jīng)由ARM7,ARM9發(fā)展到今天的ARM11版本。ARM11囊括了Thumb-2,CoreSight,TrusZone 等眾多業(yè)界領(lǐng)先技術(shù),同時(shí)由單一的處理器內(nèi)核向多核發(fā)展,為高端的嵌入式應(yīng)用提供了強(qiáng)大的處理平臺(tái)。高集成度SOC芯片的采用可以帶來一系列好處,諸如減少了外圍器件和PCB面積,提高系統(tǒng)抗干擾能力,縮小產(chǎn)品體積,降低功耗等。 ARM 公司是一家IP供應(yīng)商,其核心業(yè)務(wù)是IP核以及相關(guān)工具的開發(fā)和設(shè)計(jì)。半導(dǎo)體廠商通過購買ARM公司的IP授權(quán)來生產(chǎn)自己的微處理器芯片。由此以來,處理器內(nèi)核來自ARM公司、各芯片廠商結(jié)合自身已有的技術(shù)優(yōu)勢以及芯片的市場定位等因數(shù)使芯片設(shè)計(jì)最優(yōu)化,從而產(chǎn)生了一大批高度集成、各據(jù)特色的SOC芯片。例如Intel公司的XScale系列集成了LCD控制器、音頻編/解碼器,定位于智能PDA市場;Atmel公司的AT91系列片內(nèi)集成了大容量 Flash和RAM、高精度A/D轉(zhuǎn)換器以及大量可編程I/O端口,特別適合于工業(yè)控制領(lǐng)域;Philips公司的LPC2000系列片內(nèi)集成了128位寬的零等待Flash存儲(chǔ)器以及I2C, SPI,PWM,UART等傳統(tǒng)接口,極高的性價(jià)比使它對(duì)傳統(tǒng)的8/16位MCU提出了嚴(yán)峻的挑戰(zhàn)。本次設(shè)計(jì)仍使用的ARM7系列。 1.2 ARM微處理器 1.2.1 ARM微處理器的特點(diǎn) ARM微處理器采用RISC指令集、使用大量寄存器、ARM/THUMB指令支持、三/五級(jí)流水線具有低功耗、低成本、高性能等特點(diǎn)。 1.2.2 ARM微處理器LPC2131概述及其構(gòu)造 LPC2131簡介 LPC2131的內(nèi)核是ARM7TDMI-S核,32位微處理器,采用馮·諾依曼結(jié)構(gòu)(數(shù)據(jù)和指令混合編址)。 ARM7TDMI-S核采用三級(jí)流水線,還使用了一個(gè)被稱為Thumb(16位指令長度)的獨(dú)特結(jié)構(gòu)化策略,適合那些對(duì)存儲(chǔ)器有限制或者需要較高代碼密度的大批量產(chǎn)品的應(yīng)用。Thumb代碼僅為ARM代碼規(guī)模的65%,但是性能卻是連接到16位存儲(chǔ)器系統(tǒng)的相同ARM處理器性能的160%。 較小的封裝(LQFP64)和極低的功耗使LPC2131可理想的應(yīng)用于小型系統(tǒng)中,如通信網(wǎng)關(guān)、協(xié)議轉(zhuǎn)換器、聲音辨別、低端成像、工業(yè)控制和醫(yī)療系統(tǒng)。 1.2.3.LPC2131特性:
1.002.jpg (24.2 KB, 下載次數(shù): 98)
下載附件
2017-7-12 23:00 上傳
8KB片內(nèi)SRAM; 32KB片內(nèi)Flash,128位寬度接口/加速器實(shí)現(xiàn)高達(dá)60MHz的操作頻率; 8路10位A/D轉(zhuǎn)換器; 2個(gè)32位定時(shí)器(帶4路捕獲和4路比較通道),PWM單元(6路輸出)和看門狗; 2個(gè)UART,2個(gè)高速IIC接口(400Kb/s),SPI,SSP; 向量中斷控制器,可配置優(yōu)先級(jí)和向量地址; 47個(gè)(P0.0-P0.23,P0.24-P0.31,P1.16-P1.31)可承受5V電壓的通用I/O口; 9個(gè)邊沿或者電平觸發(fā)的外部中斷引腳; 片內(nèi)晶體振蕩電路支持頻率1-30MHz; 2個(gè)低功耗模式:空閑和掉電; ARM內(nèi)部結(jié)構(gòu)原理圖 單電源供電,含有上電復(fù)位(POR)和掉電檢測(BOD)電路,CPU操作電壓3.0-3.6V。 1.2.4.LPC2131最小系統(tǒng) 在LPC2131中,存儲(chǔ)系統(tǒng)為可以選擇的,這是由于許多面向嵌入式領(lǐng)域的嵌入式的微控制器的內(nèi)部設(shè)計(jì)好了程序與數(shù)據(jù)的存儲(chǔ)器,存儲(chǔ)器的系統(tǒng)無需自己來設(shè)計(jì),調(diào)試和測試的接口也不一定是必需需要的。
1.003.jpg (10.91 KB, 下載次數(shù): 107)
下載附件
2017-7-12 23:00 上傳
最小系統(tǒng)原理圖 第3章 硬件電路設(shè)計(jì) 4 .1控制模塊 以ARM7LPC2131開發(fā)板為控制核心,無需再添加晶振及復(fù)位電路等外圍電路,其運(yùn)算速率非常快,并且ARM7-LPC2131有6路PWM脈沖輸出,8路10位的A/D轉(zhuǎn)換和1個(gè)D/A轉(zhuǎn)換,2個(gè)帶4路捕獲和4路比較通道的32位定時(shí)器,1個(gè)2KB的Flash存儲(chǔ)器、看門狗,實(shí)時(shí)時(shí)鐘等,它不僅可以在系統(tǒng)編程,在內(nèi)置的串行JTAG接口對(duì)存儲(chǔ)器進(jìn)行編程,也可以在應(yīng)用編程的過程中對(duì)存儲(chǔ)器進(jìn)行編程。 晶顯示模塊12864具有四位或八位并行,兩線或三線串行等多種接線方式,內(nèi)部具有簡體的中文字庫,液晶顯示的分辨率是128×64, 其內(nèi)部含有8192個(gè)16 * 16點(diǎn)漢字和128個(gè)16 * 8點(diǎn)ASCII碼字符集。通過靈活的接線方式以及利用簡單的指令,能夠很方便地產(chǎn)生全中文的人機(jī)交互界面,可以顯示漢字,也可以顯示圖形。 液晶顯示模塊12864具有低電壓以及低功耗的特點(diǎn)。該液晶模塊同其它顯示圖形的點(diǎn)陣液晶模塊相比,具有硬件電路簡單,顯示程序更簡潔等諸多優(yōu)點(diǎn),并且該液晶顯示模塊價(jià)格較為便宜。可以采用熱敏電阻來實(shí)現(xiàn)溫度的測量,可滿足40攝氏度至90攝氏度測量范圍,但熱敏電阻精度、重復(fù)性、可靠性較差,對(duì)于檢測到的溫度的精確度不能夠得到保證。在本裝置中,要實(shí)現(xiàn)精度為0.1攝氏度溫度的車輛,采用熱敏電阻不嫩夠滿足求,故考慮采用數(shù)字溫度傳感器DS18B20。DS18B20 測量溫度,輸出信號(hào)全數(shù)字化,便于單片機(jī)處理及控制,單總線的數(shù)據(jù)傳輸,省去傳統(tǒng)的測溫方法的很多外圍電路,系統(tǒng)的結(jié)構(gòu)可以做得較為緊湊
1.004.jpg (11.95 KB, 下載次數(shù): 96)
下載附件
2017-7-12 23:00 上傳
圖3 DS18B20 電路
1.005.jpg (26.02 KB, 下載次數(shù): 110)
下載附件
2017-7-12 23:00 上傳
4.2.12864顯示內(nèi)部 第4章 軟件設(shè)計(jì) 系統(tǒng)的軟件設(shè)計(jì)包括程序的下載和調(diào)試,需要用到ADS集成開發(fā)環(huán)境和EASYJTAG-H仿真使用器。該仿真器是ARM公司開發(fā)出的標(biāo)準(zhǔn)的20腳JTAG仿真的簡易仿真器,實(shí)現(xiàn)了全速,單步和斷點(diǎn)等調(diào)試功能,采用ADS1.2集成開發(fā)的RDI協(xié)議,支持在AXD中直接固話程序到片內(nèi)Flash。 EASYJTAG-H仿真器是符合ARM公司提出的標(biāo)準(zhǔn)20腳JTAG仿真調(diào)試接口的簡易仿真器。該仿真器采用ADS1.2集成開發(fā)環(huán)境的RDI協(xié)議。實(shí)現(xiàn)了單步、全速及斷點(diǎn)等調(diào)試功能,此外支持在AXD中直接固化程序到片內(nèi)FLASH。H-JTAG 軟件具有如下特點(diǎn):支持ARM7/ARM9,支持自動(dòng)檢測和手動(dòng)指定內(nèi)核; 使用RDI 接口,支持SDT2.51、ADS1.2、REALVIEW 和IAR 集成開發(fā)環(huán)境;支持2 個(gè)硬件斷點(diǎn)或數(shù)量不限的軟件斷點(diǎn); 支持ARM/Thumb 模式; 支持Little Endian & BIG Endian 模式; 支持Semihosting 調(diào)試; 支持Wiggler、SDT JTAG 和自定義接口。將計(jì)算機(jī)并口與EASYJTAG-H仿真器連接,并將仿真器JTAG口接頭插入EasyARM2131開發(fā)板的J3,再使用USB連接電纜與PC連接給開發(fā)板供電。通過H-JTAG Serve和 H-Flasher兩個(gè)工具對(duì)仿真器進(jìn)行配置就可以用AXD軟件進(jìn)行調(diào)試了。硬件調(diào)試及結(jié)果分析。硬件調(diào)試:硬件調(diào)試時(shí),應(yīng)先檢查印制板及焊接的質(zhì)量是否符合要求,有無虛焊點(diǎn)及線路間有無短路、斷路。然后用萬用表測試或通電檢測,檢查無誤后,可通電檢查LCD液晶顯示器亮度情況,一般情況下取背光電壓為4~5.5V即可得到滿意的效果。采用編程器將程序?qū)懭雴纹瑱C(jī),給電路板供電,觀察電路工作情況,再進(jìn)行最終的處理。 4.1軟件實(shí)現(xiàn)方框圖 系統(tǒng)軟件采用C語言編程,程序詳情請參見附錄。 程序的流程圖如下:
1.006.jpg (12.77 KB, 下載次數(shù): 97)
下載附件
2017-7-12 23:00 上傳
第5章 心得 李呈斌1106050209 我們組做的課題是多路數(shù)據(jù)采集,我主要負(fù)責(zé)硬件的焊接及調(diào)試。我們課題的基本功能是電壓的采集,拓展功能是將A/D轉(zhuǎn)換器的本身測量范圍0~3.3V擴(kuò)展到10V,外加一個(gè)溫度測量。雖然實(shí)現(xiàn)功能都是基本的拓展功能,但從最初的沒有頭緒,到查資料,和組員之間互相探討學(xué)習(xí),再到最后展現(xiàn)成品,整個(gè)過程都讓我學(xué)到了很多。 當(dāng)然,在此次課程設(shè)計(jì)中,遇到了一些問題,但經(jīng)過和組員的共同檢查,終于找出了原因所在,也暴露出了前期我在這方面的知識(shí)欠缺和經(jīng)驗(yàn)不足。通過此次課程設(shè)計(jì)使我更加扎實(shí)的掌握了有關(guān)ARM方面的知識(shí),實(shí)踐出真知,通過親自動(dòng)手制作,使我們掌握的知識(shí)不再是紙上談兵。在以后的工作中,我會(huì)更注意自己知識(shí)的不足,及時(shí)的充足自己各個(gè)方面。 魚輪1106050218 數(shù)據(jù)采集系統(tǒng)是將采集傳感器輸出的溫度,流量等模擬信號(hào)轉(zhuǎn)換成計(jì)算機(jī)能識(shí)別的數(shù)字信號(hào),我們組基于兩路電壓的采集之上擴(kuò)展了A/D轉(zhuǎn)化器的測量范圍,以及溫度的采集,本次課程設(shè)計(jì)我主要負(fù)責(zé)部分軟件的編寫,以及原理圖的繪制。因?yàn)檐浖皇俏业奶貏e強(qiáng)項(xiàng),剛開始也是無從下手,查資料,請教老師和同學(xué),慢慢的從中學(xué)到了很多,在后期的拓展功能,也能稍微的得心應(yīng)手。兩周的時(shí)間,學(xué)到的東西很多,特別是此次軟件的編寫到功能的實(shí)現(xiàn),讓我明白一定要不懈努力,不能遇到問題就想到要退縮,不能知難而退,那樣永遠(yuǎn)不可能得到自己期待的結(jié)果。 通過本次設(shè)計(jì),能使自己對(duì)所學(xué)知識(shí)有一個(gè)系統(tǒng)的認(rèn)識(shí)和理解,不僅能夠熟練掌握繪圖軟件的基本操作,而且也讓我對(duì)軟件這一塊有了更深的學(xué)習(xí),使自己的興趣大大提高,以后會(huì)多閱讀這方面的資料和書籍來提高自己的能力和經(jīng)驗(yàn)。 陳姣1106050201 兩周的課程設(shè)計(jì),我們組的任務(wù)算是比較完美的完成,在預(yù)期的基本功能上拓展了我們自己的想法:擴(kuò)大A/D轉(zhuǎn)換器的量程范圍,溫度的采集。此次的課設(shè)中,我們團(tuán)隊(duì)從查資料,原理圖的繪制,硬件的焊接,軟件的編輯,到最后的成品,四個(gè)人都付出了自己的一份努力。我從最初對(duì)課題的不解,到成品運(yùn)轉(zhuǎn),整個(gè)流程,學(xué)到了很多的東西,當(dāng)然,在設(shè)計(jì)的過程中遇到了很多問題,比如,焊接完成,在硬件檢測的時(shí)候,發(fā)現(xiàn)所需的電阻阻值與焊接上的電阻阻值不相符;在加拓展功能時(shí),調(diào)試量程的誤差解決等等。總而言之,在此次ARM的課程設(shè)計(jì)中,知識(shí)的增長有很多,因?yàn)槲覀儗W(xué)到的東西不夠深?yuàn)W,所以要勤看課本,多查資料,從基礎(chǔ)著手,一點(diǎn)一滴的積累,慢慢的應(yīng)用到不同的領(lǐng)域中。還有,團(tuán)隊(duì)的互助,雖然有時(shí)候也會(huì)意見不統(tǒng)一,但我們的團(tuán)隊(duì)很有包容性,大家都很為對(duì)方考慮,努力把課題做到大家都滿意的程度。 朱新甜1106050203 在這次為期兩周課程設(shè)計(jì)的過程中,我深深的感觸到了團(tuán)隊(duì)合作的重要性,尤其是在當(dāng)今的社會(huì)工作中,一個(gè)人的力量在一個(gè)巨大的任務(wù)前是那么的渺小,必須靠多人合作才能共同完成。在設(shè)計(jì)規(guī)劃過程,我們小組四個(gè)人親密無間的合作,使得本次課程設(shè)計(jì)能夠非常順利地完成,在課程設(shè)計(jì)的過程中,每個(gè)人都能 按要求很好的完成分配給自己的任務(wù),最后大家一起通過討論把所有任務(wù)串連起來完成總的設(shè)計(jì)任務(wù)。 通過本次課程設(shè)計(jì),讓我很好的鍛煉了理論聯(lián)系實(shí)際,與具體項(xiàng)目、課題相結(jié)合開發(fā)、設(shè)計(jì)產(chǎn)品的能力。既讓我們懂得了怎樣將理論應(yīng)用于實(shí)際,又讓我們懂得了在實(shí)踐中遇到的問題怎樣用理論去解決。在設(shè)計(jì)過程中,總是會(huì)遇到這樣或那樣的問題。有時(shí)一個(gè)問題可能會(huì)需要大家集體去查閱資料,做大量的工作,花大量的時(shí)間才能解決。通過不斷地發(fā)現(xiàn)問題,解決問題,自然而然,我的發(fā)現(xiàn)問題和解決問題的能力便在其中建立起來了。這都為以后的工作積累了經(jīng)驗(yàn),同時(shí)也增強(qiáng)了我們解決問題的能力。非常感謝老師的指導(dǎo),和同學(xué)的幫忙。 第6章 調(diào)試及實(shí)物照片:
1.007.jpg (13.12 KB, 下載次數(shù): 89)
下載附件
2017-7-12 23:00 上傳
1.008.jpg (39.41 KB, 下載次數(shù): 100)
下載附件
2017-7-12 23:00 上傳
1.009.jpg (24.75 KB, 下載次數(shù): 117)
下載附件
2017-7-12 23:00 上傳
參考文獻(xiàn): 【1】周立功,ARM嵌入式系統(tǒng)基礎(chǔ)教程【M】北京航空航天大學(xué)出版社,2008.9 【2】周明安,朱光忠,步進(jìn)電機(jī)驅(qū)動(dòng)技術(shù)發(fā)展及現(xiàn)狀【J】機(jī)電工程技術(shù),2005 【3】許大中、賀益康,電機(jī)控制【M】杭州:浙江大學(xué)出版社,2002 【4】周立功、陳明計(jì)、陳渝,ARM嵌入式Linux系統(tǒng)構(gòu)建與驅(qū)動(dòng)開發(fā)范例【M】: 北京航空航天大學(xué)出版社,2006 致謝 值此論文完成之際,我要代表全組成員衷心的感謝給予我們關(guān)心和幫助的所有師長,同學(xué)和朋友們。而且,我們要特別感謝此次課程設(shè)計(jì)的李紅巖老師,在我們小組進(jìn)行電路硬件和軟件設(shè)計(jì)的時(shí)候悉心的指導(dǎo)和無微不至的關(guān)懷給予了我們很大的幫助,是我們受益匪淺。他淵博的學(xué)識(shí)和平易近人的風(fēng)范、嚴(yán)謹(jǐn)?shù)闹螌W(xué)態(tài)度和以身作則的高貴品質(zhì),不斷激勵(lì)我們奮進(jìn),在這里我們小組全體成員在這表示誠摯的謝意! 最后,感謝我的母校西安科技大學(xué)電氣與控制工程學(xué)院,希望她能越辦越強(qiáng)大,培養(yǎng)出更多的優(yōu)秀人才! 附程序: - #include "config.h"
- #include "stdio.h"
- #include "18b20.h"
- #define CON_A (1<<8) ;
- #define CON_B (1<<9) ;
- #define E_CLK (1<<4) ; //clock input 同步時(shí)鐘輸入端
- #define RW_SID (1<<5) ; //data input/output 串行數(shù)據(jù)輸入、輸出端
- #define RS (1<<6) ;
- #define BEEP (1<<7) ;
- #define LED1 (1<<18) ;
- const uint32 KEY1 = 1 << 16;
- const uint32 KEY2 = 1 << 17;
- uint8 rcv_buf,rcv_new;
- char kcsj[] ="多路數(shù)據(jù)采集系統(tǒng)";
- char T[]="溫度: 攝式度";
- char tonga[]="通道1:";
- char tongb[]="通道2: ";
- char str1[6],str2[6],tem[3];
- /************************以下是12864液晶顯示器的子程序************************/
- void delay(uint32 dly)//延時(shí)函數(shù)
- {
- uint32 i;
- for ( ; dly>0; dly--)
- for (i=0; i<10; i++);
- }
-
- void SendByte(uint8 dat) //串行發(fā)送一字節(jié)數(shù)據(jù)
- {
- uint8 i;
- IO0SET|=RS;
- for(i=0;i<8;i++)
- {
- IO0CLR|=E_CLK ;
- delay(5);
- if(dat&0x80)
- {
- IO0SET|=RW_SID;delay(5);
- }
- else IO0CLR|=RW_SID;
- {
- IO0SET|=E_CLK;delay(5);
- }
- dat=dat<<1;
- }
- IO0CLR|=RS;
- }
-
- void SendCmd(uint8 dat) //寫控制命令
- {
- SendByte(0xF8); //11111,00,0 RW=0,RS=0 同步標(biāo)志
- SendByte(dat&0xF0); //高四位
- SendByte((dat&0x0F)<<4); //低四位
- }
-
-
- void SendDat(uint8 dat) //寫顯示數(shù)據(jù)或單字節(jié)字符
- {
- SendByte(0xFA); //11111,01,0 RW=0,RS=1
- SendByte(dat&0xF0); //高四位
- SendByte((dat&0x0F)<<4); //低四位
- }
-
- void display(uint8 x_add, char * word) //液晶顯示函數(shù)
- {
- SendCmd(x_add); //1xxx,xxxx設(shè)定DDRAM7位地址xxx,xxxx到地址計(jì)數(shù)器AC
- while(*word!='')
- {
- SendDat(*(word++));
- }
- }
-
- void init_lcd(void) //初始化 12864_LCD
- {
-
- delay(100);
- SendCmd(0x30); //功能設(shè)置,一次送8位數(shù)據(jù),基本指令集
- SendCmd(0x0C); //0000,1100 整體顯示,游標(biāo)off,游標(biāo)位置off
- SendCmd(0x01); //0000,0001 清DDRAM
- SendCmd(0x02); //0000,0010 DDRAM地址歸位
- }
-
- /****************以下是串口程序***************************************/
- void DelayNS (uint32 dly)
- {
- uint32 i;
-
- for ( ; dly>0; dly--)
- for (i=0; i<5000; i++);
- }
- /* 定義串口模式設(shè)置數(shù)據(jù)結(jié)構(gòu) */
- typedef struct UartMode
- {
- uint8 datab; // 字長度,5/6/7/8可選
- uint8 stopb; // 停止位,1/2可選
- uint8 parity; // 奇偶校驗(yàn)位,0-無校驗(yàn),1-奇校驗(yàn),2-偶校驗(yàn)
- }UARTMODE;
-
- void UART0_SendByte (uint8 dat)
- {
- U0THR = dat; // 要發(fā)送的數(shù)據(jù)
- }
-
- void UART0_SendBuf (char *ptr)
- {
- while(*ptr != '')
- {
- UART0_SendByte(*ptr++);
- }
- while ((U0LSR & 0x20) == 0); // 等待數(shù)據(jù)發(fā)送完畢
- }
-
- int8 UART0_Init (uint32 baud, UARTMODE set)
- {
- uint32 bak;
-
- /* 參數(shù)過濾 */
- if ((baud ==0 ) || (baud > 115200)) return (0);
- if ((set.datab <5) || (set.datab > 8)) return (0);
- if ((set.stopb == 0) || (set.stopb > 2)) return (0);
- if (set.parity > 4) return (0);
-
- /* 設(shè)置串口波特率 */
- U0LCR = 0x80; // DLAB = 1
- bak = (Fpclk >> 4) / baud;
- U0DLM = bak >> 8;
- U0DLL = bak & 0xFF;
-
- /* 設(shè)置串口模式 */
- bak = set.datab - 5; // 設(shè)置字長
- if (set.stopb == 2) bak |= 0x04; // 判斷是否為2位停止位
-
- if (set.parity != 0)
- {
- set.parity = set.parity - 1;
- bak |= 0x08;
- }
- bak |= set.parity << 4; // 設(shè)置奇偶校驗(yàn)
- U0LCR = bak;
- U0FCR = 0x01; // 使能FIFO,并設(shè)置觸發(fā)點(diǎn)為8字節(jié)
- U0IER = 0x01; // 允許RBR中斷,即接收中斷
- return (1);
- }
- void __irq IRQ_UART0 (void)
- {
-
- if ((U0IIR & 0x0F) == 0x04) // 設(shè)置接收到新的數(shù)據(jù)標(biāo)志
- rcv_new = 1;
- rcv_buf = U0RBR; // 讀取FIFO的數(shù)據(jù),并清除中斷
- if(rcv_buf=='1')
- UART0_SendBuf(str1);
- else if(rcv_buf=='2')
- UART0_SendBuf(str2);
- else if(rcv_buf=='3')
- UART0_SendBuf(tem);
- VICVectAddr = 0x00; // 中斷處理結(jié)束
- }
- /****************以下是蜂鳴器程序***************************************/
- void beep(void)
- {
- uint8 i;
- for(i=0;i<3;i++)
- {
- DelayNS(100);
- IO0CLR|=BEEP;
- DelayNS(100);
- IO0SET|=BEEP;
- }
- }
-
-
- /****************以下是AD處理程序***************************************/
-
-
- uint32 ADC_vol(uint8 channel)
- {
- int flag;
- uint32 ADC_CE[20],ADC_Flag=0;
- for(flag=0;flag<20;flag++)
- {
- switch(channel)
- {
- case 1:AD0CR = (AD0CR&0x00FFFF00)|0x01|(1 << 24);break; // 設(shè)置通道1,并進(jìn)行第一次轉(zhuǎn)換
- case 2:AD0CR = (AD0CR&0x00FFFF00)|0x02|(1 << 24);break; // 設(shè)置通道2,并進(jìn)行第一次轉(zhuǎn)換
- }
- while ((AD0DR & 0x80000000) == 0); // 等待轉(zhuǎn)換結(jié)束
- AD0CR |= 1 << 24; // 再次啟動(dòng)轉(zhuǎn)換
- while ((AD0DR & 0x80000000) == 0); // 等待轉(zhuǎn)換結(jié)束
- ADC_CE[flag] = AD0DR; // 讀取ADC結(jié)果
- ADC_CE[flag] = (ADC_CE[flag] >> 6) & 0x3ff;
- ADC_CE[flag] = ADC_CE[flag] * 3280;
- ADC_CE[flag]=ADC_CE[flag]/1024;
- ADC_Flag+=ADC_CE[flag];
- }
- ADC_Flag=ADC_Flag/20;
- return ADC_Flag;
- }
- void deal(char *p,uint32 ADC_Data)
- {
- if(ADC_Data<10000)
- {
- p[0]=ADC_Data/1000+0x30;
- p[1]='.';
- p[2]=ADC_Data%1000/100+0x30;
- p[3]=ADC_Data%1000%100/10+0x30;
- p[4]='V';
- p[5]='';
- }
- else
- {
- p[0]=ADC_Data/10000+0x30;
- p[1]=ADC_Data%10000/1000+0x30;
- p[2]='.';
- p[3]=ADC_Data%10000%1000/100+0x30;
- p[4]=ADC_Data%10000%1000%100/10+0x30;
- p[5]='V';
- }
- }
-
- /*****************************以下為主程序*****************************************************************/
-
- int main (void)
- {
- UARTMODE set;
- int start=0;
- int temp;
- uint32 ADC_Data;
- set.datab = 8;
- set.stopb = 1;
- set.parity = 0;
-
- PINSEL0 = 0xFFFF00005; // 設(shè)置I/O連接
- PINSEL1 = 0x15400000; // 功能選擇
- PINSEL2 = PINSEL2 & (~0x08);
- IO0SET = 0XFFFFFFFF;
- IO0DIR |= 0X00000FFF;
- IO1SET = 0XFFFF0000;
- IO1DIR = 0XFFFF0000; // 設(shè)置LED1控制口為輸出
- UART0_Init(115200, set); // 串口初始化
- init_lcd(); //液晶初始化
- display(0x80,kcsj);
- display(0x90,tonga);
- display(0x88,tongb);
- display(0x98,T);
- IRQEnable(); // 使能IRQ中斷
- /*使能UART0中斷*/
- VICIntSelect = 0x00000000; // 設(shè)置所有的通道為IRQ中斷
- VICVectCntl0 = 0x20 | 0x06; // UART0分配到IRQ slot0,即最高優(yōu)先級(jí)
- VICVectAddr0 = (uint32)IRQ_UART0; // 設(shè)置UART0向量地址
- VICIntEnable = 1 << 0x06; // 使能UART0中斷
-
- AD0CR = (1 << 1) | // SEL=8,選擇通道3
- ((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,正常工作模式
- (0 << 22) | // TEST1:0=00,正常工作模式
- (1 << 24) | // START=1,直接啟動(dòng)ADC轉(zhuǎn)換
- (0 << 27); // 直接啟動(dòng)ADC轉(zhuǎn)換時(shí),此位無效
- DelayNS(10);
- ADC_Data = AD0DR; // 讀取ADC結(jié)果,并清除DONE標(biāo)志位
- while (1)
- {
-
- temp=Do1Convert1();
- tem[0]=temp/100000+0x30;
- tem[1]=temp%100000/10000+0x30;
- tem[2]='';
- display(0X9b,tem);
-
- if ( (IO0PIN & KEY1) == 0)
- {
- DelayNS(10);
- if((IO0PIN & KEY1) ==0)
- {
- while((IO0PIN & KEY1) ==0);
- start=1;
- }
- }
-
- if((IO0PIN & KEY2) == 0)
- {
- DelayNS(10);
- if((IO0PIN & KEY2)==0)
- {
- while((IO0PIN & KEY2)==0);
- start=0;
- }
- }
- if(start==1)
- {
- ADC_Data=ADC_vol(1); //通道1
- if(ADC_Data>3200)
- {
- beep();
- IO1SET|=LED1;
- }
- else IO1CLR|=LED1;
- deal(str1,ADC_Data);
- display(0x93,str1);
-
-
- ADC_Data=ADC_vol(2); //通道2
- if(ADC_Data>3015)
- {
- beep();
- IO1SET|=LED1;
- ADC_Data=ADC_Data*10/3;
- }
- else if(2700<adc_data<=3015)
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
-
復(fù)制代碼
完整設(shè)計(jì)報(bào)告下載(word格式 可編輯):
基于ARM2331的多路雙通道數(shù)據(jù)采集報(bào)告.doc
(1.51 MB, 下載次數(shù): 22)
2017-7-12 18:13 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|