單片機大作業-簡易紅外遙控小車設計_第1頁
單片機大作業-簡易紅外遙控小車設計_第2頁
單片機大作業-簡易紅外遙控小車設計_第3頁
單片機大作業-簡易紅外遙控小車設計_第4頁
單片機大作業-簡易紅外遙控小車設計_第5頁
已閱讀5頁,還剩9頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

安陽工學院

《單片機基礎》課程大作業

《簡易紅外遙控小車設計》

院系:計算機科學與信息工程學院

專業班級:

姓名:

學號:

成績(教師填寫)

20年月日

一、課題名稱:

《簡易紅外遙控小車設計》

二、方法步驟:

1.總體設計

主要設計思想:

本設計利用通用紅外遙控器控制小車后輪兩個電機的動作來

實現小車走、停、轉彎等功能。并通過軟件控制小車方向和PWM調速

小車的轉速。具體思想如下:通過外部中斷1接收紅外信息,并通過

軟件解碼,根據接收信息的不同通過PWM和控制函數做出響應,并且

在二極管上面反映出來,所以說二極管充當車燈和檔位指示燈的作

用,且每次接收信號,蜂鳴器鳴叫用來顯示有信號的傳入。

主要設計任務:

紅外遙控小車的設計主要分兩大步,第一是硬件實現的設計,

第二是單片機軟件實現的設計。

(1)其中硬件又分幾塊:51單片機最小系統板,小型直流電機

(3?9V)驅動電路模塊,紅外接收模塊(已集成在最小系統板),蜂

鳴器和二極管顯示模塊,車體。

(2)軟件比較簡單,但也分了幾塊:外部中斷紅外接收解碼模

塊,PWM電機調速模塊,主程序。

2.設計任務與要求

⑴主要完成的性能指標

本小車設計完成后能夠實現如下功能:前進、后退、左前傳(以

做輪胎為軸轉彎)、右前轉、左圓轉(以車體為軸進行轉彎)、右

圓轉、左倒轉、右倒轉、緊急暫停、123級加減速。

(2)器件選擇

本設計主要用到以下材料:51單片機一個、通用遙控器一

個、紅外接收頭一個、5號電池7節、車體(雙電機+萬向輪)一套、

蜂鳴器一個、杜邦線若干、二極管9個、L9110s電機驅動芯片2個、其

他電阻電容若干

(3)單片機選擇

本設計用到宏晶公司的STC——125A32Ad單片機

(4)說明總體框圖(可選)

(5)畫出總線路圖(硬件)

UI8051+"0'

P101

PIOwc

39P0

PllPOO

38Pi

P12P01

37P0

P13P02

36P0

P14PO3

FIF~535P0

P15PN

P16^734P0

P16P05

33P0

P17P06

RST932P0

RESET_P07

31

RXDP30EA-^P

RT1T30

IXDP31ALEP

P3212n929

INIDP32°Q28P2

P3313SPE27

--INR.T33

PS414p2627P2

TOP34

P3515p2526Pl

T1/P35

P為16p2425Pl

-7座P36

P3717p2324P2

C成37

X:1Sp2223P2

X>

XI19p2122P2

XIp

工o21P2

