嵌入式期末考試_第1頁
嵌入式期末考試_第2頁
嵌入式期末考試_第3頁
嵌入式期末考試_第4頁
嵌入式期末考試_第5頁
已閱讀5頁,還剩36頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、嵌入式作品期末設計嵌入式作品簡介作品名稱:多功能智能探測車制作團隊:王明睿(硬件電路搭建、整體設計)王杰英(面向單片機編程、功能實現(xiàn))鄭芳芳(資料整理、外圍設計)制作時間:20天指導老師:孫玉軒創(chuàng)意來源:我們本身身為通信專業(yè)的學生,并且對電子電路,和對于硬件編程非常感興趣,所以制作了該課題,主要進行硬件編程,硬件搭建,無線信號的綜合處理。并且有實際運用價值。作品意義:搭建硬件并對硬件進行二次開發(fā)編程,達到綜合運用的價值。作品運用環(huán)境及主要功能:本作品主要應用于救援、安防、勘探、偵查、追蹤、等人類不可到達的領域。本小車可快速組建小區(qū)安防網絡。對小區(qū)安全進行綜合監(jiān)控。本小車可以對生命物體、對綜合煙

2、霧氣體探測,并回傳電腦,可以用于救援救災,本小車可以自動檢測障礙物體,使小車行進更流暢。本小車可以跟蹤物體進行監(jiān)控,實現(xiàn)了無人自動追蹤。本小車可以實現(xiàn)超聲波測距并回傳電腦,精度精確到毫米。本小車留有多個I/O口,可以快速擴展其他模塊,實現(xiàn)更多功能。下一部需完善 :增加小車云臺,使攝像頭上下各45度角旋轉,增加觀測的范圍。增加數(shù)據(jù)傳輸?shù)乃俣群蜏蚀_性,使傳回的信息更豐富、迅速??梢栽黾?G模塊,使小車在任何基站覆蓋范圍內都能進行遠程綜合控制和數(shù)據(jù)傳輸。嵌入式作品說明書 作品名稱:多功能智能探測車 院系專業(yè):信息工程學院移動通信專業(yè) 作 者:王明睿、王杰英、鄭芳芳 目 錄一、概述 -P3P4二:制作

3、流程 -P5P6三、硬件電路結構 -P7P15四、硬件編程程序 -P16P37五、小車控制方法、視頻存儲方法-P38六、未來發(fā)展 -P39一、概述:隨著移動通信業(yè)務的增加,無線通信已獲得非常廣泛的應用。無線網絡除了提供語音服務之外,還提供多媒體、高速數(shù)據(jù)和視頻圖像業(yè)務。無線通信環(huán)境(無線信道、移動終端等)以及移動多媒體應用業(yè)務的特點對視頻圖像的視頻圖像編碼與傳輸技術已成為當今信息科學與技術的前沿課題。該課題圍繞硬件結構搭建,與硬件編程實現(xiàn)為中心,對無線信號進行綜合處理。硬件編程是重點,同時也是難點。整個作品的軟件使用面向單片機的C語言編寫有以下原因:1、 可以直接對硬件編程,良好的硬件管理,可

4、移植性能良好。2、 用C 編寫程序比匯編更符合人們的思考習慣,開發(fā)者可以擺脫與硬件無必要的接觸,更專心的考慮功能和算法而不是考慮一些細節(jié)問題,這樣就減少了開發(fā)和調試的時間。3、 C語言具有良好的程序結構,適用于模塊化程序設計。4、 系統(tǒng)程序結構清晰,易于調試和維護。不同的功能模塊,分別指定相應的入口參數(shù)和出口參數(shù),對于一些要重復調用的程序一般把其編成函數(shù),這樣可以減少程序代碼的長度,又便于整個程序的管理。本小車一共有3種工作方式:方式一:對小車進行無線遙控,無線視頻傳輸,小車傳感器感應,并回傳傳感器信息到上位機方式二:利用超聲波模塊對物體進行跟蹤,實現(xiàn)無人操作跟蹤物體進行拍攝。方式三:智能躲避

5、障礙物,無需人為控制,小車自己躲避障礙物,并回傳視頻。二、制作流程1、作品構思:如何使用計算機設計制作出精彩的作品,這是最核心的問題之一,觀察很多計算機作品,大多利用已有的計算機平臺進行軟件開發(fā),于是我們決定自己搭建自己的硬件電路結構,對硬件進行編程操作,并建立與上位機的綜合通訊。2、硬件電路搭建:我們確立課題,以及準備實現(xiàn)的功能,我們開始搭建硬件電路,硬件電路的每個模塊的參數(shù)資料都要非常了解,熟悉運用每個模塊。了解模塊的硬件結構,和實現(xiàn)原理,最后把每個硬件都搭載在我們的核心平臺上(雙STC 89C52)。3、軟件編程:我們搭載完硬件結構,又對硬件進行綜合的運用,第一步,調試電機控制。第二步,

