红外遥控小车程序

合集下载

嵌入式课程设计--红外遥控小车程序

嵌入式课程设计--红外遥控小车程序

#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned intsbit IRIN = P3^3;sbit P1_0=P1^0; //数码管动态扫描接口sbit P1_1=P1^1;sbit P1_5=P1^5; //蜂鸣器报警接口sbit P2_0=P2^0; //控制两个直流电机的控制端口sbit P2_1=P2^1;sbit P2_2=P2^2;sbit P2_3=P2^3;sbit P2_4=P2^4;sbit P2_5=P2^5;bit flag; //红外解码判断标志位,0有效uchar IR_buf[4]={0x00,0x00,0x00,0x00};//IR_buf[0]、IR_buf[1]为用户码低位、用户码高位接收缓冲区// IR_buf[2]、IR_buf[3]为键数据码和键数据码反码接收缓冲区uchar disp_buf[4]={0x00,0x00,0x40,0x00}; //显示缓冲单元ucharseg_data[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x 8e};//0~F符的显示码(字形码)void delay(uchar x); //延时函数void Delay_ms(uint xms); //延时void init();void car_forward(); //小车前进函数void car_back(); //小车后退函数void car_Leftturn(); //小车左转弯函数void car_Rightturn(); //小车右转弯函数void car_stop(); //小车停止函数void Display(uint m); //数码管显示函数void aralm();void car_jiaspeed();void car_jianspeed();/********以下是主函数********/void main(){init();while(1){Display(disp_buf[2]);switch(disp_buf[2]){case 0x46: car_forward();break;case 0x15: car_back();break;case 0x44: car_Leftturn();break;case 0x43: car_Rightturn();break;case 0x40: car_stop();break;case 0x47:car_jiaspeed();break;case 0x45:car_jianspeed();break;default: aralm();break;}}}void init(){EA=1;EX1=1; //允许总中断中断,使能INT1 外部中断IT1 = 1; //触发方式为脉冲负边沿触发IRIN=1; //遥控输入脚置1P2_0=0;P2_1=0;P2_2=0;P2_3=0;P2_4=1;P2_5=1;}void car_jiaspeed(){P2_4=1;P2_5=1;}void car_jianspeed(){while(1){P2_4=1;P2_5=0;Delay_ms(200);P2_4=0;P2_5=1;Delay_ms(200);if(disp_buf[2]!=0x45){break;}}}/********以下是0.14ms的x倍延时函数********/void delay(uchar x) //延时x*0.14ms{uchar i;while(x--)for (i = 0; i<13; i++);}/********以下是延时函数********/void Delay_ms(uint xms){uint i,j;for(i=xms;i>0;i--) //i=xms即延时约xms毫秒for(j=110;j>0;j--);}/********以下是显示函数********/void Display(uint m){uint a,b;a=m;b=m;a=a>>4;b=b&0x0f;P1_0=0;P1_1=1;P0=seg_data[a];Delay_ms(5);P1_0=1;P1_1=0;P0=seg_data[b];Delay_ms(5);}void car_forward() {P2_4=1;P2_5=1;P2_0=1;P2_1=0;P2_2=1;P2_3=0;}void car_back() {P2_4=1;P2_5=1;P2_0=0;P2_1=1;P2_2=0;P2_3=1;}void car_Leftturn() {P2_0=1;P2_1=0;P2_2=0;P2_3=0;}void car_Rightturn(){P2_0=0;P2_1=0;P2_2=1;P2_3=0;}void car_stop(){P2_0=0;P2_1=0;P2_2=0;P2_3=0;}void aralm(){P1_5=0;Delay_ms(500);P1_5=1;Delay_ms(500);}/********以下是外中断1函数********/void IR_decode() interrupt 2{uchar i,j,k,count=0;EX1 = 0; //暂时关闭外中断1中断请求delay(20); //延时20*0.14=2.8msif (IRIN==1) //等待IRIN低电平出现{EX1 =1; //开外中断0return; //中断返回}while (!IRIN) delay(1); //等待IRIN变为高电平,跳过9ms的低电平引导码for (j=0;j<4;j++) //收集四组数据,即用户码低位、用户码高位、键值数据码和键值数码反码{for (k=0;k<8;k++) //每组数据有8位{while (IRIN) //等待IRIN变为低电平,跳过4.5ms的高电平引导码信号。

基于msp430g2553的红外遥控小车解码控制程序

基于msp430g2553的红外遥控小车解码控制程序

