@daihui713
以下程序是利用定时器中断红外解码来实现24键的遥控功能(带EEP存储),所有功能都在主函数中完成。
由于采用函数套函数的方式,相比上面第一次,程序显得精简了很多
下面是主函数部分,不包含子函数和定时器中断解码函数
#define uchar unsigned char
#define uint unsigned int
#define IRIN RA2
#define IRIN_HIGH() RA2=1
#define red 0x1D
#define green 0x0F
#define blue 0x2D
#define RG 0x1F
#define GB 0x2F
#define BR 0x3D
__CONFIG(0xF9C4);
__CONFIG(0xDCFF);
const uchar six_colour[6]={0x1D,0x0F,0x2D,0x1F,0x3D,0xFF};
uchar IR_data[4]={0x00,0x00,0x00,0x00};
bit down_mark,start,codebit_ok;
uchar IR_code=0,num=3,num_1=5,a=1;
uint E,fade_1,fade_2,fade_3,fade_4;
void delay_ms(uint x,uchar w);
void port_init();
void timer2_init();
void fade_pwm(uchar F,uchar G,uchar H);
void colour_PWM(uchar BILI,uchar colourAB,uchar colourA);
void fade();
void strobe();
void danse_flash(uchar six_x,uchar code_x);
void EEPROM_write(uchar date,uchar addr);
uchar EEPROM_read(uchar addr);
void main()
{
port_init();
IR_code=EEPROM_read(0x01);
if(IR_code>24)IR_code=0;
num=EEPROM_read(0x02);
if(num>6)num=3;
num_1=EEPROM_read(0x03);
if(num_1>12)num_1=6;
timer2_init();
IRIN_HIGH();
while(1)
{
if(a)
{
if(IR_code!=0)
{
switch(IR_code)
{
case 0x04:
while((a)&&(IR_code==0x04))colour_PWM(2,red,red); //单色红
break;
case 0x05:
while((a)&&(IR_code==0x05))colour_PWM(2,green,green); //单色绿
break;
case 0x06:
while((a)&&(IR_code==0x06))colour_PWM(2,blue,blue); //单色蓝
break;
case 0x07:
while((a)&&(IR_code==0x07))colour_PWM(2,0xFF,0xFF); //单色白
break;
case 0x08:
while((a)&&(IR_code==0x08))colour_PWM(11,RG,red);
break;
case 0x09:
while((a)&&(IR_code==0x09))colour_PWM(11,GB,green);
break;
case 0x0A:
while((a)&&(IR_code==0x0A))colour_PWM(11,GB,blue);
break;
case 0x0C:
while((a)&&(IR_code==0x0C))colour_PWM(8,RG,red);
break;
case 0x0D:
while((a)&&(IR_code==0x0D))colour_PWM(3,GB,green);
break;
case 0x10:
while((a)&&(IR_code==0x10))colour_PWM(5,RG,red);
break;
case 0x11:
while((a)&&(IR_code==0x11))colour_PWM(2,GB,blue);
break;
case 0x14:
while((a)&&(IR_code==0x14))colour_PWM(2,green,red); //混色黄色
break;
case 0x15:
while((a)&&(IR_code==0x15))colour_PWM(5,GB,blue);
break;
case 0x0B: //三基色跳变FLASH
danse_flash(3,0x0B);
break;
}
switch(IR_code)
{
uchar w;
case 0x0E:
while((a)&&(IR_code==0x0E))colour_PWM(11,BR,red);
break;
case 0x0F: //七色跳变FLASH+6色呼吸渐变FADE
for(w=0;w<5;w++)
{
if((a==0)||(IR_code!=0x0F))break;
danse_flash(6,0x0F);
}
for(w=0;w<5;w++)strobe();
break;
case 0x12:
while((a)&&(IR_code==0x12))colour_PWM(5,BR,red);
break;
case 0x13:
while((a)&&(IR_code==0x13))fade(); //七色平湖过渡型渐变FADE
break;
case 0x16:
while((a)&&(IR_code==0x16))colour_PWM(2,blue,red); //混色紫色
break;
case 0x17: // //七色跳变FLASH
danse_flash(6,0x17);
break;
}
}
else colour_PWM(2,0xFF,0xFF); //第一次开机 ON时 发白光
}
else PORTA=0x0D;
}
}
4099081
1494232
50
312503
说说你的看法
登录后可以回复楼主登录