6、實現(xiàn)有線對小車電機遙控。第三步、實現(xiàn)無線對小車的電機遙控。第四步,實現(xiàn)無線的視頻傳輸。第五步,實現(xiàn)人體紅外模塊的獨立功能。第六步、實現(xiàn)人體紅外模塊與小車無線遙控綜合功能(對小車遙控,和小車回傳)。第七步、分步實現(xiàn)、綜合煙霧信息回傳、酒精氣體回傳、左右是否有障礙物回傳。第八步、實現(xiàn)超聲波跟蹤功能。(可對物體進行跟蹤、追蹤拍攝)。第九步、實現(xiàn)超聲波測距,并回傳。5、 最終調試與銜接。把每一個獨立的模塊,結合成一個獨立的窗口顯示。最后達到綜合探測的目的。把相對獨立的功能結合。最后使多功能變成綜合功能。三、硬件電路結構1、USB轉RS232結構電路2、測速傳感器電路3、核心單片機通訊接口電路,傳感器接

7、口電路,蜂鳴器電路。4、藍牙串口電路,LCD顯示電路5、U1U2核心單片機接口及電路。6、 復位電路、時鐘電路。7、 直流電動機驅動電路及工作原理。8、 擴展接口電路 9、 直流電機工作原理。10、 傳感器參數(shù)及其資料。四、面向硬件編程程序1、小車無線控制與傳感器數(shù)據(jù)回傳。(1)U1程序#include #define left P3_2#define right P3_3#define go P3_4#define back P3_5#define leftdata 0x11#define rightdata 0x22#define godata 0x33#define backdata 0

8、x44#define man P1_0 /定義串口/#define yan P1_1#define jiu P1_2 /#define uchar unsigned char#define uint unsigned int unsigned char a,b,flag,flag1=1;char code MESSAGE=有人: ;/查表顯示/char code QITI=煙霧:;char code ALL=酒精: ;void send(void);void delay1ms(unsigned int x) /延時子程序/ unsigned int i,j; for(j=x;j0;j-) fo

9、r(i=75;i0;i-); /初始化工作方式/void InitCom(void)SCON = 0x50; /REN=1允許串行接受狀態(tài),串口工作模式2 TMOD|= 0x21; /定時器工作方式2 PCON|= 0x00; /波特率提高一倍 TH1=0xfd;TL1=0xfd;/9600波特率TR1=1;/開定時器計數(shù)SM0=0;SM1=1;/串行工作方式1REN=1;/允許接收數(shù)據(jù)EA=1;/開中斷總開關ES=1;/允許串 TR0=1;TF0=0;ET0=1;void intT0() interrupt 1 /中斷/ TH0=-2720/256; TL0=-2720%256; send(

10、); void send(void) /發(fā)送傳感器數(shù)據(jù)子程序/ unsigned char w,m,r; if(man = 1 ) SBUF = MESSAGEw; while(TI=0); TI=0; w+; b=a=0; yan=1; jiu=0; if(yan = 0) SBUF = QITIm; while(TI=0); TI=0; m+; b=a=0; if(jiu=1) SBUF = ALLr; while(TI=0); TI=0; r+; b=a=0; main() TH0=-2720/256; TL0=-2720%256; ET0=1;InitCom(); while(1) i

11、f(flag=1) flag=0; flag1=1; if(b!=a) left=1; right=1; go=1; back=1; switch(b) case leftdata:left=0;break; case rightdata:right=0;break; case godata:go=0;break; case backdata:back=0;break; a=b; flag1=0; delay1ms(300); else left=1; right=1; go=1; back=1; /if(flag1=0)/ send();/ void serial() interrupt 4

12、 /中斷法ET0=0;flag=1;flag1=1;b=SBUF;RI=0;/中斷標志ET0=1; (2)U2程序。/下載到U2,然后用遙控器控制其方向#include #define uchar unsigned char#define uint unsigned intvoid motor_r_z(void);/右邊電動機正轉void motor_l_z(void);/左邊電動機正轉void motor_r_f(void);/右邊電動機反轉void motor_l_f(void);/左邊電動機反轉void back(uchar,uchar); /小車后退void go(uchar,ucha

