全國大賽帆板控制系統(tǒng)最新_第1頁
全國大賽帆板控制系統(tǒng)最新_第2頁
全國大賽帆板控制系統(tǒng)最新_第3頁
全國大賽帆板控制系統(tǒng)最新_第4頁
全國大賽帆板控制系統(tǒng)最新_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、目錄一、 引言1二、系統(tǒng)方案1(一)方案論證與比較11、主控電路12、角度傳感器的選用23、按鍵選用24、顯示25、電機(jī)的驅(qū)動26、風(fēng)扇37、電源3(二) 總體設(shè)計方案3三、理論分析與計算3(一)距離計算3(二)角度計算4(三)控制算法4四、電路與程序設(shè)計4(一)硬件設(shè)計41、總體電路圖(見附錄1)42、主控電路43、風(fēng)扇控制54、顯示模塊55、聲光提示模塊66、傳感器模塊6(二)軟件設(shè)計61、風(fēng)扇控制算法設(shè)計62、聲光提示算法設(shè)計73、系統(tǒng)流程圖7五、系統(tǒng)測試7(一)測試方法與儀器7(二)測試結(jié)果81、功能要求測試82、按鍵控制風(fēng)力等級測試8(三)測試結(jié)果分析9六、設(shè)計總結(jié)9參考文獻(xiàn)9附錄1

2、 硬件原理圖10附錄2 程序代碼11帆板控制系統(tǒng)摘要:報告介紹基于STC89C52單片機(jī)的帆板角度控制系統(tǒng),系統(tǒng)可以利用風(fēng)扇控制裝置對帆板角度進(jìn)行控制,并通過LCD12864實(shí)時顯示角度變化。還可依據(jù)設(shè)定的帆板角度信息智能控制風(fēng)扇轉(zhuǎn)速,在很短時間內(nèi)(5秒以內(nèi))動態(tài)調(diào)整帆板擺角,同時實(shí)時顯示帆板角度等信息。系統(tǒng)包括:單片機(jī)主控模塊、角度信號采集模塊、鍵盤輸入模塊、顯示模塊、電源模塊、風(fēng)扇電機(jī)驅(qū)動模塊。系統(tǒng)主控模塊采用性價比高的單片機(jī)最小系統(tǒng);選用ADXL345加速度傳感器完成系統(tǒng)角度信號采集功能;利用LCD12864實(shí)時顯示角度變化的信息,5*6矩陣鍵盤完成風(fēng)力等級和角度設(shè)定的輸入;系統(tǒng)電源模塊

3、采用兩路穩(wěn)壓輸出電路(5v、15v),提供控制系統(tǒng)與風(fēng)扇電機(jī)的工作電源;風(fēng)扇電機(jī)采用L298N模塊驅(qū)動。本系統(tǒng)制作成本較低、工作性能控制穩(wěn)定,能很好達(dá)到設(shè)計要求。關(guān)鍵詞: STC89C52;加速度傳感器;LCD12864;L298N一、 引言單片機(jī)又稱單片微控制器,單片機(jī)具有體積小、功耗低、控制功能強(qiáng)、擴(kuò)展靈活、微型化和使用方便等優(yōu)點(diǎn),廣泛應(yīng)用于儀器儀表中,結(jié)合不同類型的傳感器,可實(shí)現(xiàn)諸如電壓、功率、頻率、濕度、溫度、流量、速度、厚度、角度、長度、硬度等物理量的測量。本系統(tǒng)就是以單片機(jī)為核心建立起來的,要實(shí)現(xiàn)對帆板轉(zhuǎn)角大小的控制,其歸根就是對風(fēng)扇的控制,帆板的轉(zhuǎn)角隨著風(fēng)扇風(fēng)力的變化而變化,角度

4、傳感器給單片機(jī)不同的角度檢測信號,經(jīng)單片機(jī)處理后在LCD液晶上顯示,同時給出聲光提示。系統(tǒng)體現(xiàn)了模塊化的設(shè)計理念,將單片機(jī)和各個器件結(jié)合在一起,完成系統(tǒng)化的設(shè)計,充分發(fā)揮了單片機(jī)的可靠性、可操作性和強(qiáng)大處理功能。二、系統(tǒng)方案(一)方案論證與比較1、主控電路【方案一】采用可編程邏輯器件FPGA作為控制器。FPGA可以實(shí)現(xiàn)各種復(fù)雜的邏輯功能,IO資源豐富,易于進(jìn)行功能擴(kuò)展。但本系統(tǒng)不需要復(fù)雜的邏輯功能,且從使用、功耗及經(jīng)濟(jì)的角度考慮我們放棄了此方案。【方案二】STC89C52 單片機(jī)采用STC89C52 單片機(jī)作為主控器,其算術(shù)功能強(qiáng),軟件編程簡潔靈活、自由度大 ,可用軟件編程實(shí)現(xiàn)各種邏輯控制功能

5、,且其功耗低、技術(shù)成熟,成本低廉。本系統(tǒng)主要是進(jìn)行信號的處理以及風(fēng)扇電機(jī)的控制。綜合考慮,本系統(tǒng)設(shè)計的功能依靠51單片機(jī)均可實(shí)現(xiàn),故采用方案二。2、角度傳感器的選用【方案一】用UZZ9001Y與KMZ41連接構(gòu)成一個角度測量系統(tǒng)。電路組成繁瑣,制作較困難,穩(wěn)定性較差?!痉桨付績A角傳感器。該集成芯片為專用的水平傾角測量芯片,具有體積小、靈敏度高等優(yōu)點(diǎn),但是輸出為模擬信號,需要用到DA轉(zhuǎn)換,操作間為復(fù)雜,且占用I/O口較多,不利于本統(tǒng)功能模塊的操作?!痉桨溉坑肁DXL345數(shù)字加速度傳感器。ADXL345是一款小而薄的超低功耗的3軸加速度計,可測量帆板在斜面所受重力加速度在斜面上的分量,進(jìn)而轉(zhuǎn)

6、換成傾斜角,測量精度較高。ADXL345輸出信號為數(shù)字信號,避免了A/D轉(zhuǎn)換,操作簡單;此外ADXL345只需用到兩個I/O口,占用資源少,能滿足本設(shè)計的要求。本系統(tǒng)選擇了第三種方案。3、按鍵選用【方案一】采用獨(dú)立鍵盤。多個使用時,線路連接不便,操作繁瑣。【方案二】采用5*6的距陣鍵盤,可輸入的值比較多,可設(shè)定的功能也多。在本系統(tǒng)中需要多個鍵,系統(tǒng)選擇了第二種方案。4、顯示【方案一】使用數(shù)碼管顯示。要完成功能電路的顯示需要多個數(shù)碼管,此方案占用I/O口多,連接不便,顯示效果差,功耗大?!痉桨付坑肔CD1602液晶顯示。1602是一種專門用于顯示字母、數(shù)字、符號等點(diǎn)陣式,1602分為上下2行,

7、每行顯示16個字符。驅(qū)動簡單,但不能顯示漢字?!痉桨溉坑肔CD12864液晶顯示。LCD12864功能強(qiáng)大,不僅能顯示字母、數(shù)字、符號,還可以顯示漢字和圖形,最多可顯示4行,每一行最多顯示8個中文,16個半寬字體。(最好選用帶字庫的,方便編寫程序。)LCD12864和LCD1602使用方法類似,驅(qū)動簡單,耗電量小,無輻射危險,顯示直觀、抗干擾能力強(qiáng),但體積較大。本系統(tǒng)選擇了第三種方案。5、電機(jī)的驅(qū)動【方案一】用分立w元件構(gòu)成的H橋電路利用分立三極管元件構(gòu)成的H橋電路結(jié)構(gòu)簡單,但驅(qū)動能力有限,所帶負(fù)載不可過大?!痉桨付坎捎肔298N集成H橋芯片。在L298N集成芯處中集成了兩套H橋電路,可直

