📄 ta8435bujing.c
字号:
#include <reg52.H>
//#include<interins.h>
#define uint unsigned int
#define uchar unsigned char
/****************外部变量部分******************/
uchar m,s=3,t,tt=0;
uchar bb=0;
sbit ck1=P2^0;
sbit cw=P2^1;
sbit en1=P2^2;
sbit en2=P2^3;
sbit m1=P2^4;
sbit m2=P2^5;
sbit d1=P1^7;
sbit d0=P0^0;
sbit d2=P0^2;
/***************外部变量部分 ****************/
/***************函数申明部分*****************/
void shu();
void hong();
hongjue();
/***************函数申明部分*****************/
void init() //初始化/
{
EA=1;
TMOD=0x01;
TH0=(65536-100)/256;
TL0=(65536-100)%256;
ET0=1;
EX0=1;
IT0=1;
d1=0;
}
/*********************************红外部分**********************//////////
sbit IR_RE=P3^2;
bit k=0; //红外解码判断标志位,为0则为有效信号,为1则为无效
uchar n=0; //用来控制外部中断
uchar data date[4]; //date数组为存放地址原码,反码,数据原码,反码
delay(int z)
{
int s,t;
for(s=z;s>0;s--)
for(t=10;t>0;t--);
}
/*--------------------------延时1ms程子程序-----------------------*/
delay1000()
{
uint i,j;
for(i=0;i<1;i++)
for(j=0;j<124;j++)
;
}
/*---------------------------延时882us子程序-----------------------*/
delay882()
{
uint i,j;
for(i=0;i<1;i++)
for(j=0;j<109;j++)
;
}
/*--------------------------延时2400us程子程序-----------------------*/
delay2400()
{
uint i,j;
for(i=0;i<3;i++)
for(j=0;j<99;j++)
;
}
/*----------------------------------------------------------*/
/*-----------------------红外解码程序(核心)-----------------*/
/*----------------------------------------------------------*/
void IR_decode()
{
uchar i,j;
while(IR_RE==0);
delay2400();
if(IR_RE==1) //延时2.4ms后如果是高电平则是新码
{
delay2400(); //延时4.8ms避开4.5ms的高电平
for(i=0;i<4;i++)
{
for(j=0;j<8;j++)
{
while(IR_RE==0); //等待地址码第1位高电平到来
delay882(); //延时882Us判断此时引脚电平
if(IR_RE==0)
{
date[i]>>=1;
date[i]=date[i]&0x7f;
}
else if(IR_RE==1)
{
delay1000();
date[i]>>=1;
date[i]=date[i]|0x80;
}
} //1位数据接收结束
}
}
} //32位二进制码接收结束
void hong() interrupt 0
{
uint i;
for(i=0;i<4;i++)
{
delay1000();
if(IR_RE==1){k=~k;} //刚开始为4.5ms的引导码,如果4ms内出现高电平则退出解码程序
}
if(k==0)
{
EX0=0; //检测到有效信号关中断,防止干扰
IR_decode();
}
hongjue();
EX0=1;
m=0;
}
///////////***************************红外部分************************//////////////////
/**************************电机部分******************////////
hongjue()
{
switch(date[3])
{
case 0xf6:s=0;
tt++;
TR0=1;
d2=0;
if(tt>=2)
{
tt=0;
TR0=0;
}
break;
case 0xf1:s=1;
bb++;
if(bb>=4)
bb=3;
break;
case 0xe5:s=2;
bb--;
if(bb<=0)
bb=0;
break;
case 0xf5:s=3;//左 break;
case 0xe1:s=4; //右
break;
// case 0xfe:s=1;
// break;
// case 0xfe:s=1;
// break;
}
return(s);
}
void shu() //速度调节部分
{
if((s==0)&&(m==10)) //kai bu jing
{ m=0;
m1=1;
m2=1;
en1=1;
en2=1;
ck1=~ck1;
}
if((s==1)&&(bb==1)&&(m==10)) //yi ji tiao su
{
m=0;
m1=0;
m2=1;
en1=1;
en2=1;
ck1=~ck1;
}
if((s==1)&&(bb==2)&&(m==8)) //er ji tiao su
{
m=0;
m1=0;
m2=1;
en1=1;
en2=1;
ck1=~ck1;
}
if((s==1)&&(bb==3)&&(m==8)) //san ji tiao su
{
m=0;
m1=1;
m2=0;
en1=1;
en2=1;
ck1=~ck1;
}
if((s==1)&&(bb==3)&&(m==8)) //shi ji tiao su
{
m=0;
m1=0;
m2=0;
en1=1;
en2=1;
ck1=~ck1;
}
if((s==2)&&(bb==2)&&(m==8)) //yi ji jian su
{
m=0;
m1=1;
m2=0;
en1=1;
en2=1;
ck1=~ck1;
}
if((s==2)&&(bb==1)&&(m==8)) //er ji jian su
{
m=0;
m1=0;
m2=1;
en1=1;
en2=1;
ck1=~ck1;
}
if((s==2)&&(bb==1)&&(m==8)) //san ji jian su
{
m=0;
m1=0;
m2=1;
en1=1;
en2=1;
ck1=~ck1;
}
if((s==2)&&(bb==0)&&(m==10)) //huan hui cong qi su du
{
m=0;
m1=1;
m2=1;
en1=1;
en2=1;
ck1=~ck1;
}
if(s==3&&m==10) //zuo zhung wan
{
m=0;
m1=0;
m2=1;
en1=1;
en2=0;
ck1=~ck1;
}
if(s==4&&m==10) //you zhuang wan
{
m=0;
m1=0;
m2=1;
en1=0;
en2=1;
ck1=~ck1;
}
}
/****************************电机部分****************/
void time() interrupt 1 //调速中断
{
d0=0;
TH0=(65536-100)/256;
TL0=(65536-100)%256;
m++;
shu();
d0=1;
}
void main()
{
init();
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -