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

下載本文檔

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

文檔簡介

安陽工學院

《單片機基礎(chǔ)》課程大作業(yè)

《簡易紅外遙控小車設(shè)計》

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

專業(yè)班級:

姓名:

學號:

成績(教師填寫)

20年月日

一、課題名稱:

《簡易紅外遙控小車設(shè)計》

二、方法步驟:

1.總體設(shè)計

主要設(shè)計思想:

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

實現(xiàn)小車走、停、轉(zhuǎn)彎等功能。并通過軟件控制小車方向和PWM調(diào)速

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

軟件解碼,根據(jù)接收信息的不同通過PWM和控制函數(shù)做出響應(yīng),并且

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

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

主要設(shè)計任務(wù):

紅外遙控小車的設(shè)計主要分兩大步,第一是硬件實現(xiàn)的設(shè)計,

第二是單片機軟件實現(xiàn)的設(shè)計。

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

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

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

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

塊,PWM電機調(diào)速模塊,主程序。

2.設(shè)計任務(wù)與要求

⑴主要完成的性能指標

本小車設(shè)計完成后能夠?qū)崿F(xiàn)如下功能:前進、后退、左前傳(以

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

圓轉(zhuǎn)、左倒轉(zhuǎn)、右倒轉(zhuǎn)、緊急暫停、123級加減速。

(2)器件選擇

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

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

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

他電阻電容若干

(3)單片機選擇

本設(shè)計用到宏晶公司的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單片機最小系統(tǒng)如右:

紅外電路圖如下:

3紅外(HS0038)

CON2

L9110s電機驅(qū)動電路如下:

vcc

正轉(zhuǎn)信號

直流電機

反轉(zhuǎn)信號

L9110s電氣特性如下:

符號參數(shù)范圍

最小典型最大IAIBOAOB

VCC電源電壓2.5612VHLHL

Idd靜態(tài)電流—02uALHLH

lin操作電流200350500uALLLL

IC持續(xù)輸出電流750800850mAHHLL

IMax電流峰值—15002000mA

實現(xiàn)后的實物圖如下:

(6)流程圖及程序清單

〃***************簡易紅外小車完全調(diào)試程序

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

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

〃***************修改優(yōu)化時間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];〃用于紅外接收存放數(shù)據(jù)

〃延時函數(shù)

voiddelayl(uintxms)//delay0.1ms

uinti,j;

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

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

)

〃********************接受解碼函數(shù)

ucharRec()

uchartemp=0;〃函數(shù)內(nèi)部臨時變量,用于返回函數(shù)值

uinti=0;//用于存放數(shù)據(jù)的臨時變量

uintj=0;

uintm=0;//局部計數(shù)臨時變量

uintn=0;//局部計數(shù)臨時變量

uintk=0;//局部計數(shù)臨時變量

EX1=O;//關(guān)外部中斷1,以防再次外部1中斷的介入

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

delayl(l);

m++;//計數(shù)引導碼的長度

)

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

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

〃此次接收有誤,返回0

return0;//

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

(

delayl(l);

n++;〃計時高電平

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

都有問題

return0;

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

完畢

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

碼1,系統(tǒng)碼2,數(shù)據(jù)碼和數(shù)據(jù)反碼

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

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

〃不用關(guān)心前16位。

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

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

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

(

〃數(shù)據(jù)0由0.56ms低+0.56ms高組成即1:1

〃數(shù)據(jù)1由0.56ms低+1.655ms高組成1:3

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

(

delay1(1);

}

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

(

delayl(l);

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

)

databus[i]=databus[i]?1;//數(shù)據(jù)接收數(shù)組首先默認接收

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

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

為1,因為1的高點平持續(xù)1.655ms

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

就能確定為1

(

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

置1

}

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

);

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

它們是否相反,來確定接收數(shù)據(jù)

〃是否正確

return0;

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

returntemp;//

)

〃**********紅外接受中斷服務(wù)函數(shù),+接受編碼TEMPI,TEMP2

voidintO()interrupt2

{

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

uinti=0;//計數(shù)臨時變量

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

果)先滅緊急指示燈

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

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

{

caseOxOd:

(

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

LED1=LED2=LED3=1;〃對應(yīng)的指示燈狀態(tài)

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;〃緊急狀態(tài)(暫停)。TEMP2用于控制電機,暫停,前進,

左右轉(zhuǎn),

break;

)

case0x46:

(

TEMP2=1;〃前進

LED0=LED5=0;〃指示燈設(shè)置

LED6=LED7=1;

break;

)

case0x44:

(

TEMP2=2;〃左前轉(zhuǎn)

LED0=0;

LED5=1;

LED6=LED7=1;

break;

)

case0x43:

(

TEMP2=3;〃右前轉(zhuǎn)

LED5=0;

LED0=l;

LED6=LED7=1;

break;

)

case0x15:

(

TEMP2=4;//倒車狀態(tài)

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

LED0=LED5=l;

break;

)

case0x07:

(

TEMP2=5;〃左后轉(zhuǎn)

LED6=0;

LED7=LED0=LED5=1;

break;

)

case0x09:

TEMP2=6;〃右后轉(zhuǎn)

LED7=0;

LED6=LED0=LED5=1;

break;

)

case0x45:

(

TEMP2=7;〃左園轉(zhuǎn)

LED0=LED7=0;

LED5=LED6=1;

break;

)

case0x47:

{

TEMP2=8;〃右園轉(zhuǎn)

LED5=LED6=0;

LED0=LED7=l;

break;

)

)

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

F=l;

delayl(300);

F=0;

EA=1;//開總中斷

EX1=1;//開外1中斷

rri=i;//下降沿觸發(fā)

)

〃**********電機驅(qū)動函數(shù)

voidPWM_RUN()

(

uintm=0;//臨時計數(shù)變量

ucharn=0;//

uinti=0;//

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

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

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

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

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

Mll=M12=M21=M22=0;

LED4=~LED4;〃設(shè)置緊急燈動作

delayl(lOOO);

)

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

Mll=l;

M12=0;

M21=l;

M22=0;

)

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

(

Mll=0;

M12=0;

M21=l;

M22=0;

)

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

(

Mll=l;

M12=0;

M21=0;

M22=0;

)

if(n==4)//mlm2倒轉(zhuǎn),實現(xiàn)倒車

(

Mll=0;

M12=l;

M21=0;

M22=l;

)

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

(

Mll=0;

M12=0;

M21=0;

M22=l;

)

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

(

Mll=0;

M12=l;

M21=0;

M22=0;

}

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

(

Mll=0;

M12=l;

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論