8、接驅(qū)動兩路直流電機(jī),利用單片機(jī)產(chǎn)生的PWM信號,可方便地進(jìn)行電機(jī)調(diào)速?!痉桨溉坑肬LN2003功率放大器件。ULN2003 是高耐壓、大電流達(dá)林頓陳列,由七個硅NPN 達(dá)林頓管w組成。通過使用不同的放大電路和不同參數(shù)的器件,可達(dá)到不同的放大的要求,放大后能得到較大的功率。本系統(tǒng)設(shè)計采用方案二。6、風(fēng)扇【方案一】用普通的散熱風(fēng)扇。風(fēng)力小,風(fēng)力流失大,很難達(dá)到系統(tǒng)要求。【方案二】用帶通風(fēng)通道的風(fēng)扇。風(fēng)力集中,流失小,能很好的吹動帆板。本系統(tǒng)設(shè)計采用方案二。7、電源【方案一】自制穩(wěn)壓電源。采用變壓器與三端穩(wěn)壓器相結(jié)合,使220V電壓經(jīng)變壓器變壓,降為系統(tǒng)所需電壓,過整流橋并利用兩個大的電容濾波,從

9、而得到較為穩(wěn)定的直流電壓。自制電源體積大,需接入220V電壓,電壓不穩(wěn)定,使用不方便?!痉桨付咳龎K6V蓄電池串聯(lián)供電。直接選用所需型號蓄電池,能量足,供電穩(wěn)定,高低溫適應(yīng)性強(qiáng)。本系統(tǒng)選用第二種方案。(二) 總體設(shè)計方案系統(tǒng)功能的實(shí)現(xiàn),以STC89C52單片機(jī)為核心,在單片機(jī)系統(tǒng)實(shí)現(xiàn)的輸入輸出和顯示功能的基礎(chǔ)上,由單片機(jī)的內(nèi)置邏輯和運(yùn)算功能,加上外圍電路得以實(shí)現(xiàn)。根據(jù)設(shè)計任務(wù)要求,該電路的總體框圖可分為幾個基本的模塊,總體框圖如下圖21所示:圖21總體框圖三、理論分析與計算(一)距離計算帆板尺寸:長 15cm,寬 10cm。風(fēng)扇到帆板的距離:715cm。本系統(tǒng)帆板轉(zhuǎn)軸直徑0.5cm(二)角度計

10、算帆板轉(zhuǎn)角:060度。帆板轉(zhuǎn)角測量原理:風(fēng)扇吹動帆板轉(zhuǎn)動,產(chǎn)生帆板角度變化,利用ADXL345數(shù)字加速度傳感器測出三維坐標(biāo)x 、y 、z的變化,將加速度傳感器固定在帆板上,從而通過固定y,利用x 、z的關(guān)系求出角度。角度=(180*atan(temp z/temp x)/3.14。角度的測量范圍是090°,可以滿足系統(tǒng)要求。(三)控制算法首先利用鍵盤控制風(fēng)扇的轉(zhuǎn)速,使帆板能夠偏轉(zhuǎn)一定的角度,再利用加速度傳感器測出帆板的角度,送顯示電路顯示。具體控制算法采用C語言編程實(shí)現(xiàn),具體程序代碼見附錄2。四、電路與程序設(shè)計(一)硬件設(shè)計1、總體電路圖(見附錄1)2、主控電路系統(tǒng)采用STC89C5

11、2單片機(jī)構(gòu)成主控制電路,電路如圖41所示:圖41主控電路3、風(fēng)扇控制風(fēng)扇電機(jī)選用L298N模塊驅(qū)動,并由4*4按鍵矩陣控制PWM,改變電機(jī)速度,達(dá)到控制風(fēng)扇風(fēng)力大小的目標(biāo)。L298N驅(qū)動模塊如下圖42所示:圖42風(fēng)扇控制4、顯示模塊使用LCD12864顯示,如下圖43所示:圖43顯示模塊5、聲光提示模塊圖44聲光提示模塊6、傳感器模塊圖45傳感器模塊(二)軟件設(shè)計1、風(fēng)扇控制算法設(shè)計風(fēng)扇控制算法如下圖46所示:圖46風(fēng)扇控制算法2、聲光提示算法設(shè)計聲光提示算法如下圖47所示:圖47聲光提示算法3、系統(tǒng)流程圖整個系統(tǒng)程序流程圖如圖48所示:圖48系統(tǒng)流程圖五、系統(tǒng)測試(一)測試方法與儀器利用四位

12、半數(shù)字萬用表、秒表、量角器等設(shè)備通電對系統(tǒng)進(jìn)行測試。(二)測試結(jié)果1、功能要求測試序號指標(biāo)(目標(biāo)值)實(shí)測值1顯示范圍為0-60°,實(shí)時顯示。0-66°2分辨力為2°,絕對誤差5°。分辨1°誤差3°3使帆板轉(zhuǎn)角穩(wěn)定在45°±5°范圍內(nèi),制過程在10 秒內(nèi)完成,實(shí)時顯示,并由聲光提示5秒4在5 秒內(nèi)達(dá)到設(shè)定值5秒表 12、按鍵控制風(fēng)力等級測試 風(fēng)力等級角度W角度W角度W00°0°0°51°1°1°109°10°11°15

13、23°22°23°2025°29°31°2537°37°39°3040°39°40°3547°46°43°4049°49°51°4551°52°53°5055°56°52°5555°57°54°6058°59°57°6557°60°58°7060°62

14、6;59°7561°63°60°8064°63°64°8565°64°65°9065°65°65°9565°65°65°9966°66°66°表 2(三)測試結(jié)果分析本系統(tǒng)總體性能良好。但是也有不足的地方,由于帆板擺動大的問題,當(dāng)系統(tǒng)工作時,影響到轉(zhuǎn)角實(shí)際測量的精確性。這個地方有待改進(jìn)。六、設(shè)計總結(jié)本方案的系統(tǒng)設(shè)計基本符合2011年全國大學(xué)生電子設(shè)計競賽試題(F題)的要求。通過本次設(shè)計,深深感到理論與實(shí)踐之

15、間的差距。很多知識點(diǎn)在理論上完全理解了,但到具體的電路設(shè)計與實(shí)現(xiàn)中,會出現(xiàn)很多一時無法理解的問題,要通過不斷測試修改軟硬件,才能用理論來指導(dǎo)實(shí)踐,進(jìn)一步深入理解理論。參考文獻(xiàn)1 郭天祥. 51單片機(jī)C語言教程. 北京:電子工業(yè)出版社,2009年.2 閻石. 數(shù)字電子技術(shù)基礎(chǔ)(第四版). 北京: 高等教育出版社,1997年.3 李建忠單片機(jī)原理及應(yīng)用西安:西安電子科技大學(xué)出版社,2002年38附錄1 硬件原理圖附錄2 程序代碼主函數(shù)/*/#include<reg52.h>#include "control.h"#include "12864.h"

16、;#include "ADXL.H"#define uchar unsigned char#define uint unsigned intsbit key=P27;void timer_init()TMOD=0X10;TH1=(65535-100)/256;TL1=(65535-100)%256;EA=1;ET1=1;TR1=1;void main() char devid;timer_init();lcd_12864_init();Init_ADXL345(); /初始化ADXL345devid=Single_Read_ADXL345(0X00);/讀出的數(shù)據(jù)為0XE5

17、,表示正確while(1) adxl345(); if(key=0) keyscan_1(); else keyscan(); /*/Controh.H文件#ifndef _contral_h_ #define _contral_h_extern signed char pwm;extern void delayms(unsigned int xms);extern void keyscan();extern void keyscan_1();#endif/*/Control.C文件#include<reg51.h>#include "control.h"#in

18、clude "12864.h"#define uchar unsigned char#define uint unsigned int#define keydata P0sbit A1=P24;sbit A2=P25;sbit ENA=P26;signed int count=0; signed char pwm=0;signed char anjian=0;uchar numshi=0;uchar numge=0;void delayms(unsigned int xms)unsigned int i,j;for(i=0;i<xms;i+)for(j=0;j<

19、110;j+); void pwm_dis()numshi=pwm/10;numge=pwm%10;write_12864_data(0x30+numshi);write_12864_data(0x30+numge);void anjian_dis()numshi=anjian/10;numge=anjian%10;write_12864_data(0x30+numshi);write_12864_data(0x30+numge);void keyscan()unsigned char dat=0;unsigned char num=0;keydata=0xfe;dat=keydata;dat