f——(W

*cn

2PF22PF

51單片機最小系統如右:

紅外電路圖如下:

3紅外(HS0038)

CON2

L9110s電機驅動電路如下:

vcc

正轉信號

直流電機

反轉信號

L9110s電氣特性如下:

符號參數范圍

最小典型最大IAIBOAOB

VCC電源電壓2.5612VHLHL

Idd靜態電流—02uALHLH

lin操作電流200350500uALLLL

IC持續輸出電流750800850mAHHLL

IMax電流峰值—15002000mA

實現后的實物圖如下:

(6)流程圖及程序清單

〃***************簡易紅外小車完全調試程序

〃***************版本V02

〃***************2。12年5月13日10,49:26

〃***************修改優化時間2012年5月14日0:02:21

〃***************再次修改時間2012年5月18日20:49:28

〃***************Madeby

#include<reg52.h>

#include,'intrins.h,,

#defineuintunsignedint

#defineucharunsignedchar

sbitMH=PlA0;//電機1接口

sbitM12=PlAl;

sbitM21=P1A2;//電機2接口

sbitM22=P1A3;

sbitLED0=P0A0;//左前燈

sbitLEDl=P0Al;〃檔1燈

sbitLED2=P0A2;//檔2燈

sbitLED3=P0八3;//檔3燈

sbitLED4=P0A4;〃緊急燈

sbitLED5=P0A5;〃右前燈

sbitLED6=P0A6;〃左后燈

sbitLED7=P0A7;〃右后燈

sbitF=PU4;〃蜂鳴器接口

ucharTEMPl=O;〃全局變量,用于存放紅外返回值-用于PWM占空比的控制

ucharTEMP2=10;//用于方向的控制

sbitIntO=P3A3;//紅外接收采用外部中斷1

uchardatabus[7];〃用于紅外接收存放數據

〃延時函數

voiddelayl(uintxms)//delay0.1ms

uinti,j;

for(i=xms;i>0;i—)

for(j=13;j>0;j-);

)

〃********************接受解碼函數

ucharRec()

uchartemp=0;〃函數內部臨時變量,用于返回函數值

uinti=0;//用于存放數據的臨時變量

uintj=0;

uintm=0;//局部計數臨時變量

uintn=0;//局部計數臨時變量

uintk=0;//局部計數臨時變量

EX1=O;//關外部中斷1,以防再次外部1中斷的介入

while(!IntO)//用于計時前9Ms低電平的引導碼

delayl(l);

m++;//計數引導碼的長度

)

if(m<=60)//50,可變,大概數,m應該在90左右,如果引導

碼時間太小(如<50),就表示

〃此次接收有誤,返回0

return0;//

while(IntO)〃用于計時4.5ms高電平的引導碼

(

delayl(l);

n++;〃計時高電平

if(n<=30)〃20大概值,應該在45左右,如果太小或太大,

都有問題

return0;

〃當上面的兩步都完成時,表示9ms低電平,4.5ms高電平的引導碼驗證

完畢

〃可進行下步接收數據工作。后面有32位高低電平組成的編碼分為:系統

碼1,系統碼2,數據碼和數據反碼

〃其中前16位,為用戶識別碼(系統碼1和2)用于區別不同的電器,因為

使用的通用遙控器和接收器所以

〃不用關心前16位。

Mll=M12=M21=M22=0;〃進入中斷,停止電機,防止電機顫抖

for(i=0;i<4;i++)//4組接收

for(j=0;j<8;j++)//每組8個高低信號

(

〃數據0由0.56ms低+0.56ms高組成即1:1

〃數據1由0.56ms低+1.655ms高組成1:3

while(!IntO)〃過濾數據的低位0.56ms低電平

(

delay1(1);

}

while(IntO)//進入高電平計時

(

delayl(l);

k++;//k計時每次的高電平

)

databus[i]=databus[i]?1;//數據接收數組首先默認接收

為0信號,即databus[i]第7位移入0

if(k>=10)//而后,判斷剛才接收到的數據是否

為1,因為1的高點平持續1.655ms

〃低電平持續0.56ms,所以只要k大于10,

就能確定為1

(

databus[i]=databus[i]10x80;//若為1,把第8位

置1

}

k=0;〃把k的值重新置零

);

if(databus[2]!=~databus[3])//2和3組數據為反碼關系。所以判斷

它們是否相反,來確定接收數據

〃是否正確

return0;

temp=databus[2];//返回賦值

returntemp;//

)

〃**********紅外接受中斷服務函數,+接受編碼TEMPI,TEMP2

voidintO()interrupt2