13、r);/小車前進void stop(void);/小車停止void left(void);/小車左轉void right(void);/小車右轉sbit PWM1=P25;sbit PWM2=P24;sbit PWM3=P21;sbit PWM4=P22;sbit EN1=P20;sbit EN2=P23;sbit left_k=P02;sbit back_k=P05;sbit go_k=P04;sbit right_k=P03;sbit sound=P27;uchar data t_0;uchar data motor_r;uchar data motor_l;uchar data Valu

14、e;uchar data mid;/*延時子程序*/void ini(void)/T0初始化/TMOD=0x01; /T0工作在方式1TH0=0xff; /裝入T0初值TL0=0xf6;TR0=1;/開T0中斷ET0=1;/T0允許中斷EA=1;/t_0=0;/P2=0;sound=1;void go(uchar left_motor,uchar right_motor)/直行Value=right_motor;motor_r_z();Value=left_motor;motor_l_z();void back(uchar left_motor,uchar right_motor)/后退Val

15、ue=right_motor;motor_r_f();Value=left_motor;motor_l_f();void left(void)/左轉Value=0x45;motor_r_z();Value=0x45;motor_l_f();void right(void)/右轉Value=0x45;motor_r_f();Value=0x45;motor_l_z();void motor_r_z(void)/右邊電動機正轉 ACC=0x64+Value; motor_r=ACC; EN1=1;void motor_l_z(void)/左邊電動機正轉 ACC=0x64-Value; motor_

16、l=ACC; EN2=1;void motor_r_f(void)/右邊電動機反轉 ACC=0x64-Value; motor_r=ACC; EN1=1;void motor_l_f(void)/左邊電動機反轉 ACC=0x64+Value; motor_l=ACC; EN2=1;void stop(void)EN2=0;EN1=0;void time0(void) interrupt 1 using 2TR0=0;TH0=0xff;TL0=0xf6;+t_0;ACC=t_0;CY=0;ACC-=motor_r;if(CY=1)PWM1=1;PWM2=0;goto PWM_2;PWM1=0;P

17、WM2=1;PWM_2:ACC=t_0;CY=0;ACC-=motor_l;if(CY=1)PWM3=1;PWM4=0;goto HIGHT;PWM3=0;PWM4=1;HIGHT:ACC=t_0;if(ACC!=0xc9)goto EXIT;ACC=0;t_0=ACC;EXIT:TR0=1; void main(void)ini();/判斷左傳感器狀態(tài)/while(1)aa: while(left_k)/當左按鍵按下時,left_k等于1. goto bb; P1=0xff; P1=P0; left();/向左轉 while(!left_k);/如果left_k一直為一,小車便一直左轉 st

18、op();/判斷右鍵是否按下,注釋請參考上一段/bb: while(right_k) goto dd; P1=0xff; P1=P0; right(); while(!right_k); stop();/判斷向前鍵是否按下/dd: while(go_k) goto ee; P1=0xff; P1=P0; go(0x64,0x64); while(!go_k); stop();/判斷后退鍵是否按下/ee: while(back_k) goto aa; P1=0xff; P1=P0; back(0x64,0x64); while(!back_k);stop();2、超聲波跟蹤(1)U1程序/請將此

19、程序下載到U1,并且把兩機通訊開關的第1位拔到ON的狀態(tài)/另外一條程序下載到U2#include /器件配置文件#include #define RX P2_0#define TX P2_1#define LCM_RW P2_6 /定義LCD引腳#define LCM_RS P2_5#define LCM_E P2_7#define LCM_Data P0#define Key_Data P3_1 /定義Keyboard引腳#define Key_CLK P3_2#define Busy 0x80 /用于檢測LCM狀態(tài)字中的Busy標識void LCMInit(void);/LCD初始化函數(shù)v

20、oid DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);/LCD顯示一個字符函數(shù)void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData);/LCD顯示一個字符串函數(shù)void Delay5Ms(void);/延時5毫秒函數(shù)void Delay400Ms(void);/延時400毫秒函數(shù)void Decode(unsigned char ScanCode);void WriteDataLCM(unsig

21、ned char WDLCM);/LCD1602寫數(shù)據(jù)函數(shù)void WriteCommandLCM(unsigned char WCLCM,BuysC);/LCD寫命令函數(shù)/unsigned char ReadDataLCM(void);unsigned char ReadStatusLCM(void);unsigned char code Range =Range Finder=;/LCD1602顯示格式unsigned char code ASCII13 = .-M;unsigned char code table=Distance:000.0cm;unsigned char code t

