基于89C52智能遙控繪圖小車設(shè)計(jì)_第1頁
基于89C52智能遙控繪圖小車設(shè)計(jì)_第2頁
基于89C52智能遙控繪圖小車設(shè)計(jì)_第3頁
基于89C52智能遙控繪圖小車設(shè)計(jì)_第4頁
基于89C52智能遙控繪圖小車設(shè)計(jì)_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

通信工程專業(yè)單片機(jī)系統(tǒng)課程設(shè)計(jì)基于89C52智能遙控繪圖小車學(xué)院:信息與通信工程學(xué)院p(系)專業(yè):通信工程 p學(xué)生姓名:解鵬飛楊爽p學(xué)號(hào):20140832092014136323 p指導(dǎo)教師:陳宏巍p完成日期:2016.5.20p大連民族大學(xué)

摘要隨著電子業(yè)的發(fā)展自動(dòng)化已不再是一個(gè)新鮮的話題無人駕駛的遙控小汽車也必將進(jìn)入實(shí)用階段智能作為現(xiàn)代的新發(fā)明是以后的發(fā)展方向他可以按照預(yù)先設(shè)定的模式在一個(gè)環(huán)境里自動(dòng)的運(yùn)作不需要人為的管理可應(yīng)用于科學(xué)勘探等等的用途。本系統(tǒng)模擬基于51單片機(jī)的遙控小車的設(shè)計(jì)。89C52單片機(jī)是一款八位單片機(jī),他的易用性和多功能性受到了廣大使用者的好評(píng)。這里介紹的是如何用89C52單片機(jī)來實(shí)現(xiàn)無線遙控小車的畢業(yè)設(shè)計(jì),該設(shè)計(jì)是結(jié)合實(shí)際應(yīng)用而確定的設(shè)計(jì)類課題。本系統(tǒng)以設(shè)計(jì)題目的要求為目的,采用89C52單片機(jī)為控制核心,采用L298N對(duì)小車電機(jī)的控制,利用以HC05無線遙控模塊裝置,本次設(shè)計(jì)基于完備的軟硬件系統(tǒng),很好的實(shí)現(xiàn)了電動(dòng)小汽車的前后行進(jìn),特定路徑的行駛,以及停車。整個(gè)系統(tǒng)的電路結(jié)構(gòu)簡單,可靠性能高。實(shí)驗(yàn)測試結(jié)果滿足要求。關(guān)鍵詞:單片機(jī)無線遙控AbstractAlongwiththedevelopmentofelectronic,automationisnotafreshwordanymore,andno-mancontrolledcarswillberealized.Thenewinventionofmodernintelligence,isafutureofdevelopment,hecanfollowthepatternsetinadvanceinanenvironmentwhereautomaticoperation,nohuman'smanagement,usedinscientificexplorationandsoon.Smartelectriccarisoneofexpression.Thatsystemisbasedonthedesignof51MCUcontrolledcar.89C51MCUiseight-figuremicrocontroller,whichreceiveshighpraisefromtheusersbecauseofitseasyuseandversatility.Thisgraduationdesignintroduceshow89C51MCUrealizetheremotecontrolofthecaracombinationofthepracticalapplicationanddesign.Thissystemdesignsforthepurposeofthetopicrequest,using89C51MCUascontrolcore,thecarmotorcontrolbyL298NandwirelessremotecontrolwhichchipPT2262/2272device,withtheelectriccar,driving,andtheparticularpathpark.Thewholesystemofthecircuitstructureissimpleandreliable.Keywords:MCUWirelessremotecontrol目錄1.設(shè)計(jì)背景及要求……………..11.1研究背景 11.3設(shè)計(jì)要求 12系統(tǒng)方案設(shè)計(jì)……………….12.1系統(tǒng)方案框圖………………..……….12.2方案分析………………..…………….33.系統(tǒng)硬件電路設(shè)計(jì)…………..33.1單片機(jī)最小系統(tǒng)……………………...34.系統(tǒng)軟件設(shè)計(jì)………………..44.1STC89C52程序………..……..………54.2手機(jī)藍(lán)牙app程序…………………..125.結(jié)論…………………………376.參考文獻(xiàn)……………….…………………...37PAGE2–PAGE38–1設(shè)計(jì)背景及要求1.1研究背景智能小車?yán)脝纹瑱C(jī)STC89C52作為控制核心,使用藍(lán)牙無線收發(fā)模塊,遙控小車的運(yùn)動(dòng)軌跡,用單片機(jī)輸入/輸出接口控制直流電機(jī)方向、速度,模塊化結(jié)構(gòu)保證了小車成為一個(gè)可靠整體,軟件采用C語言編程,完成小車所要實(shí)現(xiàn)的功能。1.2設(shè)計(jì)要求以單片機(jī)為控制中心,實(shí)現(xiàn)小車的前進(jìn)、后退、左轉(zhuǎn)、右轉(zhuǎn)、加速、減速等功能。2系統(tǒng)方案設(shè)計(jì)2.1系統(tǒng)方案框圖圖2.1系統(tǒng)方案框圖2.1.1單片機(jī)最小系統(tǒng)(1)機(jī)最小系統(tǒng)的概念:能使單片機(jī)正常工作的最小硬件單元電路,就叫單片機(jī)最小系統(tǒng)。(2)單片機(jī)最小系統(tǒng)的組成:(1)復(fù)位電路;(2)時(shí)鐘電路:C2=C3=(30±10)pF(一般是20~30pF);(3)存儲(chǔ)器訪問路經(jīng)控制:EA/VPP=+5V時(shí),先內(nèi)后外。2.1.2藍(lán)牙模塊HC05模塊是一款高性能的主從一體的藍(lán)牙串口模塊。該模塊支持非常寬的波特率范圍:4800~1382400,并且模塊兼容5V或3.3V單片機(jī)系統(tǒng)。使用非常靈活、方便。采用CSR主流藍(lán)牙芯片,藍(lán)牙V2.0協(xié)議標(biāo)準(zhǔn),帶底板的可以為3.1-6.5V之間。核心模塊尺寸大小為:28mm×15mm×2.35mm。底板尺寸27mm×47mm。工作電流:配對(duì)中為50MA,配對(duì)完畢通信中為28MA??梢耘c藍(lán)牙、筆記本電腦、電腦加藍(lán)牙適配器、PDA等設(shè)備進(jìn)行無縫連接。2.1.3電機(jī)驅(qū)動(dòng)模塊L298N是SGS公司的產(chǎn)品,內(nèi)部同樣包含4通道邏輯驅(qū)動(dòng)電路。可以方便的驅(qū)動(dòng)兩個(gè)直流電機(jī),或一個(gè)兩相步進(jìn)電機(jī)。L298N芯片可以驅(qū)動(dòng)兩個(gè)二相電機(jī),也可以驅(qū)動(dòng)一個(gè)四相電機(jī),輸出電壓最高可達(dá)50V,可以直接通過電源來調(diào)節(jié)輸出電壓;可以直接用單片機(jī)的IO口提供信號(hào);而且電路簡單,使用比較方便。2.1.4電機(jī)模塊采用360直流電機(jī)。直流電機(jī)運(yùn)轉(zhuǎn)平穩(wěn),精度有一定的保證。直流電機(jī)控制的精確度雖然沒有步進(jìn)電機(jī)那樣高,但完全可以滿足本題目的要求。通過單片機(jī)輸出PWM波同樣可以控制直流電機(jī)的旋轉(zhuǎn)速度,實(shí)現(xiàn)電動(dòng)車的速度控制。并且直流電機(jī)相對(duì)于步進(jìn)電機(jī)價(jià)格經(jīng)濟(jì)。2.1.5電源在本系統(tǒng)中,需要用到的電源有單片機(jī)的5V,L298N芯片的電源5V和電機(jī)的電源7-15V。所以需要對(duì)電源的提供必須正確和穩(wěn)定可靠。用12V的鋅電源給電機(jī)供電,然后使用7805穩(wěn)壓管來把高電壓穩(wěn)成5V分別給單片機(jī)和電機(jī)驅(qū)動(dòng)芯片供電。因此為了方便,這里我們采用12V電源給電機(jī)供電,再用7805轉(zhuǎn)換成5V電源給單片機(jī)使用。2.2方案分析2.2.1電機(jī)模塊工作原理通過使單片機(jī)產(chǎn)生PWM波來控制直流電機(jī)。PWM波:PWM(PulseWidthModulation)控制——脈沖寬度調(diào)制技術(shù),通過對(duì)一系列脈沖的寬度進(jìn)行調(diào)制,來等效地獲得所需要波形(含形狀和幅值)。占空比:就是輸出的PWM中,高電平保持的時(shí)間與該P(yáng)WM的時(shí)鐘周期的時(shí)間之比如,一個(gè)PWM的頻率是1000Hz,那么它的時(shí)鐘周期就是1ms,就是1000μs,如果高電平出現(xiàn)的時(shí)間是200μs,那么低電平的時(shí)間肯定是800μs,那么占空比就是200:1000,也就是說PWM的占空比就是1:5。2.2.2電機(jī)驅(qū)動(dòng)模塊工作原理L298N可接受標(biāo)準(zhǔn)TTL邏輯電平信號(hào)VSS,VSS可接4.5~7V電壓。4腳VS接電源電壓,VS電壓范圍VIH為+2.5~46V。輸出電流可達(dá)2.5A,可驅(qū)動(dòng)電感性負(fù)載。1腳和15腳下管的發(fā)射極分別單獨(dú)引出以便接入電流采樣電阻,形成電流傳感信號(hào)。L298可驅(qū)動(dòng)2個(gè)電動(dòng)機(jī),OUT1,OUT2和OUT3,OUT4之間可分別接電動(dòng)機(jī),本實(shí)驗(yàn)裝置我們選用驅(qū)動(dòng)一臺(tái)電動(dòng)機(jī)。5,7,10,12腳接輸入控制電平,控制電機(jī)的正反轉(zhuǎn)。EnA,EnB接控制使能端,控制電機(jī)的停轉(zhuǎn)。2.2.3藍(lán)牙模塊表2.2.1藍(lán)牙模塊引腳說明名稱說明VCC電源(3.3V~5V)GND地TXD模塊串口發(fā)送引腳(TTL電平)RXD模塊串口接收引腳(TTL電平)KEY高電平進(jìn)入AT狀態(tài),低電平或者懸空進(jìn)入正常狀態(tài)LED配對(duì)成功輸出高電平,不成功輸出低電平3系統(tǒng)硬件電路設(shè)計(jì)3.1單片機(jī)最小系統(tǒng)圖3.1.1單片機(jī)最小系統(tǒng)在此單片機(jī)最小系統(tǒng)中,P1口和P2口接排針,串口P0.0和P0.1可寫入程序和與藍(lán)牙模塊相連。由開關(guān)S1控制,當(dāng)開關(guān)關(guān)閉時(shí),可寫入程序。排針P3外接藍(lán)牙模塊。串口P1.0~P1.3與電機(jī)驅(qū)動(dòng)模塊相連,并輸出PWM波。U3為LM7805,將電池體提供的12V電壓轉(zhuǎn)化為5V,供單片機(jī)工作,排針P5起到電池和USB供電切換的作用,當(dāng)P5的1號(hào)腳和2號(hào)腳短接時(shí),由USB供電,當(dāng)2號(hào)腳和3號(hào)腳相連時(shí),由電池供電。P4為12V供電端,P5為5V供電端。S2為復(fù)位開關(guān)。系統(tǒng)軟件設(shè)計(jì)4.1STC89C52程序#include<reg52.h>#defineuintunsignedint#defineucharunsignedcharuchartime=0,count=20,flag=1;//低電平的占空比sbitPWM1=P2^0;//PWM通道1,電機(jī)1反轉(zhuǎn)脈沖sbitPWM2=P2^1;//PWM通道2,電機(jī)1正轉(zhuǎn)脈沖sbitPWM3=P2^2;//PWM通道3,電機(jī)2反轉(zhuǎn)脈沖sbitPWM4=P2^3;//PWM通道4,電機(jī)2正轉(zhuǎn)脈沖ucharch;//定義藍(lán)牙接收字符變量 /************函數(shù)聲明**************/voiddelayxms(uintz);//延時(shí)函數(shù)voidJS(); //電機(jī)加速voidXJ(); //電機(jī)減速voidtimer1_init(); //定時(shí)器T1及其串口初始化voidtimer0_init();//定時(shí)器T0初始化voidQJ(); //前進(jìn)voidHT(); //后退voidZZ(); //左轉(zhuǎn)voidYZ(); //右轉(zhuǎn)voidTZ();//停止/*********主函數(shù)********************/voidmain(){ timer0_init(); timer1_init(); PWM1=0; PWM2=0; PWM3=0; PWM4=0; while(1) { switch(ch) { case'w': { QJ(); } case's': { HT(); } case'a': { ZZ(); } case'd': { YZ(); } case'j': { JS(); } case'x': { XJ(); } case't': { TZ(); } } }}/****************延時(shí)處理**********************/voiddelayxms(uintz)//延時(shí)xms程序{uintx,y; for(y=z;x>0;x--) for(y=110;y>0;y--);}/*****************電機(jī)加速****************/voidJS()//電機(jī)加速{ if(ch=='j') { if(ch=='j') { count+=5; if(count>=100) { count=0; } } }}/******************電機(jī)減速********************/voidXJ()//電機(jī)減速{ if(ch=='x') { if(ch=='x') { count-=5; if(count>=100) { count=0; } } }}/**************左轉(zhuǎn)******************/voidZZ(){ while(ch=='a')//右電機(jī)正轉(zhuǎn),左拐 { if(ch=='a') { time++; if(time<count) { PWM3=1; PWM2=0; PWM4=0; PWM1=0; } else { PWM1=0; PWM2=0; PWM3=0; PWM4=0; } if(time>=100) { time=0; } } }}/********************停止*******************/voidTZ(){ if(ch=='t') { PWM1=0; PWM2=0; PWM3=0; PWM4=0; }}/********************右轉(zhuǎn)*******************/voidYZ(){ while(ch=='d') { if(ch=='d')//左電機(jī)正轉(zhuǎn),右拐 { PWM2=1; PWM3=0; time++; if(time<count) { PWM2=1; PWM3=0; PWM1=0; PWM4=0; } else { PWM2=0; PWM3=0; PWM1=0; PWM4=0; } if(time>=100) { time=0; } } } }/*********************前進(jìn)***********************/voidQJ(){inti=0; while(ch=='w') { if(ch=='w')//電機(jī)正轉(zhuǎn) { time++; if(time<count) { PWM2=1; PWM3=1; PWM1=0; PWM4=0; } else { PWM1=0; PWM2=0; PWM3=0; PWM4=0; } if(time>=100) { time=0; } } } }/**************后退***************/voidHT(){ while(ch=='s') { if(ch=='s')//電機(jī)正轉(zhuǎn) { time++; if(time<count) { PWM1=1; PWM2=0; PWM3=0; PWM4=1; } else { PWM1=0; PWM2=0; PWM3=0; PWM4=0; } if(time>=100) { time=0; } } } }/*****************定時(shí)器0初始化*******************/voidtimer0_init(){ TMOD=0x01;//定時(shí)器0工作于方式1 TH0=(65536-10)/256; TL0=(65536-10)%256; TR0=1; ET0=1; EA=1;} /******************定時(shí)器0*******************/voidtimer0_int()interrupt1{ TR0=0;//設(shè)置定時(shí)器初值期間,關(guān)閉定時(shí)器 TH0=(65536-10)/256; TL0=(65536-10)%256; TR0=1;}/************定時(shí)器1初始化********/voidtimer1_init(){TMOD=0x20;//設(shè)定定時(shí)器的工作方式(方式2)TH1=0xfd;//設(shè)定波特率為9600bps(在11.0592MHZ晶振時(shí))TL1=0xfd;SM0=0;//SM0和SM1設(shè)定串口的工作方式(方式1)SM1=1;REN=1;//允許串口接收外部傳來的數(shù)據(jù)ES=1;//允許串口收到數(shù)據(jù)后產(chǎn)生中斷通知我們EA=1;//因?yàn)榭傊袛嚅_關(guān)是控制所有中斷的,所以要把它打開TR1=1;//啟動(dòng)定時(shí)器,串口就開始工作嘍!} /************************串口中斷******************/voidcom_ser()interrupt4//串口中斷處理函數(shù),收到數(shù)據(jù)后產(chǎn)生中斷,在這里處理{//定義一個(gè)變量,用來存放電腦端發(fā)來的數(shù)據(jù)if(RI)//如果數(shù)據(jù)已經(jīng)接收完,即RI=1{RI=0;//對(duì)RI進(jìn)行清零ch=SBUF;//把收到的數(shù)據(jù)賦值給變量(注意接收的寫法)}TI=0;} 4.2手機(jī)藍(lán)牙app程序packagecom.test.BTClient;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importjava.util.UUID;importcom.test.BTClient.DeviceListActivity;importandroid.app.Activity;importandroid.app.AlertDialog;importandroid.bluetooth.BluetoothAdapter;importandroid.bluetooth.BluetoothDevice;importandroid.bluetooth.BluetoothSocket;importandroid.content.DialogInterface;importandroid.content.Intent;importandroid.os.Bundle;importandroid.os.Environment;importandroid.os.Handler;importandroid.os.Message;importandroid.view.LayoutInflater;importandroid.view.Window;importandroid.view.WindowManager;//importandroid.view.Menu;//如使用菜單加入此三包//importandroid.view.MenuInflater;//importandroid.view.MenuItem;importandroid.view.View;importandroid.widget.Button;importandroid.widget.EditText;importandroid.widget.ScrollView;importandroid.widget.TextView;importandroid.widget.Toast;publicclassBTClientextendsActivity{ privatefinalstaticintREQUEST_CONNECT_DEVICE=1;//宏定義查詢?cè)O(shè)備句柄 privatefinalstaticStringMY_UUID="00001101-0000-1000-8000-00805F9B34FB";//SPP服務(wù)UUID號(hào) privateInputStreamis;//輸入流,用來接收藍(lán)牙數(shù)據(jù) //privateTextViewtext0;//提示欄解句柄//privateEditTextedit0;//發(fā)送數(shù)據(jù)輸入句柄privateTextViewdis;//接收數(shù)據(jù)顯示句柄privateScrollViewsv;//翻頁句柄privateStringsmsg="";//顯示用數(shù)據(jù)緩存privateStringfmsg="";//保存用數(shù)據(jù)緩存publicStringfilename="";//用來保存存儲(chǔ)的文件名BluetoothDevice_device=null;//藍(lán)牙設(shè)備BluetoothSocket_socket=null;//藍(lán)牙通信socketboolean_discoveryFinished=false;booleanbRun=true;booleanbThread=false; privateBluetoothAdapter_bluetooth=BluetoothAdapter.getDefaultAdapter();//獲取本地藍(lán)牙適配器,即藍(lán)牙設(shè)備 /**Calledwhentheactivityisfirstcreated.*/@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);//設(shè)置畫面為主畫面main.xml//requestWindowFeature(Window.FEATURE_NO_TITLE);//getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);//text0=(TextView)findViewById(R.id.Text0);//得到提示欄句柄//edit0=(EditText)findViewById(R.id.Edit0);//得到輸入框句柄sv=(ScrollView)findViewById(R.id.ScrollView01);//得到翻頁句柄dis=(TextView)findViewById(R.id.in);//得到數(shù)據(jù)顯示句柄//如果打開本地藍(lán)牙設(shè)備不成功,提示信息,結(jié)束程序if(_bluetooth==null){ Toast.makeText(this,"無法打開手機(jī)藍(lán)牙,請(qǐng)確認(rèn)手機(jī)是否有藍(lán)牙功能!",Toast.LENGTH_LONG).show();finish();return;}//設(shè)置設(shè)備可以被搜索newThread(){ publicvoidrun(){ if(_bluetooth.isEnabled()==false){ _bluetooth.enable(); } } }.start();}//方形R-大publicvoidonR_F_DButtonClicked(Viewv){//Fr-Du inti=0; intn=0; try{ OutputStreamos=_socket.getOutputStream();//藍(lán)牙連接輸出流 Stringdf="u"; byte[]bos=df.getBytes(); for(i=0;i<bos.length;i++){ if(bos[i]==0x0a)n++; } byte[]bos_new=newbyte[bos.length+n]; n=0; for(i=0;i<bos.length;i++){//手機(jī)中換行為0a,將其改為0d0a后再發(fā)送 if(bos[i]==0x0a){ bos_new[n]=0x0d; n++; bos_new[n]=0x0a; }else{ bos_new[n]=bos[i]; } n++; } os.write(bos_new); }catch(IOExceptione){ } }//圓形--大-RpublicvoidonR_Y_DButtonClicked(Viewv){//Yr--D--i inti=0; intn=0; try{ OutputStreamos=_socket.getOutputStream();//藍(lán)牙連接輸出流 Stringdy="i"; byte[]bos=dy.getBytes(); for(i=0;i<bos.length;i++){ if(bos[i]==0x0a)n++; } byte[]bos_new=newbyte[bos.length+n]; n=0; for(i=0;i<bos.length;i++){//手機(jī)中換行為0a,將其改為0d0a后再發(fā)送 if(bos[i]==0x0a){ bos_new[n]=0x0d; n++; bos_new[n]=0x0a; }else{ bos_new[n]=bos[i]; } n++; } os.write(bos_new); }catch(IOExceptione){ } }//圓形--小-RpublicvoidonR_Y_XButtonClicked(Viewv){//Yr--X--o inti=0; intn=0; try{ OutputStreamos=_socket.getOutputStream();//藍(lán)牙連接輸出流 Stringry="o"; byte[]bos=ry.getBytes(); for(i=0;i<bos.length;i++){ if(bos[i]==0x0a)n++; } byte[]bos_new=newbyte[bos.length+n]; n=0; for(i=0;i<bos.length;i++){//手機(jī)中換行為0a,將其改為0d0a后再發(fā)送 if(bos[i]==0x0a){ bos_new[n]=0x0d; n++; bos_new[n]=0x0a; }else{ bos_new[n]=bos[i]; } n++; } os.write(bos_new); }catch(IOExceptione){ } }//方形R-小publicvoidonR_F_XButtonClicked(Viewv){//Fr-xp inti=0; intn=0; try{ OutputStreamos=_socket.getOutputStream();//藍(lán)牙連接輸出流 Stringrf="p"; byte[]bos=rf.getBytes(); for(i=0;i<bos.length;i++){ if(bos[i]==0x0a)n++; } byte[]bos_new=newbyte[bos.length+n]; n=0; for(i=0;i<bos.length;i++){//手機(jī)中換行為0a,將其改為0d0a后再發(fā)送 if(bos[i]==0x0a){ bos_new[n]=0x0d; n++; bos_new[n]=0x0a; }else{ bos_new[n]=bos[i]; } n++; } os.write(bos_new); }catch(IOExceptione){ } }//圓形publicvoidonYButtonClicked(Viewv){//--y inti=0; intn=0; try{ OutputStreamos=_socket.getOutputStream();//藍(lán)牙連接輸出流 Stringy="y"; byte[]bos=y.getBytes(); for(i=0;i<bos.length;i++){ if(bos[i]==0x0a)n++; } byte[]bos_new=newbyte[bos.length+n]; n=0; for(i=0;i<bos.length;i++){//手機(jī)中換行為0a,將其改為0d0a后再發(fā)送 if(bos[i]==0x0a){ bos_new[n]=0x0d; n++; bos_new[n]=0x0a; }else{ bos_new[n]=bos[i]; } n++; } os.write(bos_new); }catch(IOExceptione){ } }//方形publicvoidonFButtonClicked(Viewv){//f inti=0; intn=0; try{ OutputStreamos=_socket.getOutputStream();//藍(lán)牙連接輸出流 Stringf="f"; byte[]bos=f.getBytes(); for(i=0;i<bos.length;i++){ if(bos[i]==0x0a)n++; } byte[]bos_new=newbyte[bos.length+n]; n=0; for(i=0;i<bos.length;i++){//手機(jī)中換行為0a,將其改為0d0a后再發(fā)送 if(bos[i]==0x0a){ bos_new[n]=0x0d; n++; bos_new[n]=0x0a; }else{ bos_new[n]=bos[i]; } n++; } os.write(bos_new); }catch(IOExceptione){ } }//減速publicvoidonX_ButtonClicked(Viewv){//x inti=0; intn=0; try{ OutputStreamos=_socket.getOutputStream();//藍(lán)牙連接輸出流 Stringx="x"; byte[]bos=x.getBytes(); for(i=0;i<bos.length;i++){ if(bos[i]==0x0a)n++; } byte[]bos_new=newbyte[bos.length+n]; n=0; for(i=0;i<bos.length;i++){//手機(jī)中換行為0a,將其改為0d0a后再發(fā)送 if(bos[i]==0x0a){ bos_new[n]=0x0d; n++; bos_new[n]=0x0a; }else{ bos_new[n]=bos[i]; } n++; } os.write(bos_new); }catch(IOExceptione){ } }//停止publicvoidonT_ButtonClicked(Viewv){//t inti=0; intn=0; try{ OutputStreamos=_socket.getOutputStream();//藍(lán)牙連接輸出流 Stringt="t"; byte[]bos=t.getBytes(); for(i=0;i<bos.length;i++){ if(bos[i]==0x0a)n++; } byte[]bos_new=newbyte[bos.length+n]; n=0; for(i=0;i<bos.length;i++){//手機(jī)中換行為0a,將其改為0d0a后再發(fā)送 if(bos[i]==0x0a){ bos_new[n]=0x0d; n++; bos_new[n]=0x0a; }else{ bos_new[n]=bos[i]; } n++; } os.write(bos_new); }catch(IOExceptione){ } }//加速publicvoidonJ_ButtonClicked(Viewv){//--j inti=0; intn=0; try{ OutputStreamos=_socket.getOutputStream();//藍(lán)牙連接輸出流 Stringj="j"; byte[]bos=j.getBytes(); for(i=0;i<bos.length;i++){ if(bos[i]==0x0a)n++; } byte[]bos_new=newbyte[bos.length+n]; n=0; for(i=0;i<bos.length;i++){//手機(jī)中換行為0a,將其改為0d0a后再發(fā)送 if(bos[i]==0x0a){ bos_new[n]=0x0d; n++; bos_new[n]=0x0a; }else{ bos_new[n]=bos[i]; } n++; } os.write(bos_new); }catch(IOExceptione){ } }//右publicvoidonD_ButtonClicked(Viewv){//d inti=0; intn=0; try{ OutputStreamos=_socket.getOutputStream();//藍(lán)牙連接輸出流 Stringd="d"; byte[]bos=d.getBytes(); for(i=0;i<bos.length;i++){ if(bos[i]==0x0a)n++; } byte[]bos_new=newbyte[bos.length+n]; n=0; for(i=0;i<bos.length;i++){//手機(jī)中換行為0a,將其改為0d0a后再發(fā)送 if(bos[i]==0x0a){ bos_new[n]=0x0d; n++; bos_new[n]=0x0a; }else{ bos_new[n]=bos[i]; } n++; } os.write(bos_new); }catch(IOExceptione){ } }//左publicvoidonA_ButtonClicked(Viewv){//--a inti=0; intn=0; try{ OutputStreamos=_socket.getOutputStream();//藍(lán)牙連接輸出流 Stringa="a"; byte[]bos=a.getBytes(); for(i=0;i<bos.length;i++){ if(bos[i]==0x0a)n++; } byte[]bos_new=newbyte[bos.length+n]; n=0; for(i=0;i<bos.length;i++){//手機(jī)中換行為0a,將其改為0d0a后再發(fā)送 if(bos[i]==0x0a){ bos_new[n]=0x0d; n++; bos_new[n]=0x0a; }else{ bos_new[n]=bos[i]; } n++; } os.write(bos_new); }catch(IOExceptione){ } }//后退publicvoidonS_ButtonClicked(Viewv){//--s inti=0; intn=0; try{ OutputStreamos=_socket.getOutputStream();//藍(lán)牙連接輸出流 Strings="s"; byte[]bos=s.getBytes(); for(i=0;i<bos.length;i++){ if(bos[i]==0x0a)n++; } byte[]bos_new=newbyte[bos.length+n]; n=0; for(i=0;i<bos.length;i++){//手機(jī)中換行為0a,將其改為0d0a后再發(fā)送 if(bos[i]==0x0a){ bos_new[n]=0x0d; n++; bos_new[n]=0x0a; }else{ bos_new[n]=bos[i]; } n++; } os.write(bos_new); }catch(IOExceptione){ } }//前進(jìn)publicvoidonW_ButtonClicked(Viewv){//--w inti=0; intn=0; try{ OutputStreamos=_socket.getOutputStream();//藍(lán)牙連接輸出流 Stringw="w"; byte[]bos=w.getBytes(); for(i=0;i<bos.length;i++){ if(bos[i]==0x0a)n++; } byte[]bos_new=newbyte[bos.length+n]; n=0; for(i=0;i<bos.length;i++){//手機(jī)中換行為0a,將其改為0d0a后再發(fā)送 if(bos[i]==0x0a){ bos_new[n]=0x0d; n++; bos_new[n]=0x0a; }else{ bos_new[n]=bos[i]; } n++; } os.write(bos_new); }catch(IOExceptione){ } }/*//發(fā)送按鍵響應(yīng)publicvoidonSendButtonClicked(Viewv){ inti=0; intn=0; try{ OutputStreamos=_socket.getOutputStream();//藍(lán)牙連接輸出流 byte[]bos=edit0.getText().toString().getBytes(); for(i=0;i<bos.length;i++){ if(bos[i]==0x0a)n++; } byte[]bos_new=newbyte[bos.length+n]; n=0; for(i=0;i<bos.length;i++){//手機(jī)中換行為0a,將其改為0d0a后再發(fā)送 if(bos[i]==0x0a){ bos_new[n]=0x0d; n++; bos_new[n]=0x0a; }else{ bos_new[n]=bos[i]; } n++; } os.write(bos_new); }catch(IOExceptione){ } }*///接收活動(dòng)結(jié)果,響應(yīng)startActivityForResult()publicvoidonActivityResult(intrequestCode,intresultCode,Intentdata){ switch(requestCode){ caseREQUEST_CONNECT_DEVICE://連接結(jié)果,由DeviceListActivity設(shè)置返回 //響應(yīng)返回結(jié)果if(resultCode==Activity.RESULT_OK){//連接成功,由DeviceListActivity設(shè)置返回//MAC地址,由DeviceListActivity設(shè)置返回Stringaddress=data.getExtras().getString(DeviceListActivity.EXTRA_DEVICE_ADDRESS);//得到藍(lán)牙設(shè)備句柄_device=_bluetooth.getRemoteDevice(address);//用服務(wù)號(hào)得到sockettry{ _socket=_device.createRfcommSocketToServiceRecord(UUID.fromString(MY_UUID));}catch(IOExceptione){ Toast.makeText(this,"連接失??!",Toast.LENGTH_SHORT).show();}//連接socket Buttonbtn=(Button)findViewById(R.id.Button03);try{ _socket.connect(); Toast.makeText(this,"連接"+_device.getName()+"成功!",Toast.LENGTH_SHORT).show(); btn.setText("斷開");}catch(IOExceptione){ try{ Toast.makeText(this,"連接失?。?,Toast.LENGTH_SHORT).show(); _socket.close(); _socket=null; }catch(IOExceptionee){ Toast.makeText(this,"連接失??!",Toast.LENGTH_SHORT).show(); } return;}//打開接收線程try{ is=_socket.getInputStream();//得到藍(lán)牙數(shù)據(jù)輸入流 }catch(IOExceptione){ Toast.makeText(this,"接收數(shù)據(jù)失敗!",Toast.LENGTH_SHORT).show(); return; } if(bThread==false){ ReadThread.start(); bThread=true; }else{ bRun=true; }} break; default:break; }}//接收數(shù)據(jù)線程ThreadReadThread=newThread(){ publicvoidrun(){ intnum=0; byte[]buffer=newbyte[1024]; byte[]buffer_new=newbyte[1024]; inti=0; intn=0; bRun=true; //接收線程 while(true){ try{ while(is.available()==0){ while(bRun==false){} } while(true){ num=is.read(buffer);//讀入數(shù)據(jù) n=0; Strings0=newString(buffer,0,num); fmsg+=s0;//保存收到數(shù)據(jù) for(i=0;i<num;i++){ if((buffer[i]==0x0d)&&(buffer[i+1]==0x0a)){ buffer_new[n]=0x0a; i++; }else{ buffer_new[n]=buffer[i]; } n++; } Strings=newString(buffer_new,0,n); smsg+=s;//寫入接收緩存 if(is.available()==0)break;//短時(shí)間沒有數(shù)據(jù)才跳出進(jìn)行顯示 } //發(fā)送顯示消息,進(jìn)行顯示刷新 handler.sendMessage(handler.obtainMessage()); }catch(IOExceptione){ } } }};//消息處理隊(duì)列Handlerhandler=newHandler(){ publicvoidhandleMessage(Messagemsg){ super.handleMessage(msg); dis.setText(smsg);//顯示數(shù)據(jù) sv.scrollTo(0,dis.getMeasuredHeight());//跳至數(shù)據(jù)最后一頁 }};//關(guān)閉程序掉用處理部分publicvoidonDestroy(){ super.onDestroy(); if(_socket!=null)//關(guān)閉連接socket try{ _socket.close(); }catch(IOExceptione){}// _bluetooth.disable();//關(guān)閉藍(lán)牙服務(wù)}//菜單處理部分/*@OverridepublicbooleanonCreateOptionsMenu(Menumenu){//建立菜單MenuInflaterinflater=getMenuInflater();inflater.inflate(R.menu.option_menu,menu);returntrue;}*//*@OverridepublicbooleanonOptionsItemSelected(MenuItemitem){//菜單響應(yīng)函數(shù)switch(item.getItemId()){caseR.id.scan: if(_bluetooth.isEnabled()==false){ Toast.makeText(this,"OpenBT",Toast.LENGTH_LONG).show(); returntrue; }//LaunchtheDeviceListActivitytoseedevicesanddoscanIntentserverIntent=newIntent(this,DeviceListActivity.class);startActivityForResult(serverIntent,REQUEST_CONNECT_DEVICE);returntrue;caseR.id.quit:finish();returntrue;caseR.id.clear: smsg=""; ls.setText(smsg); returntrue;caseR.id.save: Save(); returntrue;}returnfalse;}*///連接按鍵響應(yīng)函數(shù)publicvoidonConnectButtonClicked(Viewv){ if(_bluetooth.isEnabled()==false){//如果藍(lán)牙服務(wù)不可用則提示 Toast.makeText(this,"打開藍(lán)牙中...",Toast.LENGTH_LONG).show(); return; } //如未連接設(shè)備則打開DeviceListActivity進(jìn)行設(shè)備搜索 Buttonbtn=(Button)findViewById(R.id.Button03); if(_socket==null){ IntentserverIntent=newIntent(this,DeviceListActivity.class);//跳轉(zhuǎn)程序設(shè)置 startActivityForResult(serverIntent,REQUEST_CONNECT_DEVICE);//設(shè)置返回宏定義 } else{ //關(guān)閉連接socket try{ is.close(); _socket.close(); _socket=null; bRun=false; btn.setText("連接"); }catch(IOExceptione){} } return;}/*//保存按鍵響應(yīng)函數(shù)publicvoidonSaveButtonClicked(Viewv){ Save();}*///清除按鍵響應(yīng)函數(shù)publicvoidonClearButtonClicked(Viewv){ smsg=""; fmsg=""; dis.setText(smsg); return;}//退出按鍵響應(yīng)函數(shù)publicvoidonQuitButtonClicked(Viewv){ finish();}//保存功能實(shí)現(xiàn) privatevoidSave(){ //顯示對(duì)話框輸入文件名 LayoutInflaterfactory=LayoutInflater.from(BTClient.this);//圖層模板生成器句柄 finalViewDialogView=factory.inflate(R.layout.sname,null);//用sname.xml模板生成視圖模板 newAlertDialog.Builder(BTClient.this) .setTitle("文件名") .setView(DialogView)//設(shè)置視圖模板 .setPositiveButton("確定", newDialogInterface.OnClickListener()//確定按鍵響應(yīng)函數(shù) { publicvoidonClick(DialogInterfacedialog,intwhichButton){ EditTexttext1=(EditText)DialogView.findViewById(R.id.sname);//得到文件名輸入框句柄 filename=text1.getText().toString();//得到文件名 try{ if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){//如果SD卡已準(zhǔn)備好 filename=filename+".txt";//在文件名末尾加上.txt FilesdCardDir=Environment.getExternalStorageDirectory();//得到SD卡根目錄 FileBuildDir=newFile(sdCardDir,"/data");//打開data目錄,如不存在則生成 if(BuildDir.exists()==false)BuildDir.mkdirs(); FilesaveFile=newFile(BuildDir,filename);//新建文件句柄,如已存在仍新建文檔 FileOutputStreamstream=newFileOutputStream(saveFile);//打開文件輸入流 stream.write(fmsg.getBytes()); stream.close(); Toast.makeText(BTClient.this,"存儲(chǔ)成功!",Toast.LENGTH_SHORT).show(); }else{ Toast.makeText(BTClient.this,"沒有存儲(chǔ)卡!",Toast.LENGTH_LONG).show(); } }catch(IOExceptione){ return; } } }) .setNegativeButton("取消",//取消按鍵響應(yīng)函數(shù),直接退出對(duì)話框不做任何處理 newDialogInterface.OnClickListener(){ publicvoidonClick(DialogInterfacedialog,intwhich){ } }).show();//顯示對(duì)話框 }}/**Copyright(C)2009TheAn

溫馨提示

  • 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)論