case 4:i=0;break; default:break; } }
times++; } }
// 调用数码管扫描 }
/*------------------------------------------------ 外部中断0中断处理 作用:接收信号,并存储到数组中
------------------------------------------------*/ void EX0_ISR (void) interrupt 0 //外部中断0服务函数 {
static unsigned char i; //接收红外信号处理 static bit startflag; //是否开始处理标志位
if(startflag) {
if(irtime<63&&irtime>=33)//引导码 TC9012的头码,9ms+4.5ms i=0;
irdata[i]=irtime;//存储每个电平的持续时间,用于以后判断是0还是1
irtime=0; i++; if(i==33)//存储33位2个字节的用户码,1个字节数据码,一个字节数据码反码 ,一位同步位 {
irok=1;//处理完毕标志为1 i=0; } } else {
irtime=0; startflag=1; } }
/*------------------------------------------------ 键值处理
------------------------------------------------*/
void Ir_work(void)//红外键值散转程序 {
switch(IRcord[2])//判断第三个数码值 {
case 0x40: {
if(Speed<14) Speed++;
TempData[0]=zf[f];
TempData[1]=Tab[Speed/10]; TempData[2]=Tab[Speed]; }break;
case 0x44:{
if(Speed>1) Speed--;
TempData[0]=zf[f];
TempData[1]=Tab[Speed/10]; TempData[2]=Tab[Speed]; }break;
case 0x43:
{ Coil_OFF;
TempData[0] = zf[f]; TempData[1] = Tab[0]; TempData[2] = Tab[0]; StartFlag=0; LCD_Write_String(5,1,TempData); } break; case 0x09:
{ TempData[0] = zf[f];
TempData[1] = Tab[Speed/10]; TempData[2] = Tab[Speed]; StartFlag=1;
}break;
case 0x07: { if(f==1)
{ DelayMs(200);Coil_OFF;} f=0;
TempData[0]=zf[f]; zfFlag=0; }break;
case 0x15: { if(f==0)
{ DelayMs(200);Coil_OFF;} f=1;
TempData[0]=zf[f]; zfFlag=1; }break; default:break; }
if(StartFlag)
LCD_Write_String(5,1,TempData); irpro_ok=0;//处理完成标志 }
/*------------------------------------------------ 红外码值处理
------------------------------------------------*/ void Ircordpro(void)//红外码值处理函数 {
unsigned char i, j, k; unsigned char cord,value;
k=1;
for(i=0;i<4;i++) //处理4个字节 {
for(j=1;j<=8;j++) //处理1个字节8位 {
cord=irdata[k];
if(cord>7)//大于某值为1,这个和晶振有绝对关系,这里使用12M计算,此值可以有一定误差 value|=0x80; if(j<8) {
value>>=1; }
k++; }
IRcord[i]=value; value=0; }
irpro_ok=1;//处理完毕标志位置1 }
void DelayUs2x(unsigned char t) {
while(--t); }
/*------------------------------------------------ mS延时函数,含有输入参数 unsigned char t,无返回值 unsigned char 是定义无符号字符变量,其值的范围是 0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/ void DelayMs(unsigned char t) {
while(t--) {
//大致延时1mS DelayUs2x(245); DelayUs2x(245); } }