22、able1=! Out of range;/static unsigned char DisNum = 0; /顯示用指針 unsigned int time=0;unsigned long S=0;bit flag =0;unsigned char disbuff4= 0,0,0,0,;/寫數(shù)據(jù)void WriteDataLCM(unsigned char WDLCM) ReadStatusLCM(); /檢測忙LCM_Data = WDLCM;LCM_RS = 1;LCM_RW = 0;LCM_E = 0; /若晶振速度太高可以在這后加小的延時LCM_E = 0; /延時LCM_E = 1

23、;/寫指令void WriteCommandLCM(unsigned char WCLCM,BuysC) /BuysC為0時忽略忙檢測if (BuysC) ReadStatusLCM(); /根據(jù)需要檢測忙LCM_Data = WCLCM;LCM_RS = 0;LCM_RW = 0;LCM_E = 0;LCM_E = 0;LCM_E = 1;/讀狀態(tài)unsigned char ReadStatusLCM(void)LCM_Data = 0xFF; LCM_RS = 0;LCM_RW = 1;LCM_E = 0;LCM_E = 0;LCM_E = 1;while (LCM_Data & Busy

24、); /檢測忙信號return(LCM_Data);void LCMInit(void) /LCM初始化LCM_Data = 0;WriteCommandLCM(0x38,0); /三次顯示模式設置,不檢測忙信號Delay5Ms(); WriteCommandLCM(0x38,0);Delay5Ms(); WriteCommandLCM(0x38,0);Delay5Ms(); WriteCommandLCM(0x38,1); /顯示模式設置,開始要求每次檢測忙信號WriteCommandLCM(0x08,1); /關閉顯示WriteCommandLCM(0x01,1); /顯示清屏WriteC

25、ommandLCM(0x06,1); / 顯示光標移動設置WriteCommandLCM(0x0c,1); / 顯示開及光標設置/按指定位置顯示一個字符void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData)Y &= 0x1;X &= 0xF; /限制X不能大于15,Y不能大于1if (Y) X |= 0x40; /當要顯示第二行時地址碼+0x40;X |= 0x80; /算出指令碼WriteCommandLCM(X, 1); /發(fā)命令字WriteDataLCM(DData); /發(fā)數(shù)據(jù)/按指定位置顯示

26、一串字符void DisplayListChar(unsigned char X, unsigned char Y, unsigned char code *DData)unsigned char ListLength; ListLength = 0;Y &= 0x1;X &= 0xF; /限制X不能大于15,Y不能大于1while (DDataListLength0x19) /若到達字串尾則退出if (X = 0xF) /X坐標應小于0xFDisplayOneChar(X, Y, DDataListLength); /顯示單個字符ListLength+;X+;/5ms延時void Delay

27、5Ms(void)unsigned int TempCyc = 5552;while(TempCyc-);/400ms延時void Delay400Ms(void)unsigned char TempCycA = 5;unsigned int TempCycB;while(TempCycA-)TempCycB=7269;while(TempCycB-);/*/ void Conut(void) time=TH0*256+TL0; TH0=0; TL0=0; S=(time*1.7)/10; /算出來是MM if(S=7000)|flag=1) /超出測量范圍 P3_2=1; flag=0; D

28、isplayListChar(0, 1, table1); else disbuff0=S%10; disbuff1=S/10%10; disbuff2=S/100%10; disbuff3=S/1000; DisplayListChar(0, 1, table); DisplayOneChar(9, 1, ASCIIdisbuff3); DisplayOneChar(10, 1, ASCIIdisbuff2); DisplayOneChar(11, 1, ASCIIdisbuff1); DisplayOneChar(12, 1, ASCII10); DisplayOneChar(13, 1,

29、 ASCIIdisbuff0); /*/ void zd0() interrupt 1 /T0中斷用來計數(shù)器溢出,超過測距范圍 flag=1; /中斷溢出標志RX=0; /*/ void StartModule() /啟動模塊 TX=1; /啟動一次模塊 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _

30、nop_(); _nop_(); TX=0; /*/ void Timer_Count(void) TR0=1; /開啟計數(shù) while(RX);/當RX為1計數(shù)并等待 TR0=0;/關閉計數(shù) Conut();/計算/*/void main(void) unsigned int valA;Delay400Ms(); /啟動等待,等LCM講入工作狀態(tài)LCMInit(); /LCM初始化Delay5Ms(); /延時片刻DisplayListChar(0, 0, Range);DisplayListChar(0, 1, table);/ReadDataLCM();/測試用句無意義 TMOD=0x0

31、1;/設T0為方式1,GATE=1; EA=1; TH0=0; TL0=0; ET0=1; /允許T0中斷 /開啟總中斷 while(1) RX=1; StartModule(); for(valA=7510;valA0;valA-) if(RX=1) Timer_Count(); 2、U2程序#include #define uchar unsigned char#define uint unsigned intvoid motor_r_z(void);/右邊電動機正轉void motor_l_z(void);/左邊電動機正轉void motor_r_f(void);/右邊電動機反轉void

32、 motor_l_f(void);/左邊電動機反轉void back(uchar,uchar); /小車后退void go(uchar,uchar);/小車前進void stop(void);/小車停止void left(void);/小車左轉void right(void);/小車右轉sbit PWM1=P25;sbit PWM2=P24;sbit PWM3=P21;sbit PWM4=P22;sbit EN1=P20;sbit EN2=P23;sbit Signal=P02;sbit start_k=P32;sbit stop_k=P33;sbit sound=P27;uchar data

33、 t_0;uchar data motor_r;uchar data motor_l;uchar data Value;uchar data mid;/*延時子程序*/void delay_1ms(uint n)uint i,j;for(j=n;j0;j-)for(i=20;i0;i-);void ini(void)/T0初始化/TMOD=0x01; /T0工作在方式1TH0=0xff; /裝入T0初值TL0=0xf6;TR0=1;/開T0中斷ET0=1;/T0允許中斷EA=1;/t_0=0;/P2=0;sound=0;void Sound(void)/蜂鳴器響/sound=0;delay_1