20、=dat&0xf0;while(dat!=0xf0)delayms(5);dat=keydata;dat=dat&0xf0;while(dat!=0xf0)dat=keydata;switch(dat)case 0xee:num=1;break;case 0xde:num=2;break;case 0xbe:num=3;break;case 0x7e:num=4;break;while(dat!=0xf0)dat=keydata;dat=dat&0xf0;keydata=0xfd;dat=keydata;dat=dat&0xf0;while(dat!=0xf0)

21、delayms(5);dat=keydata;dat=dat&0xf0;while(dat!=0xf0)dat=keydata;switch(dat)case 0xed:num=5;break;case 0xdd:num=6;break;case 0xbd:num=7;break;case 0x7d:num=8;break;while(dat!=0xf0)dat=keydata;dat=dat&0xf0;keydata=0xfb;dat=keydata;dat=dat&0xf0;while(dat!=0xf0)delayms(5);dat=keydata;dat=dat

22、&0xf0;while(dat!=0xf0)dat=keydata;switch(dat)case 0xeb:num=9;break;case 0xdb:num=10;break;case 0xbb:num=11;break;case 0x7b:num=12;break;while(dat!=0xf0)dat=keydata;dat=dat&0xf0;keydata=0xf7;dat=keydata;dat=dat&0xf0;while(dat!=0xf0)delayms(5);dat=keydata;dat=dat&0xf0;while(dat!=0xf0)d

23、at=keydata;switch(dat)case 0xe7:num=13;break;case 0xd7:num=14;break;case 0xb7:num=15;break;case 0x77:num=16;break;while(dat!=0xf0)dat=keydata;dat=dat&0xf0;switch(num)case 1:write_12864_addr(1,3);pwm=0;pwm_dis();break;case 2:write_12864_addr(1,3);pwm=10;pwm_dis();break;case 3:write_12864_addr(1,3

24、);pwm=20;pwm_dis();break;case 4:write_12864_addr(1,3);pwm=30;pwm_dis();break;case 5:write_12864_addr(1,3);pwm=40;pwm_dis();break;case 6:write_12864_addr(1,3);pwm=50;pwm_dis();break;case 7:write_12864_addr(1,3);pwm=60;pwm_dis();break;case 8:write_12864_addr(1,3);pwm=70;pwm_dis();break;case 9:write_12

25、864_addr(1,3);pwm=80;pwm_dis();break;case 10:write_12864_addr(1,3);pwm=90;pwm_dis();break;case 11:write_12864_addr(1,3);pwm=99;pwm_dis();break;case 12:write_12864_addr(1,3);pwm=35;pwm_dis();break;case 13:write_12864_addr(1,3);pwm=pwm+5;pwm_dis();break;case 14:write_12864_addr(1,3);pwm=pwm-5;pwm_dis(

26、);break;case 15:write_12864_addr(1,3);pwm=pwm+1;pwm_dis();break;case 16:write_12864_addr(1,3);pwm=pwm-1;pwm_dis();break;void keyscan_1()unsigned char dat=0;unsigned char num=0;keydata=0xfe;dat=keydata;dat=dat&0xf0;while(dat!=0xf0)delayms(5);dat=keydata;dat=dat&0xf0;while(dat!=0xf0)dat=keydat

27、a;switch(dat)case 0xee:num=1;break;case 0xde:num=2;break;case 0xbe:num=3;break;case 0x7e:num=4;break;while(dat!=0xf0)dat=keydata;dat=dat&0xf0;keydata=0xfd;dat=keydata;dat=dat&0xf0;while(dat!=0xf0)delayms(5);dat=keydata;dat=dat&0xf0;while(dat!=0xf0)dat=keydata;switch(dat)case 0xed:num=5;b

28、reak;case 0xdd:num=6;break;case 0xbd:num=7;break;case 0x7d:num=8;break;while(dat!=0xf0)dat=keydata;dat=dat&0xf0;keydata=0xfb;dat=keydata;dat=dat&0xf0;while(dat!=0xf0)delayms(5);dat=keydata;dat=dat&0xf0;while(dat!=0xf0)dat=keydata;switch(dat)case 0xeb:num=9;break;case 0xdb:num=10;break;ca

