//管脚声明
sbit LED = P1^4; sbit LEDR= P2^2; sbit LEDG= P2^4; sbit LEDY= P2^6; sbit set = P1^5; sbit add = P1^6; sbit dec = P1^7;
//主函数 void main() { //定时器初始化100HZ Init(); m=0; f=0; //模式1 LEDR=1; LEDY=1; LEDG=1; delay(3); LEDR=0; LEDY=1; LEDG=1; //循环 while(1) { //读取亮度AD值 LL=ADC0809(); ////////////////////////////////////// //亮度控制 //光敏控制Ok if(Mode==2) { if(LL>50) { X1=0; } else { if(LL-1>0xf0) LL=1;
31
X1=1020-LL*20; } }
//遥控器ok
else if(Mode==1) { X1=YK; ZY++; else ZY--; } if(ZY==400) { FZ=1; } if(ZY==0) { { X1--; } LED=1;
X2=1000-X1; while(X2!=0) { X2--; }
/////////////////////////////////////// if(set==0) { delay(20); if(set==0) { Mode++; if(Mode==1) { LEDR=1; LEDY=1; LEDG=1; delay(100); LEDR=0; LEDY=1; LEDG=1; } if(Mode==2)
32
{ LEDR=1; LEDY=1; LEDG=1; delay(100); LEDR=1; LEDY=1; LEDG=0; } if(Mode==3) { LEDR=1; LEDY=1; LEDG=1; delay(3); LEDR=1; LEDY=0; LEDG=1; } if(Mode==4) { Mode=1; LEDR=1; LEDY=1; LEDG=1; delay(100); LEDR=0; LEDY=1; LEDG=1; } while(set==0); } }
if(add==0) { delay(20); if(add==0) { YK=YK+100; if(YK>1000) { YK=0; } while(add==0);
33
} }
if(dec==0) { delay(20); if(dec==0) { YK=YK-100; if(YK>1000) { YK=0; } while(dec==0); } }
if(IrOK==1) { //1键 if(Im[2]==0x0c) { LEDR=1; LEDY=1; LEDG=1; delay(100); LEDR=0; LEDY=1; LEDG=1; Mode=1; } //2键 else if(Im[2]==0x18) { LEDR=1; LEDY=1; LEDG=1; delay(100); LEDR=1; LEDY=1; LEDG=0; Mode=2; } //3键 else if(Im[2]==0x5e) {
34
LEDR=1; LEDY=1; LEDG=1; delay(3); LEDR=1; LEDY=0; LEDG=1; Mode=3; } //+ else if(Im[2]==0x40) { YK=YK+100; if(YK>1000) { YK=0; } } //- else if(Im[2]==0x19) { YK=YK-100; if(YK>1000) { YK=0; } } IrOK=0; } } }
//定时器初始化 void Init(void) {
EA=1;//开启总中断
IT1=1;//下降沿有效 EX1=1;//外部中断1开
TMOD=0x11;//定时器初始化 TH0=0;//T0赋初值
35
TL0=0;
TR0=0;//t0开始计时 }
//延时
void delay(uchar i) {
uchar j,k; for(j=i;j>0;j--)
for(k=125;k>0;k--); }
//外部中断解码程序_外部中断0 void intersvr1(void) interrupt 2 using 1 {
LED=1; TR0=1;
Tc=TH0*256+TL0;//提取中断时间间隔时长 TH0=0;
TL0=0; //定时中断重新置零 if((Tc>Imin)&&(Tc if(Tc>Inum1&&Tc Im[m/8]=Im[m/8]>>1|0x80; m++; } if(Tc>Inum2&&Tc Im[m/8]=Im[m/8]>>1; m++; //取码 } if(m==32) { m=0; f=0; if(Im[2]==~Im[3]) { IrOK=1; TR0=0; } else IrOK=0; //取码完成后判断读码是否正确 } //准备读下一码 } } 36