发布时间 : 星期日 文章基于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; }