?? infrared ray uncoded.c
字號:
#include<AT89X52.H>
void yinxiuf_INT();
void yinxiuf_t0();
void yinxiuf_q(); //停止函數
void yinxiuf_q0(); //前進函數
void yinxiuf_q1(); //后退函數
void yinxiuf_r(); //右轉函數
void yinxiuf_l(); //左轉函數
void yinxiuf_q2(); // 前進1米函數
void yinxiuf_q3(); //前進10厘米函數
void yinxiuf_q4(); //前進1毫米函數
void yinxiuf_r1(); //右轉90度函數
void yinxiuf_r2(); //右轉1度函數
void yinxiuf_r3(); // 兩輪轉
void yinxiuf_l3();
void delay(unsigned int);
bit b=0,a0=0,a1=0,a2=0,a3=0,a4=0,a5=0,a6=0,a7=0,a8=0,a9=0,a10=0,a12=0;
unsigned char k=0;
unsigned long j=0;
unsigned long code a[12]={0xE240,0xE244,0xE254,0xE248,0xE250,0xE280,0xE204,0xE200,0xE208,0xE218,0xE24c,0xE298};
unsigned int code a11[]={0x7b,0xed,0xb7,0xde},a00[]={0xde,0xb7,0xed,0x7b};
unsigned char i;
unsigned int m=0;
int c5=0,c6=0,c7=0,c8=0,c9=0;
void main(){
yinxiuf_INT(); //初始化兩外部中斷,均下降沿觸發
yinxiuf_t0(); //初始化T0
dog:while(EA);
for(i=0;i<12;i++)
if(a[i]==j)break;
switch(i){
case 0:a0=1;yinxiuf_q();break;
case 1:a1=1;yinxiuf_q0();break;
case 2:a2=1;yinxiuf_q1();break;
case 3:a3=1;yinxiuf_r();break;
case 4:a4=1;yinxiuf_l();break;
case 5:a5=1;yinxiuf_q2();c5=0;break;
case 6:a6=1;yinxiuf_q3();c6=0;break;
case 7:a7=1;yinxiuf_q4();c7=0;break;
case 8:a8=1;yinxiuf_r1();c8=0;break;
case 9:a9=1;yinxiuf_r2();c9=0;break;
case 10:a10=1;yinxiuf_r3();break;
case 11:a12=1;yinxiuf_l3();break;
default:break;
}
EA=1;
m=0;
j=0;
b=0;
P1=P2=0xff;
goto dog;
}
void yinxiuf_INT0(void) interrupt 0{
TR0=1;
}
void yinxiuf_INT1(void) interrupt 2{
TR0=0;
if(b){
if((TH0>0x04)&&(TH0<=0x09))j=(j<<=1)+1;
else if((TH0>=0x01)&&(TH0<=0x04))j=(j<<=1)+0;
else{
j=0;
b=0;
goto apple;
}
k++;
if(k==16){
EA=0; //接受完畢,返回主函數進行處理
k=0; //清空幀信息完畢信號
a0=a1=a2=a3=a4=a5=a6=a7=a8=a9=a10=a12=0;
}
}
if(!b){if(TH0>0x09)b=1;}
apple:TH0=0;
TL0=0;
}
void yinxiuf_INT(void){
EA=1;
EX0=1;
EX1=1;
IT0=1;
IT1=1;
}
void yinxiuf_t0(void){
TMOD=0x01;
}
void yinxiuf_q(void){}
void yinxiuf_q0(void){
while(a1){
for(i=0;i<4;i++){
P1=a11[i];
P2=a11[i];
delay(3);
}
if(m++==40)EA=1; }
}
void yinxiuf_q1(void){
while(a2){
for(i=0;i<4;i++){
P1=a00[i];
P2=a00[i];
delay(3);
}
if(m++==40)EA=1; }
}
void yinxiuf_r(void){
while(a3){
for(i=0;i<4;i++){
P1=a11[i];
P2=0xff;
delay(3);
}
if(m++==40)EA=1; }
}
void yinxiuf_l(void){
while(a4){
for(i=0;i<4;i++){
P2=a11[i];
P1=0xff;
delay(3);
}
if(m++==40)EA=1; }
}
void yinxiuf_q2(void){
laijun5:if(a5){
while(c5++<50){
for(i=0;i<4;i++){
P1=a11[i];
P2=a11[i];
delay(3);
if(!a5)goto laijun5;
}
if(m++==40)EA=1; }
}
}
void yinxiuf_q3(void){
laijun6:if(a6){
while(c6++<15){
for(i=0;i<4;i++){
P1=a11[i];
P2=a11[i];
delay(3);
if(!a6)goto laijun6;
}
if(m++==40)EA=1; }
}
}
void yinxiuf_q4(){
laijun7: if(a7){
while(c7++<5){
for(i=0;i<4;i++){
P1=a11[i];
P2=a11[i];
delay(3); //控制速度
if(!a7)goto laijun7;
}
if(m++==40)EA=1; }
}
}
void yinxiuf_r1(void){
laijun8:if(a8){
while(c8++<5){
for(i=0;i<4;i++){
P1=a11[i];
P2=0xff;
delay(3);
if(!a8)goto laijun8;
}
if(m++==40)EA=1;}
}
}
void yinxiuf_r2(void){
laijun9:if(a9){
while(c9++<5){
for(i=0;i<4;i++){
P2=a11[i];
P1=0xff;
delay(3); //控制速度
if(!a9)goto laijun9;
}
if(m++==40)EA=1; }
}
}
void yinxiuf_r3(void){
while(a10){
for(i=0;i<4;i++){
P1=a11[i];
P2=a00[i];
delay(3);
}
if(m++==40)EA=1; }
}
void yinxiuf_l3(void){
while(a12){
for(i=0;i<4;i++){
P2=a11[i];
P1=a00[i];
delay(3);
}
if(m++==40)EA=1; }
}
void delay(unsigned int k){
unsigned char i;
while(k--){
for(i=0;i<100;i++);}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -