个字符
m = 0;
while(cdis2[m] != '\\0') {
lcd_wdat(cdis2[m]); //显示字符 m++; }
delay(3000); //延时
lcd_pos(0); //设置显示位置为第一行的第1个字符
m = 0;
while(cdis3[m] != '\\0')
{ //显示字符 lcd_wdat(cdis3[m]); m++; }
lcd_pos(0x40); //设置显示位置为第二行第1个字符
m = 0;
while(cdis4[m] != '\\0') {
lcd_wdat(cdis4[m]); //显示字符 m++; }
for(m=0;m<2;m++) {
lcd_pos(0x0c+m); //显示方向符号 lcd_wdat(0x3e); } }
/********************************************************/ /*
/*数据转换子程序 /*
/********************************************************/ void data_conv() {
data_temP1=data_temp/10; //高位 if(data_temP1==0)
{data_temP1=0x20;} //高位为0不显示 else
{data_temP1=data_temP1+0x30;}
data_temp2=data_temp; //低位 data_temp2=data_temp2+0x30; }
/********************************************************/ /*
/*数据显示子程序 /*
/********************************************************/ void data_dis()
{
data_temp = snum; //显示圈数 data_conv();
lcd_pos(0x44);
lcd_wdat(data_temP1); lcd_pos(0x45);
lcd_wdat(data_temp2);
data_temp = rate; //显示速率 data_conv();
lcd_pos(0x4d);
lcd_wdat(data_temP1); lcd_pos(0x4e);
lcd_wdat(data_temp2); }
/******************************************************** /*
/* 显示运行方向符号 /*
/********************************************************/ void motor_DR() {
if(direction==1) //正转方向标志 { for(m=0;m<2;m++) {
lcd_pos(0x0c+m); //显示方向符号 lcd_wdat(0x3e); } }
else
{ for(m=0;m<2;m++) //反转方向标志 {
lcd_pos(0x0c+m); //显示方向符号 lcd_wdat(0x3c); } } }
/******************************************************** /*
/* 显示运行状态 /*
/********************************************************/ void motor_RUN() {
if(on_off==1) { TR0=1;
lcd_pos(0); //设置显示位置为第一行的第1个字符 m = 0;
while(cdis5[m] != '\\0')
{ lcd_wdat(cdis5[m]); //RUNNING m++; }
motor_DR(); // }
else
{ TR0=0; P1 =0x0f;
lcd_pos(0); //设置显示位置为第一行的第1个字符 m = 0;
while(cdis3[m] != '\\0')
{ lcd_wdat(cdis3[m]); //STOP m++; }
motor_DR(); // snum=snum1; //
number1=0; //清圈数计数器 } }
void motor_RUN1() {
if(on_off1==1) { TR1=1; rate_ctr=0;
lcd_pos(0); //设置显示位置为第一行的第1个字符 m = 0;
while(cdis6[m] != '\\0')
{ lcd_wdat(cdis6[m]); //DIANDONG m++; }
motor_DR(); // }
else { TR1=0; P1 =0x0f;
lcd_pos(0); //设置显示位置为第一行的第1个字符 m = 0;
while(cdis3[m] != '\\0')
{ lcd_wdat(cdis3[m]); //STOP m++; }
motor_DR(); // snum=snum1; //
number1=0; //清圈数计数器 } }
/******************************************************** * * 主程序 * *********************************************************/
main() {
LCD_init_DIS();
TMOD = 0x11; //T0定时方式1 TL0 = 0xff; TH0 = 0xf5; TL1 = 0xff; TH1 = 0xf5; EA = 1; ET0 = 1; ET1=1;
P1 = 0x0f;
while(1) {
if(K1==0)
{
delay(20); if(K1==0) {
while(K1==0); //等待键释放 on_off=~on_off; motor_RUN(); }
} //K1 end
/********************************************************/ if(K2==0) {
delay(20); if(K2==0) {
if(snum_dr==1) { snum++;
snum1=snum;
if(snum==0x14) //14H=20 { snum_dr=~snum_dr;} }
else {snum--; snum1=snum;
if(snum==0x01) { snum_dr=~snum_dr; } } } delay(100); } //K2 end
/********************************************************/ if(K3==0) {
delay(20); if(K3==0) {
direction=~direction; motor_DR(); } delay(100); }//K3 end
/********************************************************/ if(K4==0) {
delay(20); if(K4==0) {
if(rate_dr==1) { rate++;
if(rate==0x10)
{ rate_dr=~rate_dr;} }
else {
rate--;
if(rate==0x01) { rate_dr=~rate_dr; }
} } delay(100); } //K4 end
/********************************************************/
if(number1==snum1) //与设定圈数是否相等 { number1=0; on_off=0; TR0=0; snum=snum1; P1=0x0f;
motor_RUN(); }
data_dis();
/********************************************************/ if(K5==0) //点动 { on_off1=1; motor_RUN1(); while(K5==0) { ; } on_off1=0; motor_RUN1(); }
} // while(1) end } //main end
/********************************************************/ /*
/* 定时器 0 中断 /*
/********************************************************/
void motor_onoff() interrupt 1 {
TL0 = 0xff; TH0 = 0xf5; q++;
if(q < rate) { return; } else
{ q=0;
number++; //脉冲计数加一
if(number==4096) //8*8个脉冲电机转一圈,又减速比为1/64,故电机外轴转一圈为64*64个脉冲
{ snum--; number=0;
number1++; } //电机已转动圈数加一