版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p><b> 單</b></p><p><b> 片</b></p><p><b> 機</b></p><p><b> 課</b></p><p><b> 程</b></p><p
2、><b> 設(shè)</b></p><p><b> 計</b></p><p><b> 引言</b></p><p> 制作一個基于51單片機的控制的無線控制小車。</p><p><b> 系統(tǒng)設(shè)計</b></p><
3、p> 由51單片機控制直流電機的正反轉(zhuǎn)來控制小車的運動。</p><p> 無線部分用來接收上位機(電腦或者手機)發(fā)出的信號,通過信號控制單片機調(diào)用函數(shù)程序來控制小車的運行狀態(tài)。</p><p> 無線部分:用藍牙從機的TTL接口接收信號反饋給單片機,還可以通過電腦的無線局域網(wǎng)網(wǎng)卡來控制路由器的TTL串口來控制單片機的狀態(tài)。由于藍牙模塊容易得到且接口方便,電壓可以用+5V控制,
4、攜帶方便,便于在小車上安裝。</p><p> 電機驅(qū)動:電機驅(qū)動需要大電流,較高的電壓,考慮到單片機的負載能力,用L298N驅(qū)動模塊來驅(qū)動電機,單片機輸出邏輯信號控制L298N模塊輸出正反向電壓,由此控制電機的正反轉(zhuǎn)。</p><p> 小車的運動狀態(tài):小車為四輪驅(qū)動,一側(cè)的兩個電機分為一組。</p><p><b> 軟件設(shè)計</b>
5、</p><p><b> 單片機電路:</b></p><p> 由p1口輸出邏輯電平驅(qū)動L298N電路</p><p> L298N驅(qū)動電機電路,供給+5V和+12V電壓</p><p><b> 系統(tǒng)的仿真與調(diào)試</b></p><p> 用簡單程序仿真測試電
6、路連接情況</p><p><b> 匯編程序代碼:</b></p><p> org 0000h</p><p><b> ajmpmain</b></p><p><b> org0080h</b></p><p><b>
7、 main:</b></p><p> mova,#0ffh</p><p> mov p1,a;不轉(zhuǎn)</p><p> call delay;延時</p><p> loop:mova,#00ah;正轉(zhuǎn)</p><p><b> movp1,a</b&g
8、t;</p><p> calldelay</p><p> mova,#0ffh;停止</p><p> mov p1,a</p><p> calldelay</p><p> mova,#005h;反轉(zhuǎn)</p><p><b> movp1,a<
9、;/b></p><p> calldelay</p><p> mova,#0ffh;停止</p><p> mov p1,a</p><p> calldelay</p><p> jmp loop</p><p> delay:mov r5,#50
10、;延時。</p><p> d1: mov r6,#40</p><p> d2:mov r7,#248</p><p><b> djnz r7,$</b></p><p> djnz r6,d2</p><p> djnz r5,d1</p><p>&l
11、t;b> ret</b></p><p><b> end</b></p><p> 仿真結(jié)果:電機正反轉(zhuǎn)均正常</p><p><b> 小車程序:</b></p><p> 用單片機控制小車的四個狀態(tài),前進,后退,左轉(zhuǎn),右轉(zhuǎn)。由四個函數(shù)實現(xiàn),執(zhí)行條件為中斷。當藍牙從機
12、接收到數(shù)據(jù)傳輸?shù)絾纹瑱C時,單片機內(nèi)部選擇指令,調(diào)動while函數(shù),判斷指令數(shù)據(jù),從而控制小車狀態(tài)。</p><p><b> 程序設(shè)計</b></p><p> 循環(huán)函數(shù),控制小車的狀態(tài)</p><p><b> while(1)</b></p><p><b> {</b&
13、gt;</p><p> switch(Buffer[0])</p><p><b> {</b></p><p> case 0: Moto_Stop(); break;</p><p> case 1: Moto_Forward(); break;</p><p> case 2:
14、Moto_Backward(); break;</p><p> case 3: Moto_TurnLeft(); break;</p><p> case 4: Moto_TurnRight(); break;</p><p> default:break; </p><p><b> }</b></p&
15、gt;<p><b> }</b></p><p><b> 總結(jié)(心得體會)</b></p><p><b> 是否完成</b></p><p><b> 程序清單</b></p><p> #include<reg52.h
16、> </p><p> #include<math.h> </p><p> #define uchar unsigned char </p><p> #define uint unsigned int </p><p> uchar Buffer[4] = {0}; //從串口接收的數(shù)據(jù)</p>&
17、lt;p><b> uint i,j;</b></p><p> sbit Left_Positive=P1^0;</p><p> sbit Left_Negative=P1^1;</p><p> sbit Right_Positive=P1^2;</p><p> sbit Right_Negati
18、ve=P1^3;</p><p> sbit LeftLight=P2^1;</p><p> sbit RightLight=P2^2;</p><p> /********************************************************************</p><p> * 名稱 : Del
19、ay_1ms()</p><p> * 功能 : 延時子程序,延時時間為 1ms * x</p><p> * 輸入 : x (延時一毫秒的個數(shù))</p><p><b> * 輸出 : 無</b></p><p> ************************************************
20、***********************/</p><p> void Delay_1ms(uint i)//1ms延時</p><p><b> {</b></p><p> uchar x,j;</p><p> for(j=0;j<i;j++)</p><p> for
21、(x=0;x<=148;x++); </p><p><b> }</b></p><p> /********************************************************************</p><p> * 名稱 : Com_Int()</p><p> *
22、功能 : 串口中斷子函數(shù)</p><p><b> * 輸入 : 無</b></p><p><b> * 輸出 : 無</b></p><p> ***********************************************************************/</p>&
23、lt;p> void Com_Int(void) interrupt 4</p><p><b> {</b></p><p><b> EA = 0;</b></p><p> if(RI == 1) //當硬件接收到一個數(shù)據(jù)時,RI會置位</p><p><b> {&
24、lt;/b></p><p> Buffer[0] = SBUF - 48; //這里減去48是因為從電腦中發(fā)送過來的數(shù)據(jù)是ASCII碼。</p><p><b> RI = 0; </b></p><p><b> }</b></p><p><b> EA = 1;<
25、;/b></p><p><b> }</b></p><p> /********************************************************************</p><p> * 名稱 : Com_Init()</p><p> * 功能 : 串口初始化,晶振
26、11.0592,波特率9600,使串口中斷</p><p><b> * 輸入 : 無</b></p><p><b> * 輸出 : 無</b></p><p> ***********************************************************************/<
27、/p><p> void Com_Init(void)</p><p><b> {</b></p><p> TMOD = 0x20;</p><p> PCON = 0x00;</p><p> SCON = 0x50; </p><p> TH1 = 0xFd
28、; //設(shè)置波特率 9600</p><p> TL1 = 0xFd;</p><p> TR1 = 1; //啟動定時器1</p><p> ES = 1; //開串口中斷</p><p> EA = 1; //開總中斷</p><p><b> }</b></p>&l
29、t;p> /********************************************************************</p><p> * 名稱 :Moto_Forward()</p><p> * 功能 : 電機1、2啟動,都是前進,整車表現(xiàn)為前進。</p><p><b> * 輸入 : 無</b&g
30、t;</p><p> * 輸出 : 無 問題</p><p> ***********************************************************************/</p><p&
31、gt; void Moto_Forward()</p><p><b> {</b></p><p> Right_Negative=0;</p><p> Left_Positive=0;</p><p> Left_Negative=1;</p><p> Right_Positi
32、ve=1;</p><p> Delay_1ms(100);</p><p><b> }</b></p><p> /********************************************************************</p><p> * 名稱 :Moto_Backward
33、()</p><p> * 功能 : 電機1、2啟動,都是后退,整車表現(xiàn)為后退。</p><p><b> * 輸入 : 無</b></p><p><b> * 輸出 : 無</b></p><p> ********************************************
34、***************************/</p><p> void Moto_Backward()</p><p><b> {</b></p><p> Left_Positive=0;</p><p> Right_Positive=0;</p><p> Righ
35、t_Negative=1;</p><p> Left_Negative=1;</p><p> Delay_1ms(100);</p><p><b> }</b></p><p> /***************************************************************
36、*****</p><p> * 名稱 :Moto_TurnLeft()</p><p> * 功能 : 電機1后退,電機2前進,整車表現(xiàn)為左轉(zhuǎn)。</p><p><b> * 輸入 : 無</b></p><p><b> * 輸出 : 無</b></p><p>
37、 ***********************************************************************/</p><p> void Moto_TurnLeft()</p><p><b> { </b></p><p> Left_Negative=0;</p><p>
38、; Right_Positive=0;</p><p> Right_Negative=1;</p><p> Left_Positive=1;</p><p> Delay_1ms(100);</p><p><b> }</b></p><p> /****************
39、****************************************************</p><p> * 名稱 :Moto_TurnRight()</p><p> * 功能 : 電機1前進,電機2后退,整車表現(xiàn)為右轉(zhuǎn)。</p><p><b> * 輸入 : 無</b></p><p>&l
40、t;b> * 輸出 : 無</b></p><p> ***********************************************************************/</p><p> void Moto_TurnRight()</p><p><b> { </b></p>
41、<p> Right_Negative=0;</p><p> Left_Negative=0;</p><p> Left_Positive=1;</p><p> Right_Positive=1;</p><p> Delay_1ms(100);</p><p><b> }&
42、lt;/b></p><p> /********************************************************************</p><p> * 名稱 :Moto_Stop()</p><p> * 功能 : 電機1停止,電機2停止,整車表現(xiàn)為停止。</p><p><b>
43、; * 輸入 : 無</b></p><p><b> * 輸出 : 無</b></p><p> ***********************************************************************/</p><p> void Moto_Stop()</p><
44、;p><b> { </b></p><p> Right_Negative=0;</p><p> Left_Negative=0;</p><p> Left_Positive=0;</p><p> Right_Positive=0;</p><p> Delay_1ms(
45、100);</p><p><b> }</b></p><p> void main()</p><p><b> {</b></p><p> Delay_1ms(100);</p><p> Com_Init();//串口初始化</
46、p><p> while(1)//循環(huán)結(jié)構(gòu),選擇函數(shù)控制小車的狀態(tài)</p><p><b> {</b></p><p> switch(Buffer[0])</p><p><b> {</b></p><p> case 0: Moto_Stop(); break;
47、</p><p> case 1: Moto_Forward(); break;</p><p> case 2: Moto_Backward(); break;</p><p> case 3: Moto_TurnLeft(); break;</p><p> case 4: Moto_TurnRight(); break;<
48、/p><p> default:break; </p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> 參考文獻</b></p>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 單片機智能儀器課程設(shè)計報告
- 單片機智能小車.rar
- 單片機智能循跡小車
- 單片機智能小車.rar
- 基于51單片機智能小車設(shè)計
- 單片機智能搶答器課程設(shè)計
- 單片機智能體溫計課程設(shè)計
- 單片機智能溫控器課程設(shè)計
- 單片機課程設(shè)計---電動智能小車
- 單片機課程設(shè)計--智能小車—硬件設(shè)計
- 基于單片機智能小車畢業(yè)設(shè)計(論文)
- 基于c語言單片機智能電子日歷課程設(shè)計
- 單片機藍牙門禁課程設(shè)計
- 計算機畢業(yè)設(shè)計---單片機智能小車設(shè)計
- 計算機畢業(yè)設(shè)計---單片機智能小車設(shè)計
- 綜合課程設(shè)計--基于51單片機智能家庭小管家
- 單片機循跡小車課程設(shè)計
- 單片機智能測厚儀設(shè)計
- 基于單片機智能小車設(shè)計說明書.doc
- 基于單片機智能小車設(shè)計說明書.doc
評論
0/150
提交評論