单片机红外遥控+步进电机+1602液晶显示c语言源程序
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;
}
}
- FPGA的DSP性能揭秘(06-16)
- 基于单片机通用引脚的软件UART设计(10-16)
- 分时操作系统思想在单片机中的具体应用 (10-30)
- 基于AT89C51+DSP的双CPU伺服运动控制器的研究(05-26)
- 关于RTX51 TINY的分析与探讨(05-30)
- 基于MC9S12DGl28单片机的智能寻迹车设计(04-03)