基于msp430g2553的红外遥控小车解码控制程序//遥控小车最终程序#include#define CPU_F ((double)12000000)//数字控制震荡器1MHZ#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/12000000.0))//延时X微秒#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/12000.0))//延时X毫秒char const redled[8]={0x07,0x00,0x01,0x02,0x03,0x04,0x05,0x06};//led测试版对应的八个灯unsigned char receive[2]={0x00,0x00};//数据码,数据反码unsigned char j=0,k=0,f=0,led=0;//中断次数,receive的元素,,找到按键地址数组的第f个元素int flag=1;//***************************主程序********************//void main(void){WDTCTL=WDTPW+WDTHOLD; //关闭看门狗BCSCTL1=CALBC1_1MHZ; //这两句的作用,基本时钟系统控制,数控震荡控制,将时钟校准1MHZDCOCTL=CALDCO_1MHZ;P1DIR|=BIT0+BIT6+BIT2+BIT3+BIT4;//P1端口的P1.0、P1.6设置为输出方向P2DIR|=0x0f; //P2的0,1,2,3设置为输出口P1OUT|=BIT0+BIT6; //P1.0、P1.6输出高电平,次单片机的VCC为3.56VP1IE|=0X02; //P1.1中断使能P1IES|=BIT1; //P1.1中断边沿选择,下降沿触发P1IFG=0; //清P1.1中断标志_BIS_SR(GIE); //开总中断while(1) //{if(receive[0]==0xa2){flag=1;}if(receive[0]==0xe2){flag=-1;}if(flag==1) //正转P1.0{P1OUT&=~BIT3;P1OUT&=~BIT4;switch(receive[0]){case 0x68:{P1OUT&=~BIT0;P1OUT&=~BIT2;break;} //0键case0x30:{{P1OUT|=BIT0;P1OUT|=BIT2;delay_ms(1);P1OUT&=~B IT0;P1OUT&=~BIT2;delay_m s(9);}break;}//1键case0x18:{{P1OUT|=BIT0;P1OUT|=BIT2;delay_ms(2);P1OUT&=~B IT0;P1OUT&=~BIT2;delay_m s(8);}break;}//2键case0x7a:{{P1OUT|=BIT0;P1OUT|=BIT2;delay_ms(3);P1OUT&=~B IT0;P1OUT&=~BIT2;delay_m s(7);}break;}//3键case0x10:{{P1OUT|=BIT0;P1OUT|=BIT2;delay_ms(4);P1OUT&=~BIT0;P1OUT&=~BIT2;delay_m s(6);}break;}//4键case0x38:{{P1OUT|=BIT0;P1OUT|=BIT2;delay_ms(5);P1OUT&=~B IT0;P1OUT&=~BIT2;delay_m s(5);}break;}//5键case0x5a:{{P1OUT|=BIT0;P1OUT|=BIT2;delay_ms(6);P1OUT&=~B IT0;P1OUT&=~BIT2;delay_m s(4);}break;}//6键case0x42:{{P1OUT|=BIT0;P1OUT|=BIT2;delay_ms(7);P1OUT&=~B IT0;P1OUT&=~BIT2;delay_m s(3);}break;}//7键case0x4a:{{P1OUT|=BIT0;P1OUT|=BIT2;delay_ms(8);P1OUT&=~B IT0;P1OUT&=~BIT2;delay_m s(2);}break;}//8键case 0x52:{P1OUT|=BIT0;P1OUT|=BIT2;break;} //9键}}else if(flag==-1) //反转P1.2{P1OUT&=~BIT0;P1OUT&=~BIT2;switch(receive[0]){case 0x68:{P1OUT&=~BIT3;P1OUT&=~BIT4;break;} //0键case0x30:{{P1OUT|=BIT3;P1OUT|=BIT4;delay_ms(1);P1OUT&=~B IT3;P1OUT&=~BIT4;delay_m s(9);}break;}//1键case0x18:{{P1OUT|=BIT3;P1OUT|=BIT4;delay_ms(2);P1OUT&=~B IT3;P1OUT&=~BIT4;delay_m s(8);}break;}//2键case0x7a:{{P1OUT|=BIT3;P1OUT|=BIT4;delay_ms(3);P1OUT&=~B IT3;P1OUT&=~BIT4;delay_m s(7);}break;}//3键case0x10:{{P1OUT|=BIT3;P1OUT|=BIT4;delay_ms(4);P1OUT&=~B IT3;P1OUT&=~BIT4;delay_m s(6);}break;}//4键case0x38:{{P1OUT|=BIT3;P1OUT|=BIT4;delay_ms(5);P1OUT&=~B IT3;P1OUT&=~BIT4;delay_m s(5);}break;}//5键case0x5a:{{P1OUT|=BIT3;P1OUT|=BIT4;delay_ms(6);P1OUT&=~B IT3;P1OUT&=~BIT4;delay_m s(4);}break;}//6键case0x42:{{P1OUT|=BIT3;P1OUT|=BIT4;delay_ms(7);P1OUT&=~B IT3;P1OUT&=~BIT4;delay_m s(3);}break;}//7键case0x4a:{{P1OUT|=BIT3;P1OUT|=BIT4;delay_ms(8);P1OUT&=~B IT3;P1OUT&=~BIT4;delay_m s(2);}break;}//8键case 0x52:{P1OUT|=BIT3;P1OUT|=BIT4;break;} //9键}}}}//*********************红外遥控器中断程序*******************//#pragma vector=PORT1_VECTOR //中断程序的格式:#pragma vector=中断矢量__interrupt void port1(void)//格式:__interrupt void 函数名(void){P1IFG=0X00; //清P1中断标志int count=0; //高电平持续时间计数值while(!(P1IN&BIT1)); //等电平变为高电平while(P1IN&BIT1) //计算高电平持续时间{count++;if(count>8000)return;//如果高电平持续时间过长则推出中断程序}if(j>16) //一体化红外接收头一接收遥控器信号,就会输出32位的脉冲序列波,其中后16位{ //决定遥控器的按键地址,16位由8位数据码和数据反码组成,我们需要将其解码//time[j-17]=count; //将记得的高电平持续时间放入时间数组中if(j==25)k++; //到数据反码的起始位的时候,我让receive数组元素下标+1receive[k]<<=1; //接收数据码左移一位,比如:xxxx xxxx 左移一位后xxxx xxx0if(count>80)receive[k]|=0x01;//高电平持续时间超过80,则将左移一位后的最低位变1,} //结果变为,xxxx xxx1,如果没超过80则保持不变,xxxx xxx0 j++;if(j>32){j=0;k=0; //解码结束,j,k值清零delay_ms(150);}}。

基于51单片机的红外遥控智能小车源程序(C语言)

基于51单片机的红外遥控智能小车源程序(C语言)

/*预处理命令*/#include<reg52.h> //包含单片机寄存器的头文件#include<intrins.h> //包含_nop_()函数定义的头文件#define uchar unsigned char#define uint unsigned int#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};sbit IRIN=P3^2; //红外接收器数据线sbit LCD_RS = P0^7;sbit LCD_RW = P0^6;sbit LCD_EN = P0^5;uchar begin[]={"My car!"};uchar cdis1[]={"jiansu!"};uchar cdis2[]={"qianjin!"};uchar cdis3[]={"jiasu!"};uchar cdis4[]={"zuozhuang!"};uchar cdis5[]={"STOP!"};uchar cdis6[]={"youzhuan!"};uchar cdis8[]={"daoche!"};sbit M1 = P1^0;sbit M2 = P1^1;sbit M3 = P1^2;sbit M4 = P1^3;sbit EN12 = P1^4;sbit EN34 = P1^5;uchar IRCOM[7];uchar m,n;uchar t=2;uchar g;uchar code digit[]={"0123456789"};uint v;uchar count;bit flag;void delayxms(uchar t);void delay(unsigned char x) ;void delay1(int ms);void motor();void lcd_display();/*检查LCD忙状态lcd_busy为1时,忙,等待。

自动避障红外电动小车C51程序