{

uchartemp;//臨時存放紅外接收函數返回值

uinti=0;//計數臨時變量

LED4=1;〃(因緊急燈是閃爍的每次中斷時結果不一樣,為保證效

果)先滅緊急指示燈

temp=Rec();//紅外函數返回賦值

switch(temp)//對返回的數據進行編碼,方便后面的操作

{

caseOxOd:

(

TEMP1=O;//TEMPI,編碼用作,PWM參數,全局變量,

LED1=LED2=LED3=1;〃對應的指示燈狀態

break;

)

case0x0c:

(

TEMP1=1;

LED1=0;

LED2=LED3=1;

break;

)

case0x18:

(

TEMP1=2;

LED1=LED3=1;〃2檔

LED2=0;

break;

)

case0x5e:

(

TEMP1=3;〃TEMP1用于控制PWM占空比

LED3=0;

LED1=LED2=1;

break;

)

case0x40:

TEMP2=0;〃緊急狀態(暫停)。TEMP2用于控制電機,暫停,前進,

左右轉,

break;

)

case0x46:

(

TEMP2=1;〃前進

LED0=LED5=0;〃指示燈設置

LED6=LED7=1;

break;

)

case0x44:

(

TEMP2=2;〃左前轉

LED0=0;

LED5=1;

LED6=LED7=1;

break;

)

case0x43:

(

TEMP2=3;〃右前轉

LED5=0;

LED0=l;

LED6=LED7=1;

break;

)

case0x15:

(

TEMP2=4;//倒車狀態

LED6=LED7=0;〃67為倒車指示燈

LED0=LED5=l;

break;

)

case0x07:

(

TEMP2=5;〃左后轉

LED6=0;

LED7=LED0=LED5=1;

break;

)

case0x09:

TEMP2=6;〃右后轉

LED7=0;

LED6=LED0=LED5=1;

break;

)

case0x45:

(

TEMP2=7;〃左園轉

LED0=LED7=0;

LED5=LED6=1;

break;

)

case0x47:

{

TEMP2=8;〃右園轉

LED5=LED6=0;

LED0=LED7=l;

break;

)

)

〃每次接受紅外,蜂鳴器蜂鳴一次

F=l;

delayl(300);

F=0;

EA=1;//開總中斷

EX1=1;//開外1中斷

rri=i;//下降沿觸發

)

〃**********電機驅動函數

voidPWM_RUN()

(

uintm=0;//臨時計數變量

ucharn=0;//

uinti=0;//

m=TEMPl*100;〃111有0,1,2,3狀態,PWM每小時間片為3*100,所以m*100

n=TEMP2;//TEMPI用于控制轉速,TEMP2用于控制前后左右

〃對n(TEMP2)進行解碼,設置不同的電機工作方式

〃注:暫定M*1=LM*2=0正傳,M*l=0,M*2=l倒轉,M*l=M*2=0,停止

if(n==0)//緊急狀態,

Mll=M12=M21=M22=0;

LED4=~LED4;〃設置緊急燈動作

delayl(lOOO);

)

if(n==l)//ml和m2都前轉,前進

Mll=l;

M12=0;

M21=l;

M22=0;

)

if(n==2)//ml停止,m2前轉,實現左前轉彎

(

Mll=0;

M12=0;

M21=l;

M22=0;

)

if(n==3)//ml前轉,m2停止,實現右前轉

(

Mll=l;

M12=0;

M21=0;

M22=0;

)

if(n==4)//mlm2倒轉,實現倒車

(

Mll=0;

M12=l;

M21=0;

M22=l;

)

if(n==5)//ml停止,m2倒轉,實現左后轉

(

Mll=0;

M12=0;

M21=0;

M22=l;

)

if(n==6)//ml倒轉,m2停止,實現右后轉

(

Mll=0;

M12=l;

M21=0;

M22=0;

}

if(n==7)//ml倒傳,m2前轉,實現左方向,原地打轉

(

Mll=0;

M12=l;

溫馨提示

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

評論

0/150

提交評論