⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 infrared ray uncoded.c

📁 本程序用于单片机的串口调试
💻 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 + -