自动避障红外电动小车C51程序
#define LCD_Data P0
#define Busy 0x80 //用于检测LCD状态字中的Busy标识
sbit c=P1^2; //转向灯使能端
uchar code talk1[]={"backward"};
uchar code talk2[]={"forward"};
uchar code talk3[]={"Turnleft"};
****************************/
void infrared_ray()interrupt 0 using 3
{ uchar i=90;
flage=0x01; //接受标志位
while(i--); //减小灵敏度
EX0=0; //关掉中断,等到发射方波后才开启,处于别动
}
//延时子程序
LCD_Data = WCLCD;
LCD_RS= 0;
LCD_RW= 0;
LCD_E = 0; //延时,为了安全
LCD_E = 0;
LCD_E = 0; //延时
LCD_E = 1;
}
void LCDInit(void) //LCD初始化
{
Delay400Ms();
LCD_Data = 0;
WriteCommandLCD(0x38,0); //三次显示模式设置,不检测忙信号
//右边有障碍物,左转
else if(temp==0x02) {control(2,dj_state3,right_light ); temp =0x00;}
//两个方向都有障碍物,后退,右转
else if(temp==0x03) {control(10,dj_state4,back_light );

红外遥控小车程序

红外遥控小车程序

附录一程序代码红外遥控编码程序#include<reg51.h>#define uchar unsigned char#define uint unsigned int#define uintlong unsigned longsbit p3_0=P3^0;sbit p2_1=P2^1;sbit p1_0=P1^0;sbit p1_1=P1^1;sbit p1_2=P1^2;sbit p1_3=P1^3;bit out;uint keyvalue=0x00,flag_key=0,value1,value2,keycount=0,i,j,flag_set=0, flag_press=0;uchar code keycode[4]={0x7f,0xbf,0xdf,0xef};uchar codeportvalue[12]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x00, 0x0b};uchar code wy[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//**********红外发送部分**********//uchar user1=0x00,user2=0x00;uint count=0,endcount=0;uint irdata=0;void deltime(void);void key_scan(void);void sendirdata(void);main(void){EA = 1;TMOD = 0x11;ET0 = 1;p3_0=1;P1=0xff;TH0 = 0xFF;TL0 = 0xE4;TR0 = 0;while(1){key_scan();if(flag_press==1){flag_press=0;TR0=1;sendirdata();}}}//**********按键扫描***********// void key_scan(void){for(i=0;i<=3;i++){P1=keycode[i];if(p1_3==0){keycount=i*3+0;flag_key=1; break;}if(p1_2==0){keycount=i*3+1;flag_key=1;break;}if(p1_1==0){keycount=i*3+2;flag_key=1;break;}}if(flag_key==1){flag_key=0;value1=P1;deltime();value2=P1;if(value1==value2){keyvalue=portvalue[keycount];flag_set=1;flag_press=1;}while(flag_set){value2=P1;if(value1!=value2)flag_set=0;}}}//**********延时**********//void deltime(void){uint k;for(k=0;k<=20;k++){ }}//**********定时中断**********// void time0int(void) interrupt 1{TH0=0xFF;TL0=0xE4;count++;}//**********发送数据**********// void sendirdata(){uchar s=0,datapd=0;endcount=320;p3_0=0;count=0;do{}while(count<endcount); endcount=180;count=0;p3_0=1;do{}while(count<endcount);for(s=0;s<=11;s++){endcount=20;count=0;p3_0=0;do{}while(count<endcount);endcount=20;count=0;p3_0=1;do{}while(count<endcount);}irdata=keyvalue;for(s=0;s<=7;s++){datapd=irdata & wy[s];if (datapd==0){endcount=20;count=0;} else{endcount=60;count=0;} p3_0=0;do{}while(count<endcount);endcount=20;count=0;p3_0=1;do{}while(count<endcount);}irdata=keyvalue;for(s=0;s<=7;s++){datapd=irdata & wy[s];if (datapd==0){endcount=60;count=0;} else{endcount=20;count=0;}p3_0=0;do{}while(count<endcount);endcount=20;count=0;p3_0=1;do{}while(count<endcount);}TR0=0;}红外遥控解码及驱动程序COUNT EQU 30HFLAG_USER1 EQU 45HFLAG_USER2 EQU 46HSA VEDATA EQU 47HCS1 EQU P3.0CS2 EQU P3.1RS EQU P3.3RW EQU P3.4E EQU P3.5PAGES EQU 56HCOLUMN EQU 57HNUM EQU 58HORG 0000HLJMP MAINORG 0003HLJMP EXTER0INTORG 000BHLJMP TIMER0INTORG 1000HMAIN:MOV P1,#0C5HSETB P3.6SETB P3.7MOV TMOD,#01H ;中断初始化MOV TH0,#0FFHMOV TL0,#9CHSETB EASETB IT0SETB ET0SETB EX0MOV R0,52H ;数据接收初始化MOV 52H,#00HMOV 53H,#00HMOV 54H,#00HMOV 55H,#00HMOV 51H,#00HMOV COUNT,#00HMOV R1,#08HMOV R2,#02HCLR PSW.5 ;数据接收标志CLR PSW.1 ;数据处理标志MOV FLAG_USER1,#00HLCALL CLEARMOV DPTR,#TAB0 ;显示初始化MOV PAGES,#1MOV COLUMN,#0LCALL LCD_DISPMOV DPTR,#TAB2MOV PAGES,#1MOV COLUMN,#16LCALL LCD_DISPMOV DPTR,#TAB1MOV PAGES,#1MOV COLUMN,#32LCALL LCD_DISPMOV DPTR,#TAB3MOV PAGES,#1MOV COLUMN,#48LCALL LCD_DISPMOV DPTR,#TAB4MOV PAGES,#1MOV COLUMN,#64LCALL LCD_DISPMOV DPTR,#TAB5MOV PAGES,#1MOV COLUMN,#80 ;显示红外遥控模式LCALL LCD_DISPMOV DPTR,#TAB6MOV PAGES,#3MOV COLUMN,#0LCALL LCD_DISPMOV DPTR,#TAB7MOV PAGES,#3MOV COLUMN,#16LCALL LCD_DISPMOV DPTR,#TAB8MOV PAGES,#3MOV COLUMN,#32LCALL LCD_DISPMOV DPTR,#TAB10MOV PAGES,#3MOV COLUMN,#64LCALL LCD_DISPMOV DPTR,#TAB9MOV PAGES,#3MOV COLUMN,#48LCALL LCD_DISP ;显示状态:初始LOOP: ;是否进行数据处理JNB PSW.1,$LCALL DATACHULICLR PSW.1MOV A,SA VEDATALCALL DATASHOWENDLOOP:LJMP LOOPEXTER0INT: ;外部中断SETB TR0MOV 30H,#00HRETITIMER0INT: ;定时中断,数据的验证和接收.MOV TH0,#0FFHMOV TL0,#9CHINC 30HSETB P3.2MOV C,P3.2JB PSW.5,DATARECEIVEPDJNC ENDTIMER0INTMOV A,30HCLR CSUBB A,#90JC ENDTIMER0INTSETB PSW.5CLR TR0MOV R1,#08HMOV 51H,#00HMOV R0,#52HMOV R2,#04H ;共接受两组数据LJMP ENDTIMER0INTDATARECEIVEPD: ;数据接收判断JNC ENDTIMER0INTCLR TR0MOV A,30HCLR TR0SUBB A,#10JC ORECEIVESETB CMOV A,51HRRC AMOV 51H,ALJMP WENDPDORECEIVE:CLR CMOV A,51HRRC AMOV 51H,AWENDPD:DJNZ R1,ENDTIMER0INT ;重复两次接收,确保存储.MOV R1,#08HMOV @R0,51HMOV @R0,51HINC R0MOV 51H,#00HDJNZ R2,ENDTIMER0INTCLR PSW.5SETB PSW.1SETB P0.0ENDTIMER0INT: ;定时中断结束RETIDATACHULI: ;数据处理MOV A,52HCLR CSUBB A,FLAG_USER1JNZ ENDDATACHULIMOV A,54HANL A,55HJNZ ENDDATACHULIMOV A,54HMOV SA VEDATA,AMOV 52H,#00HMOV 53H,#00HMOV 54H,#00HMOV 55H,#00HENDDATACHULI: ;处理完成,返回主程序RETDATASHOW: ;判断接收信号,进行相应处理CJNE A,#00H,CON1LJMP AOTO ;状态判断CON1:CJNE A,#02H,CON2MOV P1,#0FAHMOV DPTR,#TAB11MOV PAGES,#3LJMP ENDDATASHOW ;后转并显示CON2:CJNE A,#04H,CON3MOV P1,#0E5HMOV DPTR,#TAB12MOV PAGES,#3LJMP ENDDATASHOW ;左转并显示CON3:CJNE A,#05H,CON4MOV P1,#0C5HMOV DPTR,#TAB13MOV PAGES,#3LJMP ENDDATASHOW ;停转并显示CON4:CJNE A,#06H,CON5MOV P1,#0D5HMOV DPTR,#TAB14MOV PAGES,#3LJMP ENDDATASHOW ;右转并显示CON5:CJNE A,#08H,CON6MOV P1,#0F5HMOV DPTR,#TAB15MOV PAGES,#3LJMP ENDDATASHOW ;前转并显示CON6:JMP ENDDATASHOW1ENDDATASHOW:MOV COLUMN,#48LCALL LCD_DISPMOV DPTR,#TAB16MOV PAGES,#3MOV COLUMN,#64LCALL LcD_DISPENDDATASHOW1:RETAOTO:MOV P1,#0C0H ;寻迹壁障程序MOV DPTR,#TAB17MOV PAGES,#1MOV COLUMN,#0LCALL LCD_DISPMOV DPTR,#TAB18MOV PAGES,#1MOV COLUMN,#16LCALL LCD_DISPMOV DPTR,#TAB19MOV PAGES,#1MOV COLUMN,#32LCALL LCD_DISPMOV DPTR,#TAB20MOV PAGES,#1MOV COLUMN,#48LCALL LCD_DISP ;显示寻迹避障MOV DPTR,#TAB10MOV PAGES,#3MOV COLUMN,#64LCALL LCD_DISPMOV DPTR,#TAB9MOV PAGES,#3MOV COLUMN,#48LCALL LCD_DISP ;显示初始LCALL DLY ;模式工作前等待3秒AOTO1: ;自动寻迹避障程序MOV DPTR,#TAB15MOV PAGES,#3MOV COLUMN,#48LCALL LCD_DISPMOV DPTR,#TAB16MOV PAGES,#3MOV COLUMN,#64LCALL LCD_DISP ;显示前转MOV P1,#0F5HJNB PSW.5,AOTO2 ;检测红外信号LCALL CLEARMOV P1,#0C5HLCALL DLY1LJMP MAINAOTO2:JNB P1.6,ZZ ;状态判断JNB P1.7,YZJNB P3.6,HTJNB P3.7,HTSJMP AOTO1ZZ:MOV P1,#0E5H ;右寻迹灯亮MOV DPTR,#TAB12MOV PAGES,#3MOV COLUMN,#48LCALL LCD_DISPLCALL DLYSJMP DDYZ:MOV P1, #0D5H ;左寻迹灯亮MOV DPTR,#TAB14MOV PAGES,#3MOV COLUMN,#48LCALL LCD_DISPLCALL DLYHT:MOV P1,#0FAH ;发现障碍物MOV DPTR,#TAB11MOV PAGES,#3MOV COLUMN,#48LCALL LCD_DISPLCALL DLYSJMP ZZDD:LJMP AOTO1DL Y:MOV R7,#0BDH ;3秒延时DL1:MOV R6,#0E6HDL0:MOV R5,#21HDJNZ R5,$DJNZ R6,DL0DJNZ R7,DL1RETDLY1:MOV R7,#0A7H ;1秒延时DL3:MOV R6,#0ABHDL2:MOV R5,#10HDJNZ R5,$DJNZ R6,DL2DJNZ R7,DL3NOPRETCLEAR: MOV R4,#00H ;清屏程序CLEAR1:MOV A ,R4ORL A,#0B8HLCALL WCL0LCALL WCR0MOV B,#40HLCALL WCL0LCALL WCR0MOV R3,#40HCLEAR2:MOV B,#00HLCALL WCL1LCALL WCR1DJNZ R3,CLEAR2INC R4CJNE R4, #08H, CLEAR1RETLCD_DISP: ;汉字显示程序MOV R1,#02HMOV R0,#00HMOV NUM,#10HDISP: MOV R4,NUMDISPWORD:MOV A,COLUMNCLR CSUBB A,#63JNC YXPMOV A,COLUMNORL A,#40HMOV B,ALCALL WCL0ORL A,#0B8HMOV B,ALCALL WCL0 DISPDATA1:INC COLUMNMOV A,R0MOVC A,@A+DPTRMOV B,ALCALL WCL1LJMP NEXTDISPYXP:MOV A,COLUMNCLR CSUBB A,#64ORL A,#40HMOV B,ALCALL WCR0MOV A,PAGESORL A,#0B8HMOV B,ALCALL WCR0 DISPDATA2:INC COLUMNMOV A,R0MOVC A,@A+DPTRMOV B,ALCALL WCR1 NEXTDISP:INC R0DJNZ R4,DISPWORDCLR CSUBB A,#10HMOV COLUMN, AINC PAGESDJNZ R1,DISPRETWCL0: CLR CS1SETB CS2CLR RSSETB RWWCL00: MOV P2,#0FFHSETB EMOV A,P2CLR EJB ACC.7,WCL00CLR RWMOV P2, BSETB ENOPCLR ERETWCL1: CLR CS1SETB CS2CLR RSSETB RWWCL11: MOV P2,#0FFHSETB EMOV A,P2CLR EJB ACC.7,WCL11CLR RWSETB RSMOV P2, BSETB ECLR ERETWCR0: SETB CS1CLR CS2CLR RSSETB RWWCR00: MOV P2,#0FFHSETB EMOV A,P2CLR EJB ACC.7,WCR00CLR RWMOV P2, BSETB ECLR ERETWCR1: SETB CS1CLR CS2CLR RSSETB RWWCR11: MOV P2,#0FFHSETB EMOV A,P2CLR EJB ACC.7,WCR11CLR RWSETB RSMOV P2, BSETB ECLR ERETTAB0:DB20H,30H,0ACH,63H,20H,10H,04H,04H,04H,04H,0FCH,04H,06H,04H,00H,00H,22H,67H,22H,12H,12H,52H,40H,40H,40H,40H,7FH,40H,40H,60H,40H,00H ; 红TAB1:DB40H,42H,44H,0CCH,00H,42H,36H,2AH,22H,0FEH,21H,29H,25H,80H,00H,00H,00H,40H,20H,1FH,21H,41H,5DH,49H,49H,4FH,49H,49H,5DH,61H,21H,00H ; 外TAB2:DB00H,80H,0E0H,18H,17H,10H,90H,70H,00H,0FFH,20H,40H,80H,00H,00H,00H,01H,40H,20H,11H,0AH,04H,03H,00H,00H,0FFH,00H,00H,00H,01H,03H,00H ; 遥TAB3:DB10H,10H,10H,0FFH,90H,50H,0CH,44H,24H,15H,06H,14H,24H,54H,0CH,00H,02H,42H,81H,7FH,00H,40H,42H,42H,42H,42H,7EH,42H,43H,62H,40H,00H ; 控TAB4:DB10H,10H,0D0H,0FFH,94H,14H,0E4H,0BFH,0A4H,0A4H,0A4H,0BFH,0F4H,26H,04H,00H,04H,03H,00H,0FFH,08H,89H,8BH,4AH,2AH,1EH,2AH,2AH,4BH,0C8H,48H,00H ; 模TAB5:DB10H,10H,90H,90H,90H,90H,90H,10H,0FFH,10H,12H,14H,10H,18H,10H,00H,00H,20H,60H,20H,1FH,10H,10H,08H,01H,06H,18H,20H,40H,80H,70H,00H ; 式TAB6:DB00H,08H,30H,00H,0FFH,20H,20H,20H,20H,0FFH,20H,22H,24H,30H,20H,00H,08H,0CH,02H,01H,0FFH,40H,20H,1CH,03H,00H,03H,0CH,30H,60H,20H,00H; 状TAB7:DB04H,04H,84H,84H,44H,24H,54H,8FH,14H,24H,44H,44H,84H,86H,84H,00H,01H,21H,1CH,00H,3CH,40H,42H,4CH,40H,40H,70H,04H,08H,31H,00H,00H;态TAB8:DB000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,036H,036H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H ;:TAB9:DB10H,10H,91H,0D6H,30H,98H,00H,08H,08H,0F8H,08H,08H,08H,0FCH,08H,00H,02H,01H,00H,0FFH,01H,82H,40H,20H,18H,07H,40H,80H,40H,3FH,00H,00H ; 初TAB10:DB10H,10H,0F0H,1FH,10H,0F0H,40H,60H,58H,47H,40H,40H,50H,60H,0C0H,00H,40H,22H,15H,08H,16H,61H,00H,0FEH,42H,42H,42H,42H,42H,0FFH,02H,00H;始TAB11:DB00H,00H,0FCH,24H,24H,24H,24H,24H,24H,22H,22H,23H,0A2H,30H,20H,00H,40H,30H,0FH,00H,00H,0FFH,41H,41H,41H,41H,41H,41H,0FFH,01H,00H,00H;后TAB12:DB08H,08H,08H,08H,88H,78H,0FH,08H,08H,08H,08H,88H,0CH,08H,00H,00H,20H,50H,48H,46H,41H,41H,41H,41H,7FH,41H,41H,41H,41H,60H,40H,00H;左TAB13:DB40H,20H,0F8H,07H,00H,04H,74H,54H,55H,56H,54H,54H,76H,04H,00H,00H,00H,00H,0FFH,04H,03H,01H,05H,45H,85H,7DH,05H,05H,01H,05H,03H,00H ;停TAB14:DB08H,08H,08H,08H,0C8H,38H,0FH,08H,08H,08H,08H,08H,88H,0CH,08H,00H,08H,04H,02H,01H,0FFH,41H,41H,41H,41H,41H,41H,41H,0FFH,01H,00H,00H ;右TAB15:DB08H,08H,0E8H,29H,2AH,2EH,0E8H,08H,08H,0CCH,0AH,0BH,0E8H,0CH,08H,00H,00H,00H,0FFH,09H,49H,89H,7FH,00H,00H,0FH,40H,80H,7FH,00H,00H,00H;前TAB16:DB08H,0C8H,0B8H,8FH,0E8H,88H,40H,48H,0C8H,7FH,48H,48H,4CH,68H,40H,00H,08H,18H,08H,04H,0FFH,04H,00H,02H,13H,22H,62H,9AH,06H,02H,00H,00H;转TAB17:DB00H,00H,82H,92H,92H,92H,92H,92H,92H,92H,92H,0FFH,02H,00H,00H,00H,04H,04H,04H,04H,0CH,34H,04H,04H,44H,84H,7FH,04H,04H,06H,04H,00H ;寻TAB18:DB40H,42H,0CCH,00H,08H,0C8H,08H,0F9H,0AH,0EH,0F8H,08H,4CH,88H,00H,00H,40H,20H,1FH,20H,42H,41H,50H,4FH,40H,50H,5FH,40H,40H,63H,20H,00H ;迹TAB19:DB40H,42H,0C4H,00H,0FEH,22H,22H,3FH,8AH,0A8H,0C9H,8EH,0C8H,0ACH,88H,00H,40H,20H,1FH,22H,5FH,51H,51H,5FH,40H,44H,44H,7FH,44H,64H,20H,00H ;避TAB20:DB00H,0FEH,22H,5AH,86H,10H,0D2H,56H,5AH,53H,5AH,56H,0F2H,58H,10H,00H,00H,0FFH,04H,08H,17H,10H,17H,15H,15H,0FDH,15H,15H,17H,10H,10H,00H ;障END。

遥控器控制小车程序

遥控器控制小车程序
while(sec==0);
sec=0;
if(HWIN==0)
time1=0;
}
}
}
/**********************/ //左转
{
for(r6=0;r6<4;r6++)
{
PLAY_OUT=TAB_Q[r6];
while(sec==0);
sec=0;
sec++;
if(sec==2)
{
sec=0;
min++;
}
}
/****************************/
void HWKEY(void)
{
for(r1=0;r1<8;r1++) //跳过4.5MS
{
#include"reg52.h"
#include"intrins.h"
#define unint unsigned int
#define unchar unsigned char
#define PLAY_OUT P1
sbit HWIN=P3^2;
unchar sec=0;
unchar min=0;
delay(1); //0.6MS
delay(1);
if(HWIN==1)
{
r4=r4<<1|0x01;
}
else r4=r4<<1;
}
for(r1=0;r1<8;r1++) //跳过4.5MS
{

红外避障小车c语言程序

红外避障小车c语言程序
e CarStop P0_2 = 0 ; P0_3 = 0 ; P0_4 = 0 ; P0_5 = 0 #define RightSenser P0_0 #define LeftSenser P0_1 //******************************************************** // 左转 //******************************************************** void TurnLeft_1() { LeftStop ; FRightMotor ; } //******************************************************** // 快速左转
LeftStop ; RightStop ; }
} //******************************************************** // 跟随程序 //******************************************************** void Follow(void) { if(RightSenser && LeftSenser&&PWM) { LeftStop ; RightStop; } if((!RightSenser) && LeftSenser&&PWM) { TurnRight_1() ; } if(RightSenser && (!LeftSenser)&&PWM) { TurnLeft_1() ; } if(!(RightSenser || LeftSenser)) { FCar() ; } } //********************************************************

智能红外循迹小车程序

智能红外循迹小车程序

#include<reg52.h>#define uint unsigned int#define uchar unsigned char#define ulong unsigned longsbit you_2=P2^0;//红外探测端口定义sbit you_1=P2^1;sbit zhong=P2^2;sbit zuo_1=P2^3;sbit zuo_2=P2^4;sbit CG=P0^1;sbit DC=P0^0;uchar code L_F[8]= {0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x90};//左电机正转uchar code L_B[8]= {0x90,0x80,0xc0,0x40,0x60,0x20,0x30,0x10};//左电机反转uchar code R_F[8]= {0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};//右电机正转uchar code R_B[8]= {0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};//右电机反转uchar code B_F[8]= {0x91,0x83,0xc2,0x46,0x64,0x2c,0x38,0x19};//左反右正uchar code F_B[8]= {0x19,0x38,0x2c,0x64,0x46,0xc2,0x83,0x91}; //左正右反uchar code duandian[8]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};//断电unsigned char code qianjin[]={0x11,0x33,0x22,0x66,0x44,0xcc,0x88,0x99};//前进unsigned char h[]={0x11,0x33,0x22,0x66,0x44,0xcc,0x88,0x99};//uchar i;void delay(uint z){uint k ;uint j;for(k=0; k<z; k++)for(j=0; j<110; j++);}void QJ(unsigned int i){for(i=0;i<8;i++){P1=h[i]=qianjin[i];delay(13);}}void DD(){P1=0x00;delay(300);}void wtj(){while(1){if(P2==0xff){DD();delay(1000);break;}else{QJ(8);}}}void YG_1(){unsigned char i;for(i=0;i<8;i++){P1=h[i]=F_B[i];delay(10);}}void ZG_1(){ unsigned char i;for(i=0;i<8;i++){P1=h[i]=B_F[i];delay(10);}}void byg(){while(1){if(P2==0xfb)break;else if(P2==0xf9)break;else if(P2==0xfd)break;/*if(P2^0==0)break;else if(P2^1==0)break;/*else if(P2^2==0)break;else if(P2^3==0)break;else if(P2^4==0)break;*/elseYG_1();}}void bzg(){while(1){if(P2==0xfb)break;else if(P2==0xf3)break;else if(P2==0xf7)break;/*if(P2^0==0)break;else if(P2^1==0)break;else if(P2^2==0)break;if(P2^3==0)break;else if(P2^4==0)break;*/elseZG_1();}}void YG_2(){//unsigned char i; //unsigned char g;if(P2==0xfa){//delay(4000); wtj();byg();/*for(g=0;g<40;g++){for(i=0;i<8;i++){P1=F_B[i];delay(20);}} */}else if(P2==0xf2){//delay(4000); wtj();byg();/*for(g=0;g<40;g++){for(i=0;i<8;i++){P1=F_B[i];delay(20);}}*/}else if(P2==0xf6){//delay(4000);byg();/*for(g=0;g<40;g++){for(i=0;i<8;i++){P1=F_B[i];delay(20);}}*/}else if(P2==0xf4){//delay(4000); wtj();byg();/*for(g=0;g<40;g++){for(i=0;i<8;i++){P1=F_B[i];delay(20);}}*/}else ;}void ZG_2(){//unsigned char i; //unsigned char g;if(P2==0xeb){//delay(4000); wtj();bzg();/*for(g=0;g<40;g++){for(i=0;i<8;i++){P1=B_F[i];delay(20);}}*/else if(P2==0xe9){//delay(4000); wtj();bzg();/*for(g=0;g<40;g++) {for(i=0;i<8;i++){P1=B_F[i];delay(20);}}*/}else if(P2==0xed){//delay(4000); wtj();bzg();/*for(g=0;g<40;g++) {for(i=0;i<8;i++){P1=B_F[i];delay(20);}}*/}else if(P2==0xe5){//delay(4000); wtj();bzg();/*for(g=0;g<40;g++) {for(i=0;i<8;i++){P1=B_F[i];delay(20);}}*/}else ;}void ZG(){unsigned char i;for(i=0;i<8;i++){P1=h[i]=R_F[i];delay(11);}}void YG(){unsigned char i;for(i=0;i<8;i++){P1=h[i]=L_F[i];delay(11);}}/*void HT(){unsigned char i;for(i=0;i<8;i++){P1=houtui[i];delay(55);}}*/void zd(){while(1){if(P2==0xe0)QJ(8);else if(P2==0xff){while(1){DD();}}else{QJ(80);if(P2==0xff){while(1){DD();}}else{DC=0;break;break;}}}}void zd1(){while(1){if(P2==0xe0)QJ(8);else if(P2==0xff){while(1){DD();}}else{QJ(80);if(P2==0xff)while(1){DD();}}else{DC=0;break;}}}}void hy(){unsigned char i;for(i=0;i<8;i++){P1=h[i];delay(10);}}void main(){DC=1;while(1){QJ(8);if(P2!=0xff){delay(9000);break;}}while(1){DC=1;if(CG==1){delay(9000);DC=1;while(1){switch(P2){case 0xfb:QJ(8);break;//11011case 0xf1:QJ(8);break;//10001case 0xf3:QJ(8);break;//10011case 0xf7:ZG();break;//10111case 0xe7:ZG_1();break;//00111case 0xef:ZG_1();break;//01111case 0xe3:ZG_1();break; //00011case 0xe1:ZG_1();break; //00001case 0xf9:QJ(8);break;//11001case 0xfd:YG();break;//11101case 0xfc:YG_1();break;//11100case 0xfe:YG_1();break;//11110case 0xf8:YG_1();break; //11000case 0xf0:YG_1();break;//10000case 0xfa://11010QJ(16);// delay(4000);YG_2();//f7 break;case 0xf2://10010QJ(16);// delay(4000);YG_2();break;case 0xf6://10110QJ(16);// delay(4000);YG_2();break;case 0xf4://10100QJ(16);// delay(4000);YG_2();break;case 0xeb://01011QJ(16);//delay(4000);ZG_2();//fd break;case 0xe9://01001QJ(16);//delay(4000);ZG_2();break;case 0xed://01101QJ(16);//delay(4000);ZG_2();break;case 0xe5://00101QJ(16);//delay(4000);ZG_2();break;case 0xe0:zd1();break;//00000case 0xff:hy();break;//11111default:QJ(8); break;}}}else{switch(P2){case 0xfb:QJ(8);break;//11011 case 0xf1:QJ(8);break;//10001case 0xf3:QJ(8);break;//10011 case 0xf7:ZG();break;//10111 case 0xe7:ZG_1();break;//00111 case 0xef:ZG_1();break;//01111 case 0xe3:ZG_1();break; //00011 case 0xe1:ZG_1();break; //00001case 0xf9:QJ(8);break;//11001 case 0xfd:YG();break;//11101 case 0xfc:YG_1();break;//11100 case 0xfe:YG_1();break;//11110 case 0xf8:YG_1();break; //11000 case 0xf0:YG_1();break;//10000case 0xfa://11010QJ(16);// delay(4000);YG_2();//f7 break;case 0xf2://10010QJ(16);// delay(4000);YG_2();break;case 0xf6://10110QJ(16);// delay(4000);YG_2();break;case 0xf4://10100QJ(16);// delay(4000);YG_2();break;case 0xeb://01011QJ(16);//delay(4000);ZG_2();//fd break;case 0xe9://01001QJ(16);//delay(4000);ZG_2();break;case 0xed://01101QJ(16);//delay(4000);ZG_2();break;case 0xe5://00101QJ(16);//delay(4000);ZG_2();break;case 0xe0:zd();break;//00000case 0xff:hy();break;//11111default:QJ(8); break;}}}}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

附录一程序代码红外遥控编码程序#include<reg51.h>#define uchar unsigned char#define uint unsigned int#define uintlong unsigned longsbit p3_0=P3^0;sbit p2_1=P2^1;sbit p1_0=P1^0;sbit p1_1=P1^1;sbit p1_2=P1^2;sbit p1_3=P1^3;bit out;uint keyvalue=0x00,flag_key=0,value1,value2,keycount=0,i,j,flag_set=0, flag_press=0;uchar code keycode[4]={0x7f,0xbf,0xdf,0xef};uchar codeportvalue[12]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x00, 0x0b};uchar code wy[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//**********红外发送部分**********//uchar user1=0x00,user2=0x00;uint count=0,endcount=0;uint irdata=0;void deltime(void);void key_scan(void);void sendirdata(void);main(void){EA = 1;TMOD = 0x11;ET0 = 1;p3_0=1;P1=0xff;TH0 = 0xFF;TL0 = 0xE4;TR0 = 0;while(1){key_scan();if(flag_press==1){flag_press=0;TR0=1;sendirdata();}}}//**********按键扫描***********// void key_scan(void){for(i=0;i<=3;i++){P1=keycode[i];if(p1_3==0){keycount=i*3+0;flag_key=1; break;}if(p1_2==0){keycount=i*3+1;flag_key=1;break;}if(p1_1==0){keycount=i*3+2;flag_key=1;break;}}if(flag_key==1){flag_key=0;value1=P1;deltime();value2=P1;if(value1==value2){keyvalue=portvalue[keycount];flag_set=1;flag_press=1;}while(flag_set){value2=P1;if(value1!=value2)flag_set=0;}}}//**********延时**********//void deltime(void){uint k;for(k=0;k<=20;k++){ }}//**********定时中断**********// void time0int(void) interrupt 1{TH0=0xFF;TL0=0xE4;count++;}//**********发送数据**********// void sendirdata(){uchar s=0,datapd=0;endcount=320;p3_0=0;count=0;do{}while(count<endcount); endcount=180;count=0;p3_0=1;do{}while(count<endcount);for(s=0;s<=11;s++){endcount=20;count=0;p3_0=0;do{}while(count<endcount);endcount=20;count=0;p3_0=1;do{}while(count<endcount);}irdata=keyvalue;for(s=0;s<=7;s++){datapd=irdata & wy[s];if (datapd==0){endcount=20;count=0;} else{endcount=60;count=0;} p3_0=0;do{}while(count<endcount);endcount=20;count=0;p3_0=1;do{}while(count<endcount);}irdata=keyvalue;for(s=0;s<=7;s++){datapd=irdata & wy[s];if (datapd==0){endcount=60;count=0;} else{endcount=20;count=0;}p3_0=0;do{}while(count<endcount);endcount=20;count=0;p3_0=1;do{}while(count<endcount);}TR0=0;}红外遥控解码及驱动程序COUNT EQU 30HFLAG_USER1 EQU 45HFLAG_USER2 EQU 46HSA VEDATA EQU 47HCS1 EQU P3.0CS2 EQU P3.1RS EQU P3.3RW EQU P3.4E EQU P3.5PAGES EQU 56HCOLUMN EQU 57HNUM EQU 58HORG 0000HLJMP MAINORG 0003HLJMP EXTER0INTORG 000BHLJMP TIMER0INTORG 1000HMAIN:MOV P1,#0C5HSETB P3.6SETB P3.7MOV TMOD,#01H ;中断初始化MOV TH0,#0FFHMOV TL0,#9CHSETB EASETB IT0SETB ET0SETB EX0MOV R0,52H ;数据接收初始化MOV 52H,#00HMOV 53H,#00HMOV 54H,#00HMOV 55H,#00HMOV 51H,#00HMOV COUNT,#00HMOV R1,#08HMOV R2,#02HCLR PSW.5 ;数据接收标志CLR PSW.1 ;数据处理标志MOV FLAG_USER1,#00HLCALL CLEARMOV DPTR,#TAB0 ;显示初始化MOV PAGES,#1MOV COLUMN,#0LCALL LCD_DISPMOV DPTR,#TAB2MOV PAGES,#1MOV COLUMN,#16LCALL LCD_DISPMOV DPTR,#TAB1MOV PAGES,#1MOV COLUMN,#32LCALL LCD_DISPMOV DPTR,#TAB3MOV PAGES,#1MOV COLUMN,#48LCALL LCD_DISPMOV DPTR,#TAB4MOV PAGES,#1MOV COLUMN,#64LCALL LCD_DISPMOV DPTR,#TAB5MOV PAGES,#1MOV COLUMN,#80 ;显示红外遥控模式LCALL LCD_DISPMOV DPTR,#TAB6MOV PAGES,#3MOV COLUMN,#0LCALL LCD_DISPMOV DPTR,#TAB7MOV PAGES,#3MOV COLUMN,#16LCALL LCD_DISPMOV DPTR,#TAB8MOV PAGES,#3MOV COLUMN,#32LCALL LCD_DISPMOV DPTR,#TAB10MOV PAGES,#3MOV COLUMN,#64LCALL LCD_DISPMOV DPTR,#TAB9MOV PAGES,#3MOV COLUMN,#48LCALL LCD_DISP ;显示状态:初始LOOP: ;是否进行数据处理JNB PSW.1,$LCALL DATACHULICLR PSW.1MOV A,SA VEDATALCALL DATASHOWENDLOOP:LJMP LOOPEXTER0INT: ;外部中断SETB TR0MOV 30H,#00HRETITIMER0INT: ;定时中断,数据的验证和接收.MOV TH0,#0FFHMOV TL0,#9CHINC 30HSETB P3.2MOV C,P3.2JB PSW.5,DATARECEIVEPDJNC ENDTIMER0INTMOV A,30HCLR CSUBB A,#90JC ENDTIMER0INTSETB PSW.5CLR TR0MOV R1,#08HMOV 51H,#00HMOV R0,#52HMOV R2,#04H ;共接受两组数据LJMP ENDTIMER0INTDATARECEIVEPD: ;数据接收判断JNC ENDTIMER0INTCLR TR0MOV A,30HCLR TR0SUBB A,#10JC ORECEIVESETB CMOV A,51HRRC AMOV 51H,ALJMP WENDPDORECEIVE:CLR CMOV A,51HRRC AMOV 51H,AWENDPD:DJNZ R1,ENDTIMER0INT ;重复两次接收,确保存储.MOV R1,#08HMOV @R0,51HMOV @R0,51HINC R0MOV 51H,#00HDJNZ R2,ENDTIMER0INTCLR PSW.5SETB PSW.1SETB P0.0ENDTIMER0INT: ;定时中断结束RETIDATACHULI: ;数据处理MOV A,52HCLR CSUBB A,FLAG_USER1JNZ ENDDATACHULIMOV A,54HANL A,55HJNZ ENDDATACHULIMOV A,54HMOV SA VEDATA,AMOV 52H,#00HMOV 53H,#00HMOV 54H,#00HMOV 55H,#00HENDDATACHULI: ;处理完成,返回主程序RETDATASHOW: ;判断接收信号,进行相应处理CJNE A,#00H,CON1LJMP AOTO ;状态判断CON1:CJNE A,#02H,CON2MOV P1,#0FAHMOV DPTR,#TAB11MOV PAGES,#3LJMP ENDDATASHOW ;后转并显示CON2:CJNE A,#04H,CON3MOV P1,#0E5HMOV DPTR,#TAB12MOV PAGES,#3LJMP ENDDATASHOW ;左转并显示CON3:CJNE A,#05H,CON4MOV P1,#0C5HMOV DPTR,#TAB13MOV PAGES,#3LJMP ENDDATASHOW ;停转并显示CON4:CJNE A,#06H,CON5MOV P1,#0D5HMOV DPTR,#TAB14MOV PAGES,#3LJMP ENDDATASHOW ;右转并显示CON5:CJNE A,#08H,CON6MOV P1,#0F5HMOV DPTR,#TAB15MOV PAGES,#3LJMP ENDDATASHOW ;前转并显示CON6:JMP ENDDATASHOW1ENDDATASHOW:MOV COLUMN,#48LCALL LCD_DISPMOV DPTR,#TAB16MOV PAGES,#3MOV COLUMN,#64LCALL LcD_DISPENDDATASHOW1:RETAOTO:MOV P1,#0C0H ;寻迹壁障程序MOV DPTR,#TAB17MOV PAGES,#1MOV COLUMN,#0LCALL LCD_DISPMOV DPTR,#TAB18MOV PAGES,#1MOV COLUMN,#16LCALL LCD_DISPMOV DPTR,#TAB19MOV PAGES,#1MOV COLUMN,#32LCALL LCD_DISPMOV DPTR,#TAB20MOV PAGES,#1MOV COLUMN,#48LCALL LCD_DISP ;显示寻迹避障MOV DPTR,#TAB10MOV PAGES,#3MOV COLUMN,#64LCALL LCD_DISPMOV DPTR,#TAB9MOV PAGES,#3MOV COLUMN,#48LCALL LCD_DISP ;显示初始LCALL DLY ;模式工作前等待3秒AOTO1: ;自动寻迹避障程序MOV DPTR,#TAB15MOV PAGES,#3MOV COLUMN,#48LCALL LCD_DISPMOV DPTR,#TAB16MOV PAGES,#3MOV COLUMN,#64LCALL LCD_DISP ;显示前转MOV P1,#0F5HJNB PSW.5,AOTO2 ;检测红外信号LCALL CLEARMOV P1,#0C5HLCALL DLY1LJMP MAINAOTO2:JNB P1.6,ZZ ;状态判断JNB P1.7,YZJNB P3.6,HTJNB P3.7,HTSJMP AOTO1ZZ:MOV P1,#0E5H ;右寻迹灯亮MOV DPTR,#TAB12MOV PAGES,#3MOV COLUMN,#48LCALL LCD_DISPLCALL DLYSJMP DDYZ:MOV P1, #0D5H ;左寻迹灯亮MOV DPTR,#TAB14MOV PAGES,#3MOV COLUMN,#48LCALL LCD_DISPLCALL DLYHT:MOV P1,#0FAH ;发现障碍物MOV DPTR,#TAB11MOV PAGES,#3MOV COLUMN,#48LCALL LCD_DISPLCALL DLYSJMP ZZDD:LJMP AOTO1DL Y:MOV R7,#0BDH ;3秒延时DL1:MOV R6,#0E6HDL0:MOV R5,#21HDJNZ R5,$DJNZ R6,DL0DJNZ R7,DL1RETDLY1:MOV R7,#0A7H ;1秒延时DL3:MOV R6,#0ABHDL2:MOV R5,#10HDJNZ R5,$DJNZ R6,DL2DJNZ R7,DL3NOPRETCLEAR: MOV R4,#00H ;清屏程序CLEAR1:MOV A ,R4ORL A,#0B8HLCALL WCL0LCALL WCR0MOV B,#40HLCALL WCL0LCALL WCR0MOV R3,#40HCLEAR2:MOV B,#00HLCALL WCL1LCALL WCR1DJNZ R3,CLEAR2INC R4CJNE R4, #08H, CLEAR1RETLCD_DISP: ;汉字显示程序MOV R1,#02HMOV R0,#00HMOV NUM,#10HDISP: MOV R4,NUMDISPWORD:MOV A,COLUMNCLR CSUBB A,#63JNC YXPMOV A,COLUMNORL A,#40HMOV B,ALCALL WCL0ORL A,#0B8HMOV B,ALCALL WCL0 DISPDATA1:INC COLUMNMOV A,R0MOVC A,@A+DPTRMOV B,ALCALL WCL1LJMP NEXTDISPYXP:MOV A,COLUMNCLR CSUBB A,#64ORL A,#40HMOV B,ALCALL WCR0MOV A,PAGESORL A,#0B8HMOV B,ALCALL WCR0 DISPDATA2:INC COLUMNMOV A,R0MOVC A,@A+DPTRMOV B,ALCALL WCR1 NEXTDISP:INC R0DJNZ R4,DISPWORDCLR CSUBB A,#10HMOV COLUMN, AINC PAGESDJNZ R1,DISPRETWCL0: CLR CS1SETB CS2CLR RSSETB RWWCL00: MOV P2,#0FFHSETB EMOV A,P2CLR EJB ACC.7,WCL00CLR RWMOV P2, BSETB ENOPCLR ERETWCL1: CLR CS1SETB CS2CLR RSSETB RWWCL11: MOV P2,#0FFHSETB EMOV A,P2CLR EJB ACC.7,WCL11CLR RWSETB RSMOV P2, BSETB ECLR ERETWCR0: SETB CS1CLR CS2CLR RSSETB RWWCR00: MOV P2,#0FFHSETB EMOV A,P2CLR EJB ACC.7,WCR00CLR RWMOV P2, BSETB ECLR ERETWCR1: SETB CS1CLR CS2CLR RSSETB RWWCR11: MOV P2,#0FFHSETB EMOV A,P2CLR EJB ACC.7,WCR11CLR RWSETB RSMOV P2, BSETB ECLR ERETTAB0:DB20H,30H,0ACH,63H,20H,10H,04H,04H,04H,04H,0FCH,04H,06H,04H,00H,00H,22H,67H,22H,12H,12H,52H,40H,40H,40H,40H,7FH,40H,40H,60H,40H,00H ; 红TAB1:DB40H,42H,44H,0CCH,00H,42H,36H,2AH,22H,0FEH,21H,29H,25H,80H,00H,00H,00H,40H,20H,1FH,21H,41H,5DH,49H,49H,4FH,49H,49H,5DH,61H,21H,00H ; 外TAB2:DB00H,80H,0E0H,18H,17H,10H,90H,70H,00H,0FFH,20H,40H,80H,00H,00H,00H,01H,40H,20H,11H,0AH,04H,03H,00H,00H,0FFH,00H,00H,00H,01H,03H,00H ; 遥TAB3:DB10H,10H,10H,0FFH,90H,50H,0CH,44H,24H,15H,06H,14H,24H,54H,0CH,00H,02H,42H,81H,7FH,00H,40H,42H,42H,42H,42H,7EH,42H,43H,62H,40H,00H ; 控TAB4:DB10H,10H,0D0H,0FFH,94H,14H,0E4H,0BFH,0A4H,0A4H,0A4H,0BFH,0F4H,26H,04H,00H,04H,03H,00H,0FFH,08H,89H,8BH,4AH,2AH,1EH,2AH,2AH,4BH,0C8H,48H,00H ; 模TAB5:DB10H,10H,90H,90H,90H,90H,90H,10H,0FFH,10H,12H,14H,10H,18H,10H,00H,00H,20H,60H,20H,1FH,10H,10H,08H,01H,06H,18H,20H,40H,80H,70H,00H ; 式TAB6:DB00H,08H,30H,00H,0FFH,20H,20H,20H,20H,0FFH,20H,22H,24H,30H,20H,00H,08H,0CH,02H,01H,0FFH,40H,20H,1CH,03H,00H,03H,0CH,30H,60H,20H,00H; 状TAB7:DB04H,04H,84H,84H,44H,24H,54H,8FH,14H,24H,44H,44H,84H,86H,84H,00H,01H,21H,1CH,00H,3CH,40H,42H,4CH,40H,40H,70H,04H,08H,31H,00H,00H;态TAB8:DB000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,036H,036H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H ;:TAB9:DB10H,10H,91H,0D6H,30H,98H,00H,08H,08H,0F8H,08H,08H,08H,0FCH,08H,00H,02H,01H,00H,0FFH,01H,82H,40H,20H,18H,07H,40H,80H,40H,3FH,00H,00H ; 初TAB10:DB10H,10H,0F0H,1FH,10H,0F0H,40H,60H,58H,47H,40H,40H,50H,60H,0C0H,00H,40H,22H,15H,08H,16H,61H,00H,0FEH,42H,42H,42H,42H,42H,0FFH,02H,00H;始TAB11:DB00H,00H,0FCH,24H,24H,24H,24H,24H,24H,22H,22H,23H,0A2H,30H,20H,00H,40H,30H,0FH,00H,00H,0FFH,41H,41H,41H,41H,41H,41H,0FFH,01H,00H,00H;后TAB12:DB08H,08H,08H,08H,88H,78H,0FH,08H,08H,08H,08H,88H,0CH,08H,00H,00H,20H,50H,48H,46H,41H,41H,41H,41H,7FH,41H,41H,41H,41H,60H,40H,00H;左TAB13:DB40H,20H,0F8H,07H,00H,04H,74H,54H,55H,56H,54H,54H,76H,04H,00H,00H,00H,00H,0FFH,04H,03H,01H,05H,45H,85H,7DH,05H,05H,01H,05H,03H,00H ;停TAB14:DB08H,08H,08H,08H,0C8H,38H,0FH,08H,08H,08H,08H,08H,88H,0CH,08H,00H,08H,04H,02H,01H,0FFH,41H,41H,41H,41H,41H,41H,41H,0FFH,01H,00H,00H ;右TAB15:DB08H,08H,0E8H,29H,2AH,2EH,0E8H,08H,08H,0CCH,0AH,0BH,0E8H,0CH,08H,00H,00H,00H,0FFH,09H,49H,89H,7FH,00H,00H,0FH,40H,80H,7FH,00H,00H,00H;前TAB16:DB08H,0C8H,0B8H,8FH,0E8H,88H,40H,48H,0C8H,7FH,48H,48H,4CH,68H,40H,00H,08H,18H,08H,04H,0FFH,04H,00H,02H,13H,22H,62H,9AH,06H,02H,00H,00H;转TAB17:DB00H,00H,82H,92H,92H,92H,92H,92H,92H,92H,92H,0FFH,02H,00H,00H,00H,04H,04H,04H,04H,0CH,34H,04H,04H,44H,84H,7FH,04H,04H,06H,04H,00H ;寻TAB18:DB40H,42H,0CCH,00H,08H,0C8H,08H,0F9H,0AH,0EH,0F8H,08H,4CH,88H,00H,00H,40H,20H,1FH,20H,42H,41H,50H,4FH,40H,50H,5FH,40H,40H,63H,20H,00H ;迹TAB19:DB40H,42H,0C4H,00H,0FEH,22H,22H,3FH,8AH,0A8H,0C9H,8EH,0C8H,0ACH,88H,00H,40H,20H,1FH,22H,5FH,51H,51H,5FH,40H,44H,44H,7FH,44H,64H,20H,00H ;避TAB20:DB00H,0FEH,22H,5AH,86H,10H,0D2H,56H,5AH,53H,5AH,56H,0F2H,58H,10H,00H,00H,0FFH,04H,08H,17H,10H,17H,15H,15H,0FDH,15H,15H,17H,10H,10H,00H ;障END。

相关文档
最新文档