




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
期末專題報告書單片機與Dino928的單機通訊實驗班別:資訊工程丙班組別:15組員一:曹睿龍(i10402091)組員二:謝曉喆(i10402109)
目錄一、 動機 3二、 構想 3三、 專題特色 4四、 製作專題所遇到之困難以及解決方法 4五、 結果呈現 5六、 程式碼 7七、 心得 15
動機制作的初期,發現藍牙是一個可能很普遍存在于大眾的模組,出于推陳出新這樣的想法,我們決定不再致力于書本上已有的實驗,而是努力向外延伸,尋找更多有新意的提案所謂無通訊,無物聯。IOT應該是物物相連的網際網路,如果一個物體裝上感測器和制動元件就可以叫智能設備的話,恐怕與真正的物聯網還有一定的距離。所以本組所致力的是物聯設備與其他處理設備的通訊過程,實現對原有Arduino裝置的擴充。構想實驗1:本組果斷放棄了藍牙,轉而決定用紅外線機制,傳輸一個鍵碼值給MCU,再讓MCU控制不同位于Arduino的PIN口進行后續判斷實驗2:使用串口通訊,將MCU受到的PC端串口信息處理并轉發給Arduino,并嚴格規定時間控制其走停。專題特色此次實驗重點在于通訊交互過程在技術實施方面,我們所采用信號發起方式是由單片機接收不同的訊號,包括紅外和PC端UART兩種。傳輸上使用簡單的數字信號判斷和串口單機通訊兩種通訊模式,分別由實驗1和實驗2完成。在外觀形態方面,本組仿照單機游戲“Minecraft”中“爬行者”角色的外形,制作Dino928的外殼。外殼體由輕質紙塑殼拼接而成。下底經過打磨,使其摩擦力減小以便于移動製作專題所遇到之困難以及解決方法困難一:由於ardiuno與80C51單片機的收發波特率不一樣,80C51單片機需要自定義,ardiuno默認為19200,當初沒有考慮到波特率的問題導致收發頻率不一,ardiuno無法正常接收來自80C51單片機的串口訊號。解決:查詢資料發現80C51有專門控制發送頻率的代碼,將兩者波特率調製9600,雙方就能實現正常收發數據。困難二:鍵碼讀取的中斷與LED動態顯示的中斷衝突,導致數碼管不規律閃爍。解決:不斷分析中斷源,最終找到合適的流程設計,編寫出合適代碼解決LED燈閃爍問題。困難三:SBUF配置不正確,80C51單片機控制發送語句沒寫循環,由於發送指令一次只能發送一位,如果不循環則ardiuno緩衝池只能收到一位,而ardiuno只能接受數字信號,對單個位沒有處理功能,則緩沖池不接受這樣的單個位,導致收不到信號。解決:在80C51串口發送數據編程中加入循環語句,使發送的數字信號能夠完整發送。結果呈現實驗一:實驗二:外形:程式碼實驗一:51單片機部分:#include<reg52.h>sbitADDR3=P1^3;sbitENLED=P1^4;sbitgo=P2^1;sbitstop=P2^2;sbitback=P2^3;unsignedcharcodeLedChar[]={//數碼管顯示字符轉換表0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};unsignedcharLedBuff[6]={//數碼管顯示緩沖區0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};unsignedcharT0RH=0;//T0重載值的高字節unsignedcharT0RL=0;//T0重載值的低字節externbitirflag;externunsignedcharircode[4];externvoidInitInfrared(void);voidConfigTimer0(unsignedintms);voidmain(){EA=1;//開總中斷ENLED=0;//使能選擇數碼管ADDR3=1;InitInfrared();//初始化紅外功能ConfigTimer0(1);//配置T0定時1msPT0=1;//配置T0中斷為高優先級,啟用本行可消除接收時的閃爍while(1){if(irflag)//接收到紅外數據時刷新顯示{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;//定時器計數頻率tmp=(tmp*ms)/1000;//計算所需的計數值tmp=65536-tmp;//計算定時器重載值tmp=tmp+18;//補償中斷響應延時造成的誤差T0RH=(unsignedchar)(tmp>>8);//定時器重載值拆分為高低字節T0RL=(unsignedchar)tmp;TMOD&=0xF0;//清零T0的控制位TMOD|=0x01;//配置T0為模式1TH0=T0RH;//加載T0重載值TL0=T0RL;ET0=1;//使能T0中斷TR0=1;//啟動T0}/*數碼管動態掃描刷新函數,需在定時中斷中調用*/voidLedScan(){staticunsignedchari=0;//動態掃描索引P0=0xFF;//關閉所有段選位,顯示消隱P1=(P1&0xF8)|i;//位選索引值賦值到P1口低3位P0=LedBuff[i];//緩沖區中索引位置的數據送到P0口if(i<sizeof(LedBuff)-1)//索引遞增循環,遍歷整個緩沖區i++;elsei=0;}/*T0中斷服務函數,執行數碼管掃描顯示*/voidInterruptTimer0()interrupt1{TH0=T0RH;//重新加載重載值TL0=T0RL;LedScan();//數碼管掃描顯示}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);//右輪倒轉digitalWrite(M1_in2,HIGH);digitalWrite(M2_in3,LOW);//左輪倒轉digitalWrite(M2_in4,HIGH);}elseif(stop1==1){//stopSerial.println("stop");digitalWrite(M1_in1,LOW);//右輪倒轉digitalWrite(M1_in2,LOW);digitalWrite(M2_in3,LOW);//左輪倒轉digitalWrite(M2_in4,LOW);}}實驗二:51單片機程式碼:#include<reg52.H>sbittx=P3^0;#defineXTAL11059200//CUP晶振頻率#definebaudrate9600//通信波特率unsignedcharc;voidmain(void){unsignedcharc;TMOD=0x20;//定時器1工作于8位自動重載模式,用于產生波特率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;//從緩沖區中把接收的字符放入c中SBUF=c;//要發送的字符放入緩沖區while(TI==0);TI=0;}}心得本次實作結合本學期所學的
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 代辦幫辦服務活動方案
- 代駕公司策劃方案
- 以老帶新活動方案
- 儀征聯心家園活動方案
- 任務抽獎活動方案
- 企業五四創新活動方案
- 企業黨建年度活動方案
- 企業關愛孕婦活動方案
- 企業勞模慰問活動方案
- 企業員工漂流活動方案
- 穿越機的基礎知識
- 農村集體經濟組織成員身份確認協議范本
- 堆取料機安全隱患治理
- 職業道德與法治綜合練習2024-2025學年中職高教版
- 閱讀理解:說明文(科學發現與科技創新類)綜合測試篇-2025年高考英語一輪復習(新教材新高考)
- 神經性耳鳴護理查房
- 2024年官方獸醫牧運通考試題庫(含答案)
- 麻醉恢復室病人的護理
- 河砂、碎石生產質量保證措施方案
- 四川燃氣用戶安裝檢修工理論考試題及答案
- 河北省唐山市2025屆高考物理二模試卷含解析
評論
0/150
提交評論