基于红外遥控步进电机的设计 联系客服

发布时间 : 星期六 文章基于红外遥控步进电机的设计更新完毕开始阅读5d7a5f8cbdeb19e8b8f67c1cfad6195f312be8e6

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); } }