51单片机智能小车——寻迹
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                51单片机智能小车——寻迹
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                材料:
(1)51單片機開發板
(2)l298n電機驅動模塊1個
(3)四個電機
(4)尋跡紅外2個
一、組裝
(1)L298N電機驅動模塊與開發板接線如下圖:
尋跡紅外接線:
?
說明:
紅外一OUT接 單片機P1.5
紅外二OUT接 單片機P1.4
?代碼:
如果速度過大,小車可能會甩出軌道,速度可調占空比降速度。
#include "reg52.h"typedef unsigned char u8; typedef unsigned int u16;//電機控制管腳 sbit MOTOA=P1^0; sbit MOTOB=P1^1; sbit MOTOC=P1^2; sbit MOTOD=P1^3; //紅外感應控制管腳 sbit Left_In=P1^4; sbit Right_In=P1^5; u16 time_cnt=0; //定時器中斷計數次數 u16 freq=100; //頻率 u8 duty_cycle=50; //占空比//延時函數10*us(us) void delay_10us(u16 us) {while(us--); }//ms延時函數ms void delay_ms(u16 ms) {u16 i,j;for(i=ms;i>0;i--)for(j=110;j>0;j--); }//定時器0初始化函數 //定時時間:0.1ms void Time0_Init(void) {TMOD|=0x01;TH0 = 0XFF;TL0 = 0X9C; //定時0.1msTR0 = 1;ET0 = 1;EA = 1; }//主函數 void main() {Time0_Init(); while(1){} }void Time0_Isr() {TR0 = 0; //關閉定時器TH0 = 0XFF;TL0 = 0X9C; time_cnt++; if(time_cnt>=freq) time_cnt=0;else if(time_cnt<=duty_cycle){if((Left_In==0)&&(Right_In==0)) //左右紅外沒有檢測到黑線--前進{MOTOA=1;MOTOB=0;MOTOC=1;MOTOD=0; }else if((Left_In==1)&&(Right_In==0)) //左紅外檢測到黑線--左轉{MOTOA=1;MOTOB=0;MOTOC=0;MOTOD=1; }else if((Left_In==0)&&(Right_In==1)) //右紅外檢測到黑線--右轉{MOTOA=0;MOTOB=1;MOTOC=1;MOTOD=0; }else if((Left_In==1)&&(Right_In==1)) //左右紅外檢測到黑線--停止{MOTOA=0;MOTOC=0;MOTOB=0;MOTOD=0; }} else{if((Left_In==0)&&(Right_In==0)) //左右紅外沒有檢測到黑線--前進{MOTOA=1;MOTOB=0;MOTOC=1;MOTOD=0; }}TR0 = 1; //開啟定時器0 }?
?
總結
以上是生活随笔為你收集整理的51单片机智能小车——寻迹的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: java代码审查检查表
- 下一篇: 计算机毕业设计Java高校共享单车管理系