29、se 0xbb:num=11;break;case 0x7b:num=12;break;while(dat!=0xf0)dat=keydata;dat=dat&0xf0;keydata=0xf7;dat=keydata;dat=dat&0xf0;while(dat!=0xf0)delayms(5);dat=keydata;dat=dat&0xf0;while(dat!=0xf0)dat=keydata;switch(dat)case 0xe7:num=13;break;case 0xd7:num=14;break;case 0xb7:num=15;break;case

30、0x77:num=16;break;while(dat!=0xf0)dat=keydata;dat=dat&0xf0;switch(num)case 1:write_12864_addr(3,7);anjian=0;anjian_dis();break;case 2:write_12864_addr(3,7);anjian=10;anjian_dis();break;case 3:write_12864_addr(3,7);anjian=20;anjian_dis();break;case 4:write_12864_addr(3,7);anjian=30;anjian_dis();b

31、reak;case 5:write_12864_addr(3,7);anjian=40;anjian_dis();break;case 6:write_12864_addr(3,7);anjian=50;anjian_dis();break;case 7:write_12864_addr(3,7);anjian=60;anjian_dis();break;case 8:write_12864_addr(3,7);anjian=anjian+1;anjian_dis();break;case 9:write_12864_addr(3,7);anjian=anjian+2;anjian_dis()

32、;break;case 10:write_12864_addr(3,7);anjian=anjian+3;anjian_dis();break;case 11:write_12864_addr(3,7);anjian=anjian+4;anjian_dis();break;case 12:write_12864_addr(3,7);anjian=anjian+5;anjian_dis();break;case 13:write_12864_addr(3,7);anjian=anjian+6;anjian_dis();break;case 14:write_12864_addr(3,7);anj

33、ian=anjian+7;anjian_dis();break;case 15:write_12864_addr(3,7);anjian=anjian+8;anjian_dis();break;case 16:write_12864_addr(3,7);anjian=anjian+9;anjian_dis();break; void timer0() interrupt 3A1=1;A2=0;TH1=(65535-100)/256;TL1=(65535-100)%256;count+;if(count>=100)count=0;if(count<pwm)ENA=1;elseENA=

34、0;/*/12864.H文件#ifndef _12864_h_ #define _12864_h_/extern void lcd_writestring(unsigned char *str);/向lcd發(fā)送一個字符串,長度64字符之內(nèi)。extern void write_12864_cmd(unsigned char cmd ); /向液晶寫數(shù)據(jù)extern void write_12864_data(unsigned char dat); /向液晶寫數(shù)據(jù)extern void lcd_12864_init(); /初始化液晶extern void write_12864_addr(uns

35、igned char x ,unsigned char y);/寫液晶的地址extern void delayms_12864(unsigned char xms); /延時函數(shù)/extern void write_12864_addr(unsigned char x ,unsigned char y);/寫液晶的地址 #endif/*/12864.C文件/*12864指令:0x01/將DDRAM填滿“20H”,并且設(shè)定DDRAM的地址計數(shù)器(AC)到“00H”0x02/設(shè)定DDRAM的地址計數(shù)器 (AC)到“00H”, 并且將游標(biāo)移到開頭原點(diǎn)位置;這個指令并不改變DDRAM的內(nèi)容0x04/讀

36、寫后,AC減一,向左寫0x06/讀寫后,AC加一,向右寫0x10/光標(biāo)向左移動,AC減一0x14/光標(biāo)向右移動,AC加一0x18/顯示向左移動,光標(biāo)跟著移動 0x1c/顯示向右移動,光標(biāo)跟著移動0x0c/整體顯示開,游標(biāo)關(guān),游標(biāo)位置反白不允許0x0e/整體顯示開,游標(biāo)開,游標(biāo)位置反白不允許0x0f/整體顯示開,游標(biāo)開,游標(biāo)位置反白允許0x08/關(guān)顯示,關(guān)光標(biāo),關(guān)光標(biāo)閃爍0x30/8位數(shù)據(jù)端口,基本指令操作0x34/8位數(shù)據(jù)總線,擴(kuò)展指令集0x20/4位數(shù)據(jù)總線,基本指令集0x24/4位數(shù)據(jù)總線,擴(kuò)展指令集 */#include<reg52.h>#include "1286

