📄 motor-key.c
字号:
lcd_pos(0x0c+m); //显示方向符号
lcd_wdat(0x3e);
}
}
}
/********************************************************
/*
/* 显示运行状态
/*
/********************************************************/
void motor_RUN()
{
if(on_off==1) //运行停止标志: 1 表示运行 0 表示停止
{
if(j==1) //判断运行键是否重复 ,j=1表示不重复并加速启动 ,j>1表示重复跳过加速启动
{
TR0=1;
TR1=0;
}
lcd_pos(0); //设置显示位置为第一行的第1个字符
m = 0;
while(cdis5[m] != '\0')
{ lcd_wdat(cdis5[m]); //RUNNING
m++; }
motor_DR(); //
}
else
{
TR0=0; TR1=0;
P1 =0x80;
lcd_pos(0); //设置显示位置为第一行的第1个字符
m = 0;
while(cdis3[m] != '\0')
{ lcd_wdat(cdis3[m]); //STOP
m++; }
motor_DR(); //
}
}
void Reta(uchar rate)
{
switch(rate)
{
case(0):
if(k<=7) { if(r==255) { r=0; k++; } r++; }
else { if(r==110) { r=0; k=0; TR1=1; TR0=0; } r++; }
break;
case(1):
if(k<=7) { if(r==255) { r=0; k++; } r++; }
else { if(r==100) { r=0; k=0; TR1=1; TR0=0; } r++; }
break;
case(2):
if(k<=7) { if(r==255) { r=0; k++; } r++; }
else { if(r==70) { r=0; k=0; TR1=1; TR0=0; } r++; }
break;
case(3):
if(k<=7) { if(r==255) { r=0; k++; } r++; }
else { if(r==15) { r=0; k=0; TR1=1; TR0=0; } r++; }
break;
case(4):
if(k<=6) { if(r==255) { r=0; k++; } r++; }
else { if(r==230) { r=0; k=0; TR1=1; TR0=0; } r++; }
break;
case(5):
if(k<=6) { if(r==255) { r=0; k++; } r++; }
else { if(r==150) { r=0; k=0; TR1=1; TR0=0; } r++; }
break;
case(6):
if(k<=6) { if(r==255) { r=0; k++; } r++; }
else { if(r==150) { r=0; k=0; TR1=1; TR0=0; } r++; }
break;
case(7):
if(k<=6) { if(r==255) { r=0; k++; } r++; }
else { if(r==150) { r=0; k=0; TR1=1; TR0=0; } r++; }
break;
case(8):
if(k<=6) { if(r==255) { r=0; k++; } r++; }
else { if(r==150) { r=0; k=0; TR1=1; TR0=0; } r++; }
break;
case(9):
if(k<=5) { if(r==255) { r=0; k++; } r++; }
else { if(r==200) { r=0; k=0; TR1=1; TR0=0; } r++; }
break;
case(10):
if(k<=4) { if(r==255) { r=0; k++; } r++; }
else { if(r==255) { r=0; k=0; TR1=1; TR0=0; } r++; }
break;
case(11):
if(k<=3) { if(r==255) { r=0; k++; } r++; }
else { if(r==255) { r=0; k=0; TR1=1; TR0=0; } r++; }
break;
case(12):
if(k==2) { if(r==255) { r=0; k++; } r++; }
else { if(r==255) {r=0; k=0;TR1=1;TR0=0; } r++;}
break;
case(13):
if(k==1) { if(r==255) { r=0; k++; } r++; }
else { if(r==255) {r=0; k=0;TR1=1;TR0=0; } r++;}
break;
case(14):
if(k==0) { if(r==255) { r=0; k++; } r++; }
else { if(r==255) {r=0; k=0;TR1=1;TR0=0; } r++;}
break;
default:
if(k==0) { if(r==255) { r=0; k++; } r++; }
else { if(r==255) {r=0; k=0;TR1=1;TR0=0; } r++;}
break;
}
}
/********************************************************
*
* 主程序
*
*********************************************************/
main()
{
P0 = 0x7f;
P1 = 0x80;
P2 = 0xf8;
P3 = 0x80;
LCD_init_DIS();
TMOD = 0x11; //T0和T1定时方式1
TL0 = 0xff;
TH0 = 0xff;
TL1 = 0xff;
TH1 = 0xff;
EA = 1; // 开总中断
ET0 = 1; // 开T0中断
ET1 = 1; // 开T1中断
while(1)
{
if(off_on==1) //实时控制标志 0:屏蔽实时控制键 1:实时控制键
{
j=1; //预设 键值不重复
if(K1==0) //判断实时控制运行停止键 高电平 1 停 低电平 0 运行
{
while(K1==0)
{
on_off=0; //预设运行状态 停 止
motor_RUN();
on_off=1; //预设运行状态 运行
j=1; //预设 键值不重复
}
motor_RUN();
}
}
/********************************************************/
if(K2==0) //加速
{
// beep();
delay(100);
while(K2==0);
delay(100);
if(rate<rr)
{
rate++;
snum=(rr+1-rate) * dd;
}
}
/********************************************************/
if(K3==0) //减速
{
// beep();
delay(100);
while(K3==0);
delay(100);
if(rate>0)
{
rate--;
snum=(rr+1-rate) * dd;
}
}
/********************************************************/
if(K4==0) //运行
{
// beep();
delay(100);
while(K4==0);
delay(100);
BEEP=1;
off_on=1;
on_off=1;
motor_RUN();
j++; //使J>1 产生重复
o=0; //pc控制状态 启用
}
/********************************************************/
if(K5==0) //停
{
// beep();
delay(100);
while(K5==0); //等待键释放
delay(100);
off_on=0;
on_off=0;
o=1; //屏蔽pc控制
BEEP=1; // 停止报警
motor_RUN();
j=1; //重复键值1 表示无重复
}
/********************************************************/
if(o==0) //0状态 :Pc控制生效 1状态:屏蔽pc控制
{
if(K6==0) // PC控制键 停
{
// delay(10);
off_on=0;
on_off=0;
// delay(10);
BEEP=0; //报警
motor_RUN();
j=1;
}
}
/********************************************************/
data_dis();
} // while(1) end
} //main end
/********************************************************/
/*
/* 定时器 1 中断
/*
/********************************************************/
void motor_onoff() interrupt 1
{
TH0=-9+k;
TL0=-255+1;
Reta(rate);
P1_0 = !P1_0;
}
/********************************************************/
/*
/* 速度 3 中断
/*
/********************************************************/
void motor() interrupt 3
{
switch(rate)
{
case(0): TH1=-1; TL1=-135; break;
case(1): TH1=-1; TL1=-150; break;
case(2): TH1=-1; TL1=-180; break;
case(3): TH1=-1; TL1=-200; break;
case(4): TH1=-1; TL1=-230; break;
case(5): TH1=-2; TL1=-15; break;
case(6): TH1=-2; TL1=-60; break;
case(7): TH1=-2; TL1=-110; break;
case(8): TH1=-2; TL1=-170; break;
case(9): TH1=-2; TL1=-250; break;
case(10): TH1=-3; TL1=-80; break;
case(11): TH1=-3; TL1=-150; break;
case(12): TH1=-3; TL1=-250; break;
case(13): TH1=-4; TL1=-250; break;
case(14): TH1=-5; TL1=-250; break;
case(15): TH1=-6; TL1=-250; break;
case(16): TH1=-7; TL1=-250; break;
case(17): TH1=-8; TL1=-250; break;
case(18): TH1=-9; TL1=-250; break;
case(19): TH1=-10; TL1=-250; break;
case(20): TH1=-11; TL1=-250; break;
default: TH1=-8; TL1=-255; break;
}
P1_0 = !P1_0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -