找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 7589|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)紅外小車

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:73477 發(fā)表于 2015-2-10 20:19 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
       單片機(jī)熟悉了,自然就要開(kāi)始做小車了。準(zhǔn)備工作當(dāng)然是淘寶啦,買了一個(gè)3輪到小車底盤32元,L298N雙電機(jī)控制電路板22元,還有一些扎帶、銅柱、電池盒等,都是很便宜的東西。紅外只有1條數(shù)據(jù)線,十分簡(jiǎn)單,就從紅外遙控開(kāi)始。把紅外的例程改一下,就成了紅外遙控的程序了。這里有2個(gè)小插曲,我放上車子的是6塊錢的最小板(其實(shí)就是把IO引出來(lái),加個(gè)晶振),P0沒(méi)有上拉電阻,所以不能連電機(jī)控制板,改用P1就好了。還有對(duì)單片機(jī)編程不熟,main()函數(shù)里一定要加一個(gè)while(1){}的死循環(huán),不然程序馬上就結(jié)束了(很菜是吧:) )。這里要說(shuō)明一下的是紅外的信號(hào)不是連續(xù)的,所以是按一下就執(zhí)行某個(gè)動(dòng)作,要停止還得按停止按鍵。先在電腦上測(cè)試程序,測(cè)試好后,把4個(gè)充電電池裝到電池盒,同時(shí)給51單片機(jī)和電機(jī)控制板供電,搞定。開(kāi)車?yán)病?div align="center">


51單片機(jī)程序代碼
/*

IN1 > P10
IN2 > P11
IN3 > P12
IN4 > P13
*/
/*預(yù)處理命令*/

#include<reg52.h>    //包含單片機(jī)寄存器的頭文件
#include<intrins.h> //包含_nop_()函數(shù)定義的頭文件
#define uchar unsigned char
#define uint unsigned int
#define motor P1
/* 函數(shù)申明 -----------------------------------------------*/
void delay(uchar x);
/* 變量定義 -----------------------------------------------*/
sbit IRIN=P3^2; //紅外數(shù)據(jù)線
uchar IRCOM[7];
/*
********************************************************************************
** 函數(shù)名稱 : main(void)
** 函數(shù)功能 : 主函數(shù)
********************************************************************************
*/
main()
{
IRIN=1;     //I/O口初始化
EA=1;
EX0=1;//中斷0
motor=0xff;
while(1){
}
}
/*
********************************************************************************
** 函數(shù)名稱 : delay(uchar x)
** 函數(shù)功能 : 延時(shí)函數(shù)
********************************************************************************
*/
void delay(uchar x)    //x*0.14MS
{
uchar i;
while(x--)
{
for(i=0;i<13;i++);
}
}

/*********************************************************/
/*
********************************************************************************
** 函數(shù)名稱 : IR_IN() interrupt 0 using 0
** 函數(shù)功能 : 信號(hào)外部中斷函數(shù)功能
********************************************************************************
*/
void IR_IN() interrupt 0 using 0
{
uchar j,k,N=0;
EX0=0;   
delay(15);
if(IRIN==1)
{
EX0=1;
return;
}
                            //確認(rèn)IR信號(hào)出現(xiàn)
while(!IRIN)             //等IR變?yōu)楦唠娖,跳過(guò)9ms的前導(dǎo)低電平信號(hào)。
    {
delay(1);
}
for(j=0;j<4;j++)         //收集四組數(shù)據(jù)
{
for (k=0;k<8;k++)        
{
while (IRIN)         
{
delay(1);
}
while (!IRIN)         
     {
delay(1);
}
     while(IRIN)         
{
delay(1);
N++;           
if(N>=30)
{
EX0=1;
return;
}
      }                                
     IRCOM[j]=IRCOM[j] >> 1;              
     if(N>=8)
{
IRCOM[j]=IRCOM[j] | 0x80;
}
     N=0;
}
}
if (IRCOM[2]!=~IRCOM[3])
{
EX0=1;
return;
}
IRCOM[5]=IRCOM[2] & 0x0F;     //取鍵碼的低四位
IRCOM[6]=IRCOM[2] >> 4;       //右移4次,高四位變?yōu)榈退奈?br /> if(IRCOM[5]>9)
    {
IRCOM[5]=IRCOM[5]+0x37;
}
else
IRCOM[5]=IRCOM[5]+0x30;
if(IRCOM[6]>9)
    {
IRCOM[6]=IRCOM[6]+0x37;
}
else
IRCOM[6]=IRCOM[6]+0x30;
/*******************遙控信號(hào)功能選擇區(qū)*******************/
if(IRCOM[2]==0x40){//‘+’鍵
motor=0xf5;
}else if(IRCOM[2]==0x19){ //'-'
motor=0xfa;
}else if(IRCOM[2]==0x7){ //'<<'
motor=0xf7;
}else if(IRCOM[2]==0x9){ //'>>'
motor=0xfd;
}else if(IRCOM[2]==0x16){ //'0'
motor=0xfe;
}else if(IRCOM[2]==0x0d){ //'c'
motor=0xfb;
}else if(IRCOM[2]==0x45){ //'off'
motor=0xff;
}
EX0=1;       //退出外部中斷
}




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂1 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:73187 發(fā)表于 2015-2-12 10:19 | 只看該作者
樓主以后  的電機(jī)驅(qū)動(dòng) 個(gè)人認(rèn)為 自己搭完全OK的  

QQ截圖20150212101745.jpg (169.42 KB, 下載次數(shù): 238)

QQ截圖20150212101745.jpg
回復(fù)

使用道具 舉報(bào)

板凳
ID:73187 發(fā)表于 2015-2-12 10:24 | 只看該作者
樓主 能否對(duì)  IRIN  紅外數(shù)據(jù)接收 做詳細(xì)解讀/?
回復(fù)

使用道具 舉報(bào)

地板
ID:73792 發(fā)表于 2015-2-21 23:37 | 只看該作者
貌似不錯(cuò)。。。。。
回復(fù)

使用道具 舉報(bào)

5#
ID:78462 發(fā)表于 2015-8-3 19:24 | 只看該作者
的確做的不錯(cuò)哦,贊了
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表