版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
期末專題報告書單片機與Dino928的單機通訊實驗班別:資訊工程丙班組別:15組員一:曹睿龍(i10402091)組員二:謝曉喆(i10402109)
目錄一、 動機 3二、 構(gòu)想 3三、 專題特色 4四、 製作專題所遇到之困難以及解決方法 4五、 結(jié)果呈現(xiàn) 5六、 程式碼 7七、 心得 15
動機制作的初期,發(fā)現(xiàn)藍牙是一個可能很普遍存在于大眾的模組,出于推陳出新這樣的想法,我們決定不再致力于書本上已有的實驗,而是努力向外延伸,尋找更多有新意的提案所謂無通訊,無物聯(lián)。IOT應(yīng)該是物物相連的網(wǎng)際網(wǎng)路,如果一個物體裝上感測器和制動元件就可以叫智能設(shè)備的話,恐怕與真正的物聯(lián)網(wǎng)還有一定的距離。所以本組所致力的是物聯(lián)設(shè)備與其他處理設(shè)備的通訊過程,實現(xiàn)對原有Arduino裝置的擴充。構(gòu)想實驗1:本組果斷放棄了藍牙,轉(zhuǎn)而決定用紅外線機制,傳輸一個鍵碼值給MCU,再讓MCU控制不同位于Arduino的PIN口進行后續(xù)判斷實驗2:使用串口通訊,將MCU受到的PC端串口信息處理并轉(zhuǎn)發(fā)給Arduino,并嚴格規(guī)定時間控制其走停。專題特色此次實驗重點在于通訊交互過程在技術(shù)實施方面,我們所采用信號發(fā)起方式是由單片機接收不同的訊號,包括紅外和PC端UART兩種。傳輸上使用簡單的數(shù)字信號判斷和串口單機通訊兩種通訊模式,分別由實驗1和實驗2完成。在外觀形態(tài)方面,本組仿照單機游戲“Minecraft”中“爬行者”角色的外形,制作Dino928的外殼。外殼體由輕質(zhì)紙塑殼拼接而成。下底經(jīng)過打磨,使其摩擦力減小以便于移動製作專題所遇到之困難以及解決方法困難一:由於ardiuno與80C51單片機的收發(fā)波特率不一樣,80C51單片機需要自定義,ardiuno默認為19200,當(dāng)初沒有考慮到波特率的問題導(dǎo)致收發(fā)頻率不一,ardiuno無法正常接收來自80C51單片機的串口訊號。解決:查詢資料發(fā)現(xiàn)80C51有專門控制發(fā)送頻率的代碼,將兩者波特率調(diào)製9600,雙方就能實現(xiàn)正常收發(fā)數(shù)據(jù)。困難二:鍵碼讀取的中斷與LED動態(tài)顯示的中斷衝突,導(dǎo)致數(shù)碼管不規(guī)律閃爍。解決:不斷分析中斷源,最終找到合適的流程設(shè)計,編寫出合適代碼解決LED燈閃爍問題。困難三:SBUF配置不正確,80C51單片機控制發(fā)送語句沒寫循環(huán),由於發(fā)送指令一次只能發(fā)送一位,如果不循環(huán)則ardiuno緩衝池只能收到一位,而ardiuno只能接受數(shù)字信號,對單個位沒有處理功能,則緩沖池不接受這樣的單個位,導(dǎo)致收不到信號。解決:在80C51串口發(fā)送數(shù)據(jù)編程中加入循環(huán)語句,使發(fā)送的數(shù)字信號能夠完整發(fā)送。結(jié)果呈現(xiàn)實驗一:實驗二:外形:程式碼實驗一:51單片機部分:#include<reg52.h>sbitADDR3=P1^3;sbitENLED=P1^4;sbitgo=P2^1;sbitstop=P2^2;sbitback=P2^3;unsignedcharcodeLedChar[]={//數(shù)碼管顯示字符轉(zhuǎn)換表0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};unsignedcharLedBuff[6]={//數(shù)碼管顯示緩沖區(qū)0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};unsignedcharT0RH=0;//T0重載值的高字節(jié)unsignedcharT0RL=0;//T0重載值的低字節(jié)externbitirflag;externunsignedcharircode[4];externvoidInitInfrared(void);voidConfigTimer0(unsignedintms);voidmain(){EA=1;//開總中斷ENLED=0;//使能選擇數(shù)碼管ADDR3=1;InitInfrared();//初始化紅外功能ConfigTimer0(1);//配置T0定時1msPT0=1;//配置T0中斷為高優(yōu)先級,啟用本行可消除接收時的閃爍while(1){if(irflag)//接收到紅外數(shù)據(jù)時刷新顯示{irflag=0; switch(ircode[2]){case0X0C:LedBuff[0]=LedChar[1];break;case0X18:{LedBuff[0]=LedChar[2];go=0;back=1;stop=1;}break;case0X5E:LedBuff[0]=LedChar[3];break; case0X08:LedBuff[0]=LedChar[4];break;case0X1C:{LedBuff[0]=LedChar[5];go=1;back=1;stop=0;}break;case0X5A:LedBuff[0]=LedChar[6];break;case0X42:LedBuff[0]=LedChar[7];break;case0X52:{LedBuff[0]=LedChar[8];go=1;back=0;stop=1;}break;case0X4A:LedBuff[0]=LedChar[9];break;}}}}/*配置并啟動T0,ms-T0定時時間*/voidConfigTimer0(unsignedintms){unsignedlongtmp;//臨時變量tmp=11059200/12;//定時器計數(shù)頻率tmp=(tmp*ms)/1000;//計算所需的計數(shù)值tmp=65536-tmp;//計算定時器重載值tmp=tmp+18;//補償中斷響應(yīng)延時造成的誤差T0RH=(unsignedchar)(tmp>>8);//定時器重載值拆分為高低字節(jié)T0RL=(unsignedchar)tmp;TMOD&=0xF0;//清零T0的控制位TMOD|=0x01;//配置T0為模式1TH0=T0RH;//加載T0重載值TL0=T0RL;ET0=1;//使能T0中斷TR0=1;//啟動T0}/*數(shù)碼管動態(tài)掃描刷新函數(shù),需在定時中斷中調(diào)用*/voidLedScan(){staticunsignedchari=0;//動態(tài)掃描索引P0=0xFF;//關(guān)閉所有段選位,顯示消隱P1=(P1&0xF8)|i;//位選索引值賦值到P1口低3位P0=LedBuff[i];//緩沖區(qū)中索引位置的數(shù)據(jù)送到P0口if(i<sizeof(LedBuff)-1)//索引遞增循環(huán),遍歷整個緩沖區(qū)i++;elsei=0;}/*T0中斷服務(wù)函數(shù),執(zhí)行數(shù)碼管掃描顯示*/voidInterruptTimer0()interrupt1{TH0=T0RH;//重新加載重載值TL0=T0RL;LedScan();//數(shù)碼管掃描顯示}Arduino部分:constintM1_in1=12;constintM1_in2=11;constintM2_in3=10;constintM2_in4=9;voidsetup(){Serial.begin(9600);pinMode(M1_in1,OUTPUT);pinMode(M1_in2,OUTPUT);pinMode(M2_in3,OUTPUT);pinMode(M2_in4,OUTPUT);pinMode(2,INPUT);pinMode(3,INPUT);pinMode(4,INPUT);Serial.println("輸入字元'+'代表前進,字元'-'代表後退,任意鍵代表停車");}voidloop(){intgo=digitalRead(2);//取得A2的模擬信號值。intstop1=digitalRead(3);//取得A3的模擬信號值。intback=digitalRead(4);if(go==1){//前進Serial.println("前進");digitalWrite(M1_in1,HIGH);//右輪前進digitalWrite(M1_in2,LOW);digitalWrite(M2_in3,HIGH);//左輪前進digitalWrite(M2_in4,LOW);}elseif(back==1){//倒車Serial.println("倒車");digitalWrite(M1_in1,LOW);//右輪倒轉(zhuǎn)digitalWrite(M1_in2,HIGH);digitalWrite(M2_in3,LOW);//左輪倒轉(zhuǎn)digitalWrite(M2_in4,HIGH);}elseif(stop1==1){//stopSerial.println("stop");digitalWrite(M1_in1,LOW);//右輪倒轉(zhuǎn)digitalWrite(M1_in2,LOW);digitalWrite(M2_in3,LOW);//左輪倒轉(zhuǎn)digitalWrite(M2_in4,LOW);}}實驗二:51單片機程式碼:#include<reg52.H>sbittx=P3^0;#defineXTAL11059200//CUP晶振頻率#definebaudrate9600//通信波特率unsignedcharc;voidmain(void){unsignedcharc;TMOD=0x20;//定時器1工作于8位自動重載模式,用于產(chǎn)生波特率TH1=(unsignedchar)(256-(XTAL/(32L*12L*baudrate)));TL1=(unsignedchar)(256-(XTAL/(32L*12L*baudrate)));//定時器0賦初值SCON=0x50;PCON=0x00;TR1=1;IE=0x00;//禁止任何中斷while(1){while(RI==0);RI=0;c=SBUF;//從緩沖區(qū)中把接收的字符放入c中SBUF=c;//要發(fā)送的字符放入緩沖區(qū)while(TI==0);TI=0;}}心得本次實作結(jié)合本學(xué)期所學(xué)的
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《在大多數(shù)廣告中》課件
- 2025年四川貨運從業(yè)考試試題及答案詳解
- 2024年度建筑工程碎石材料采購合同模板2篇
- 2024年建筑排水工程分包標(biāo)準協(xié)議模板版B版
- 2024年度高科技產(chǎn)業(yè)園區(qū)土地使用權(quán)永久出讓及稅收優(yōu)惠協(xié)議3篇
- 2024年物資運送聯(lián)盟協(xié)議
- 2025彎腳質(zhì)檢科長業(yè)績合同書
- 2024年城市綠化帶施工安裝及養(yǎng)護管理合同2篇
- 2025電力施工合同
- 《連云港特色美食》課件
- 2023-2024學(xué)年山東省膠州市初中語文九年級上冊期末自測測試題
- 人力資源專員招聘筆試題
- LY/T 1646-2005森林采伐作業(yè)規(guī)程
- GB/T 7714-2015信息與文獻參考文獻著錄規(guī)則
- GB/T 7531-2008有機化工產(chǎn)品灼燒殘渣的測定
- GB/T 19963.1-2021風(fēng)電場接入電力系統(tǒng)技術(shù)規(guī)定第1部分:陸上風(fēng)電
- GB/T 13586-2006鋁及鋁合金廢料
- 二年級上冊數(shù)學(xué)試題-應(yīng)用題復(fù)習(xí)6-人教新課標(biāo)(2014秋)(無答案)
- 麗聲北極星分級繪本第一級上Tiger-Is-Coming課件
- 2023年哈工大模電大作業(yè)
- 高考作文 論證方法匯總
評論
0/150
提交評論