37、4.h"#include "control.h"#define lcd_data P1 /定義液晶數(shù)據(jù)端口sbit lcd_PSB=P37; /液晶串行數(shù)據(jù)和并行數(shù)據(jù)選擇端sbit lcd_EN=P34; /液晶en使能端sbit lcd_RS=P35; /液晶的rssbit lcd_RW=P36;/液晶的rw讀寫端口void delayms_12864(unsigned char xms) /延時函數(shù)unsigned char i,j;for(i=0;i<xms;i+)for(j=0;j<110;j+);bit check_12864_busy()/

38、檢測液晶忙不忙 bit result=0; lcd_RS=0; lcd_RW=1; lcd_EN=1; delayms_12864(3); result=(bit)(lcd_data&0x80); /取出數(shù)據(jù)端口的最高位 lcd_EN=0; return result;void write_12864_cmd(unsigned char cmd ) /寫指令 while(check_12864_busy(); /檢測液晶忙不忙 lcd_RS=0; /rs=0為寫命令lcd_EN=0;lcd_RW=0;lcd_data=cmd; /把指令給數(shù)據(jù)端口delayms_12864(1);lcd

39、_EN=1;delayms_12864(1);lcd_EN=0; void write_12864_data(unsigned char dat) /向液晶寫數(shù)據(jù) while(check_12864_busy(); /檢測液晶忙不忙 lcd_RS=1; /rs=1為寫數(shù)據(jù)lcd_EN=0;lcd_RW=0;lcd_data=dat; /把數(shù)據(jù)給數(shù)據(jù)端口delayms_12864(1);lcd_EN=1;delayms_12864(1);lcd_EN=0; void lcd_12864_init() /初始化液晶lcd_PSB=1;write_12864_cmd(0x30);delayms_12

40、864(5);write_12864_cmd(0x0c);delayms_12864(5);write_12864_cmd(0x01);delayms_12864(5); void write_12864_addr(unsigned char x ,unsigned char y)/寫液晶的地址 unsigned char addr;if(x=0) /如果x=0,地址為液晶第一行x=0x80; else if(x=1) /如果x=1,地址為液晶第二行x=0x90;else if(x=2)/如果x=2,地址為液晶第三行x=0x88;else if(x=3) /如果x=3,地址為液晶第四行x=0x

41、98;addr=x+y;write_12864_cmd(addr); /*/ADXL.H文件#ifndef _ADXL_h_ #define _ADXL_h_/extern void jiaodu();/角度轉(zhuǎn)換/extern void display_x(); /x軸/extern void display_y(); /y軸/extern void display_z();/z軸extern void Init_ADXL345();/延時函數(shù)extern unsigned char Single_Read_ADXL345(unsigned char REG_Address);/extern

42、void Multiple_read_ADXL345(void);extern void adxl345(); #endif/*/ADXL.C文件#include <REG51.H>#include <math.h> /Keil library #include <stdio.h> /Keil library#include <INTRINS.H>#include "12864.h"#define uchar unsigned char#define uint unsigned int#define DataPort P1 /

43、LCD1602數(shù)據(jù)端口sbit SCL=P20; /IIC時鐘引腳定義sbit SDA=P21; /IIC數(shù)據(jù)引腳定義sbit LED=P22;#defineSlaveAddress 0xA6 /定義器件在IIC總線中的從地址,根據(jù)ALT ADDRESS地址引腳不同修改 /ALT ADDRESS引腳接地時地址為0xA6,接電源時地址為0x3Atypedef unsigned char BYTE;typedef unsigned short WORD;BYTE BUF8; /接收數(shù)據(jù)緩存區(qū) uchar ge,shi,bai,qian,wan; /顯示變量int dis_data; /變量void delay(unsigned int k);void InitLcd(); /初始化lcd1602void Init_ADXL345(void); /初始化ADXL345void WriteDataLCM(uchar dataW);void WriteCommandLCM(uchar CMD,uchar Attribc);/void DisplayOneChar(uc

溫馨提示

  • 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

提交評論