1、/51 单片机做的红外遥控实验(C 语言)#include#define u8 unsigned char #define u16 unsigned int#define ID 0x00 /本遥控器的 ID 号sbit ir=P33;code u8 seg=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90; /0-9 的段码code u8 s=1,0x40,0x48,0x04,0x02,0x05,0x54,0x0A,0x1E,0x0E;u8 buf4;bit ir_f=0;u8 nu;void delay(u16 x)while(x-);voi
2、d show(u16 x)u8 i=0,k=0;u8 s4; kk: si=x%10; if(x/10)=1)x=x/10; i+;goto kk; k=i+1;for(i=0;ii); delay(300);P0=0XFF; P2=0XFF; void timer0_init()TH0=0;TL0=0;TMOD|=0x01;TR0=0;u16 low_test()u16 t;TR0=1;while(ir=0)TR0=0;t=TH0;t=1;if(t=2750)i4;i+)bufi=receive_8bit();if(buf0=(buf1)/检查系统码是否正确if(buf0=ID)if(buf
3、2=(buf3)/具体按键处理ir_f=1; /遥控有效/*void key()if(buf2=0x40)P1=(10);if(buf2=0x48)P1=(11);*/void ir_execuse()if(ir_f=1)switch(buf2)case 0x40:P1=(10);break;case 0x48:P1=(11);break;case 0x04:P1=(12);break;case 0x02:P1=(13);break;case 0x05:P1=(14);break;case 0x54:P1=(15);break;case 0x0A:P1=(16);break;case 0x1E:P1=(17);break; ir_f=0;void show_d()u8 j;for(j=0;j10;j+)if(sj=buf2)nu=j;break; show(nu);void isr_init()EA=1;EX1=1;/外部中断,一直看 3.3 有没有下降沿。或者 3.3 一直是低电平IT1=1;/外部中断 1 下降沿触发void ex1_isr() interrupt 2EA=0;ir_decode();EA=1;void main()timer0_init();isr_init();while(1)ir_execuse();show_d();/key();