基于51单片机的步进电机控制系统-单片机课程设计报告 - 图文

发布时间 : 星期日 文章基于51单片机的步进电机控制系统-单片机课程设计报告 - 图文更新完毕开始阅读

个字符

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

联系合同范文客服:xxxxx#qq.com(#替换为@)