34、ms(30);sound=0;void start(void) uchar a; aa: while(start_k); for(a=0;a50;a+) delay_1ms(1); while(start_k) goto aa; Sound(); go(0x30,0x30);void go(uchar left_motor,uchar right_motor)/直行Value=right_motor;motor_r_z();Value=left_motor;motor_l_z();void back(uchar left_motor,uchar right_motor)/后退Value=rig

35、ht_motor;motor_r_f();Value=left_motor;motor_l_f();void motor_r_z(void)/右邊電動機正轉 motor_r=0x64+Value; EN1=1;void motor_l_z(void)/左邊電動機正轉 motor_l=0x64-Value; EN2=1;void motor_r_f(void)/右邊電動機反轉 motor_r=0x64-Value; EN1=1;void motor_l_f(void)/左邊電動機反轉 motor_l=0x64+Value; EN2=1;void stop(void)EN2=0;EN1=0;voi

36、d time0(void) interrupt 1 using 2TR0=0;TH0=0xff;TL0=0xf6;+t_0;ACC=t_0;CY=0;ACC-=motor_r;if(CY=1)PWM1=1;PWM2=0;goto PWM_2;PWM1=0;PWM2=1;PWM_2:ACC=t_0;CY=0;ACC-=motor_l;if(CY=1)PWM3=1;PWM4=0;goto HIGHT;PWM3=0;PWM4=1;HIGHT:ACC=t_0;if(ACC!=0xc9)goto EXIT;ACC=0;t_0=ACC;EXIT:TR0=1; void main(void)uchar a;

37、ini();start();/判斷U1P3.2是否輸出低電平/如果是低電平,小車后退/如果是高電平,小車前進/while(1)aa: while(Signal) goto cc; P1_0=0; P2_7=0; while(!Signal) back(0x35,0x35); go(0x35,0x35); P1_0=1; P2_7=1;/判斷是否按下停止按鈕/cc: while(stop_k) goto aa; for(a=0;a20;a+) delay_1ms(1); while(stop_k) goto cc; stop(); start();3、紅外躲避障礙自動行走U2程序#include

38、 #define uchar unsigned char#define uint unsigned intvoid motor_r_z(void);/右邊電動機正轉void motor_l_z(void);/左邊電動機正轉void motor_r_f(void);/右邊電動機反轉void motor_l_f(void);/左邊電動機反轉void back(void); /小車后退void go(uchar,uchar);/小車前進void stop(void);/小車停止void left(void);/小車左轉void right(void);/小車右轉sbit PWM1=P25;sbit

39、PWM2=P24;sbit PWM3=P21;sbit PWM4=P22;sbit EN1=P20;sbit EN2=P23;sbit left_k=P02;sbit right_k=P05;sbit start_k=P33;sbit stop_k=P32;sbit sound=P27;uchar data t_0;uchar data motor_r;uchar data motor_l;uchar data Value;uchar data mid;/*延時子程序*/void delay_1ms(uint n)uint i,j;for(j=n;j0;j-)for(i=20;i0;i-);void ini(void)/T0初始化/TMOD=0x01; /T0工作在方式1TH0=0xff; /裝入T0初值TL0=0xf6;TR0=1;/開T0中斷ET0=1;/T0允許中斷EA=1;t_0=0;P2=0;sound=1;void Sound(void)/蜂鳴器響/sound=0;delay_1ms

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論