|
紅外遙控循跡超聲波避障跟隨光電碼盤計數(shù)測速五個中斷智能小車 *
通過紅外遙控,控制小車的方向,通過循跡前進,通過超聲波跟隨。通過光電碼盤計數(shù)測速,把52單片機的五個中斷用上了。。。
ryz學習
單片機源碼:
#include <intrins.h>
#include "reg52.h" //此文件中定義了單片機的一些特殊功能寄存器
#include "lcd.h"
#define uchar unsigned char
#define uint unsigned int
sfr T2MOD= 0xC9;
typedef unsigned int u16; //對數(shù)據(jù)類型進行聲明定義
typedef unsigned char u8;
unsigned char code ASCII[15] = {'0','1','2','3','4','5','6','7','8','9','.','-','M'};
//p0,25,26,27 lcd1602
sbit P10=P1^0; //尋跡模塊左
sbit P11=P1^1; //尋跡模塊中
sbit P12=P1^2; //尋跡模塊右
sbit key1=P1^3; //無線端口
sbit key2=P1^4;
sbit key3=P1^5;
sbit key4=P1^6;
sbit RX = P2^1; //超聲波端口
sbit TX = P2^0;
sbit IRIN=P3^2; //紅外端口
//p35測速端口
sbit SER=P2^3; //8 電機驅(qū)動端口
sbit SCK=P2^2; //4 en=0才工作
sbit RCK=P2^4; //12
//sbit PWM2A=P2^3; //未使用 低電平有效 12
//sbit PWM2B=P2^0; //未使用 低電平有效 3
unsigned int time1=0,kop,mm=0,s20=0,s21=0;
bit flag =0,flag1=0,flag3=0;//flag 超聲波超時標志,flag1,循跡標志,超聲波控制就不循跡。
u8 IrValue[6];
u8 Time;
//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F、H的顯示碼
char num[16]="CODE: DIR: "; //第一行顯示的數(shù)據(jù)
char num1[16]="IR: . / . "; //第二行顯示的數(shù)據(jù)
/*******************************************************************************
* 函 數(shù) 名 : delay
* 函數(shù)功能 : 延時函數(shù),i=1時,大約延時10us
*******************************************************************************/
void delay(u16 i)
{
while(i--);
}
void delayms(u16 i)//i=1時,時間為1ms
{ int q;
for(q=0;q<i;q++)
{
delay(100);
}
}
void delays(u16 i) //i=1時,時間為1s
{ int q;
for(q=0;q<i;q++)
{
delayms(1000);
}
}
/*******************************************************************************
* 函數(shù)名 :DigDisplay()
* 函數(shù)功能 :數(shù)碼管顯示函數(shù)
* 輸入 : 無
* 輸出 : 無
*******************************************************************************/
void HC595SendData(unsigned char SendVal)//發(fā)一字節(jié)
{
unsigned char i;
for(;i<8;i++)
{
SER = SendVal>>7;
SendVal= SendVal<<1;
SCK = 1;
_nop_();
_nop_();
SCK = 0;
RCK=1;
_nop_();
_nop_();
RCK=0;
}
}
/*******************************************************************************
* 函數(shù)名 : IrInit()
* 函數(shù)功能 : 初始化紅外線接收
* 輸入 : 無
* 輸出 : 無
*******************************************************************************/
void IrInit()
{
IT0=1;//下降沿觸發(fā)
EX0=1;//打開中斷0允許
EA=1; //打開總中斷
IRIN=1;//初始化端口
}
void Chaoshengbo()
{ TMOD |=0x01; //設(shè)T0為方式1,GATE=1;
TH0=0;
TL0=0;
ET0=1; //允許T0中斷
EA=1; //開啟總中斷
}
void cesu() //測速初始化
{
TH1=0x00;
TL1=0x00;
ET1=1;
//ET2=1;
TMOD |= 0x50;// 打開定時器和計數(shù)器T1,因此矩形脈沖輸入端接P3.5
RCAP2H=0x3C;
RCAP2L=0xb0;
T2CON=0;
T2MOD=0;
IE=0XA0;
TR1 = 1;
TR2 = 1;
}
char scan()
{ int key;
if(key1==1)
{ delayms(10);
if(key1==1){key=1;HC595SendData(0x66);num[12]= 'q';}
}
if(key2==1)
{ delayms(10);
if(key2==1){key=2;HC595SendData(0x99);num[12]= 'h';}
}
if(key3==1)
{ delayms(10);
if(key3==1){key=3;HC595SendData(0x78);num[12]= 'z';}
}
if(key4==1)
{ delayms(10);
if(key4==1){key=4;HC595SendData(0x87);num[12]= 'y';}
}
return key;
}
char Judge()
{
char num=-1;
switch(IrValue[2])
{
case 0x47:num=19;break;
case 0x46:num=18;break;
case 0x45:num=17;break;
case 0x43:num=16;break;
case 0x40:num=15;break;
case 0x44:num=14;break;
case 0x07:num=13;break;
case 0x15:num=12;break;
case 0x09:num=11;break;
case 0x19:num=20;break;
case 0x0D:num=10;break;
case 0x16:num=0;break;
case 0x0C:num=1;break;
case 0x18:num=2;break;
case 0x5E:num=3;break;
case 0x08:num=4;break;
case 0x1C:num=5;break;
case 0x5A:num=6;break;
case 0x42:num=7;break;
case 0x52:num=8;break;
case 0x4A:num=9;break;
default :num=16;break; //
}
return num;
}
int Conut()
{ unsigned long S=0;
while(!RX); //當RX為零時等待
TR0=1; //開啟計數(shù)
while(RX); //當RX為1計數(shù)并等待
TR0=0; //關(guān)閉計數(shù)
time1=TH0*256+TL0;
TH0=0;
TL0=0;
S=(time1*1.7)/100; //算出來是CM
return S;
}
0.png (7.5 KB, 下載次數(shù): 47)
下載附件
2019-1-10 16:03 上傳
全部資料51hei下載地址:
智能小車紅外遙控超聲波跟隨.zip
(61.89 KB, 下載次數(shù): 57)
2019-1-10 08:22 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|