熱門: 51單片機(jī) | 24小時(shí)必答區(qū) | 單片機(jī)教程 | 單片機(jī)DIY制作 | STM32 | Cortex M3 | 模數(shù)電子 | 電子DIY制作 | 音響/功放 | 拆機(jī)樂園 | Arduino | 嵌入式OS | 程序設(shè)計(jì)
![]() |
尋跡避障程序 #include<reg51.h> #define uchar unsigned char #define uint unsigned int sbit RM1=P0^0; sbit RM2=P0^1;//右電機(jī) sbit LM1=P0^2; sbit LM2=P0^3;//左電機(jī) sbit bzh=P2^6; sbit RAD=P0^6;//紅外接收右電機(jī)轉(zhuǎn) sbit LBD=P0^7;//紅外接收左電機(jī)轉(zhuǎn) sbit rs=P3^5;// LCD的RS sbit rw=P3^6;// LCD的R/W sbit en=P3^7;// LCD的E void lcd_string(uchar *strpoint); void delay(uint a) { uint b,c; for(b=a;b>0;b--) for(c=120;c>0;c--); } uchar i=0; void checkbusy()//檢查L(zhǎng)CD忙 { uchar dat; rs=0; //rs=1為數(shù)據(jù),=0為命令. rw=1; //rw=1為讀,=0為寫. do { P1=0x00; en=1; //E信號(hào)下降沿鎖存DB7~DBO dat=P1; //讀入P1的值 en=0; //鎖存 dat=0x80 & dat; //BUSY:1內(nèi)部在工作,0正常狀態(tài) }while(!(dat==0x00));rw=0; } void sentcom(uchar com) { checkbusy(); //檢查Busy rs=0; en=0; P1=com; delay(5); en=1; delay(5); en=0; } void sentdata(uchar date) //寫數(shù)據(jù) { checkbusy(); rs=1; en=0; P1=date; delay(5); en=1; delay(5); en=0; } //初始化 LCM void lcd_init() { sentcom(0x38);//功能設(shè)置,一次送8位數(shù)據(jù),基本指令集 sentcom(0x0C);//0000,1100 整體顯示,游標(biāo)off,游標(biāo)位置off sentcom(0x01);//0000,0001 清DDRAM sentcom(0x02);//0000,0010 DDRAM地址歸位 sentcom(0x80);//1000,0000 設(shè)定DDRAM 7位地址000,0000到地址計(jì)數(shù)器AC } void lcd_string(char*strpoint)//在當(dāng)前顯示位置顯示LCD字符串 { register i=0; while(strpoint[ i]!=0){ sentdata(strpoint[ i]); i++; } } void stop() { lcd_init(); sentcom(0x80); lcd_string("現(xiàn)代創(chuàng)新實(shí)訓(xùn)室 ");//C編譯系統(tǒng)本省也具有轉(zhuǎn)換功能,所以也可以這樣寫 sentcom(0x90); lcd_string("尋跡避障一體小車"); sentcom(0x88); lcd_string("--指導(dǎo):"); sentcom(0x98); lcd_string("--設(shè)計(jì): "); } void tracing() { sentcom(0x80); lcd_string("現(xiàn)代創(chuàng)新實(shí)訓(xùn)室 "); sentcom(0x90); lcd_string("--指導(dǎo):"); sentcom(0x88); lcd_string("--設(shè)計(jì): "); sentcom(0x98); lcd_string(" 小車尋跡中---"); } void bypass() { sentcom(0x80); lcd_string("現(xiàn)代創(chuàng)新實(shí)訓(xùn)室 "); sentcom(0x90); lcd_string("--指導(dǎo):"); sentcom(0x88); lcd_string("--設(shè)計(jì): "); sentcom(0x98); lcd_string(" 小車避障中---"); } void find() {tracing(); while(bzh==1) { if(LBD&&RAD==1) { RM1=1;LM1=1; RM2=0;LM2=0; } if(RAD==0) { RM1=0;LM1=1; RM2=0;LM2=0; if(LBD==0) { RM1=1;LM1=1; RM2=0;LM2=0; delay(i); } } if(LBD==0) { RM1=1;LM1=0; RM2=0;LM2=0; if(RAD==0) { RM1=1;LM1=1; RM2=0;LM2=0; delay(i); } } } } void bizhan() { bypass(); if(bzh==0) { RM1=1;LM1=0; RM2=0;LM2=1; delay(100); } } void main() { stop(); delay(2000); while(1) { find(); bizhan(); } } 來自基于51單片機(jī)制作的避障尋跡小車 |
你搜一下,論壇有一堆可參考 基于51單片機(jī)制作的避障尋跡小車 http://www.torrancerestoration.com/bbs/dpj-210555-1.html 尋跡避障小車電路、程序、電路分析、設(shè)計(jì)下載 http://www.torrancerestoration.com/bbs/dpj-78319-1.html |
Powered by 單片機(jī)教程網(wǎng)