单片机红外遥控+步进电机+1602液晶显示c语言源程序

时间:2012-12-05来源:网络

}
void int0() interrupt 0 using 1
{
uint i;
for(i=0;i4;i++)
{
delay1000();
if(IR_RE==1){k=~k;} //刚开始为4.5ms的引导码,如果4ms内出现高电平则退出解码程序
}

if(k==0)
{
EX0=0; //检测到有效信号关中断,防止干扰
IR_decode(); //如果接收到的是有效信号,则调用解码程序
//解码成功,调用显示程序,显示该键值
}
EX0=1; //开外部中断,允许新的遥控按键
}
void main(void)
{
InitLcd();//
DelayMs(15);

sprintf(Test1,"STEP MOTOR SPEED");//the first line
ShowString(0,Test1);
ShowChar(0x19,'r');
ShowChar(0x1a,'p');
ShowChar(0x1b,'m');
count = 0;
step_index = 0;
spcount = 0;
stop_flag = 0;

P1_0 = 0;
P1_1 = 0;
P1_2 = 0;
P1_3 = 0;
SP=0x60;
EA = 1; //允许CPU中断
TMOD = 0x11; //设定时器0和1为16位模式1
ET0 = 1; //定时器0中断允许
EX0=1;
TH0 = 0xFE;
TL0 = 0x0C; //设定时每隔0.5ms中断一次
TR0 = 1; //开始计数
turn=0;

speedlevel=1;

while(1)
{
if(turn==0)
ShowChar(0x14,'+');
else
ShowChar(0x14,'-');
if(TR0 ==0)
{
ShowChar(0x15,'0');
ShowChar(0x16,'0');
ShowChar(0x17,'0');
ShowChar(0x18,'0');
}
else
{
if(speedlevel==1)
{
ShowChar(0x15,'3');
ShowChar(0x16,'0');
ShowChar(0x17,'0');
ShowChar(0x18,'0');
}
else if(speedlevel==2)
{
ShowChar(0x15,'1');
ShowChar(0x16,'5');
ShowChar(0x17,'0');
ShowChar(0x18,'0');
}
else if(speedlevel==3)
{
ShowChar(0x15,'1');
ShowChar(0x16,'0');
ShowChar(0x17,'0');
ShowChar(0x18,'0');
}
else if(speedlevel==4)
{
ShowChar(0x15,'0');
ShowChar(0x16,'7');
ShowChar(0x17,'5');
ShowChar(0x18,'0');
}
else if(speedlevel==5)
{
ShowChar(0x15,'0');
ShowChar(0x16,'6');
ShowChar(0x17,'0');
ShowChar(0x18,'0');
}
}
}
}
//定时器0中断处理
void timeint(void) interrupt 1 using 0
{
TH0=0xFE;
TL0=0x0C; //设定时每隔0.5ms中断一次

count++;

spcount--;
if(spcount=0)
{
spcount = speedlevel;
gorun();
}

}

void delay(unsigned int endcount)
{
count=0;
do{}while(countendcount);
}

void gorun()
{
if (stop_flag==1)
{
P1_0 = 0;
P1_1 = 0;
P1_2 = 0;
P1_3 = 0;
return;
}

switch(step_index)
{
case 0: //0
P1_0 = 1;
P1_1 = 0;
P1_2 = 0;
P1_3 = 0;
break;
case 1: //0、1
P1_0 = 1;
P1_1 = 1;
P1_2 = 0;
P1_3 = 0;
break;
case 2: //1
P1_0 = 0;
P1_1 = 1;
P1_2 = 0;
P1_3 = 0;
break;
case 3: //1、2
P1_0 = 0;
P1_1 = 1;
P1_2 = 1;
P1_3 = 0;
break;
case 4: //2
P1_0 = 0;
P1_1 = 0;
P1_2 = 1;
P1_3 = 0;
break;
case 5: //2、3
P1_0 = 0;
P1_1 = 0;
P1_2 = 1;
P1_3 = 1;
break;
case 6: //3
P1_0 = 0;
P1_1 = 0;
P1_2 = 0;
P1_3 = 1;
break;
case 7: //3、0
P1_0 = 1;
P1_1 = 0;
P1_2 = 0;
P1_3 = 1;
}

if (turn==0)
{
step_index++;
if (step_index>7)
step_index=0;
}
else
{
step_index--;
if (step_index0)
step_index=7;
}

}

1 2

关键词: 单片机 红外遥控 步进电机 1602液晶

加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW

或用微信扫描左侧二维码

相关文章

查看电脑版