C语言 步进电机的正反转 启停 控制程序 求解释
main(){lcd_init();//³õʼ»¯LCDdelay(10);init_disp();TMOD...
main()
{
lcd_init(); // ³õʼ»¯LCD
delay(10);
init_disp();
TMOD=0x02;
TH0=0x06;
TL0=0x06;
EA=1;
ET0=1;
flag_cw_ccw=1; //ĬÈÏΪÕýת
EX1=1;
EX0=1;
IT0=1;
IT1=1;
while(1)
{
if(flag_status) //Ϊ1ʱ ¹¤×÷
{
for(r=0;r<64;r++)
{
motor_cw_ccw();
if(flag_status==0)break;//Í£Ö¹ ʵʱÏàÓ¦Í˳ö
}
}
}
}
//¶¨Ê±Æ÷ÖжÏ×Óº¯Êý
void timer0() interrupt 1
{
count=count+1;
if(count>=tab[sp])
{
count=0;
flag=1;
}
}
//ÍⲿÖжÏ0 ÉêÇëÖжÏ
void INIT0() interrupt 0
{
scan_key();//Ö÷ÒªÓÃÓÚ°´¼üµÄʶ±ð ¿ìËÙµÄʱ¼äÏàÓ¦
}
//ÍⲿÖжÏ1 ÉêÇëÖжÏ
void INIT1() interrupt 2
{
BYTE temp;
flag_status=!flag_status;
delay(30);
if(flag_status) //Ϊ1ʱ ¹¤×÷ÔËת
{
lcd_pos(0x0); //
add = 0;
while(dis1[add] != '\0')
{
lcd_wdat(dis1[add]); // ÏÔʾ×Ö·û"run "
add++;
}
}
else //Ϊ0ʱ Á¢¼´Í£Ö¹
{
lcd_pos(0x0); //
add = 0;
while(dis1[add] != '\0')
{
lcd_wdat(dis0[add]); // ÏÔʾ×Ö·û"stop"
add++;
}
}
do
{
temp=P3;
temp&=0x08;
delay(30);
}while(temp!=0x08);
} 展开
{
lcd_init(); // ³õʼ»¯LCD
delay(10);
init_disp();
TMOD=0x02;
TH0=0x06;
TL0=0x06;
EA=1;
ET0=1;
flag_cw_ccw=1; //ĬÈÏΪÕýת
EX1=1;
EX0=1;
IT0=1;
IT1=1;
while(1)
{
if(flag_status) //Ϊ1ʱ ¹¤×÷
{
for(r=0;r<64;r++)
{
motor_cw_ccw();
if(flag_status==0)break;//Í£Ö¹ ʵʱÏàÓ¦Í˳ö
}
}
}
}
//¶¨Ê±Æ÷ÖжÏ×Óº¯Êý
void timer0() interrupt 1
{
count=count+1;
if(count>=tab[sp])
{
count=0;
flag=1;
}
}
//ÍⲿÖжÏ0 ÉêÇëÖжÏ
void INIT0() interrupt 0
{
scan_key();//Ö÷ÒªÓÃÓÚ°´¼üµÄʶ±ð ¿ìËÙµÄʱ¼äÏàÓ¦
}
//ÍⲿÖжÏ1 ÉêÇëÖжÏ
void INIT1() interrupt 2
{
BYTE temp;
flag_status=!flag_status;
delay(30);
if(flag_status) //Ϊ1ʱ ¹¤×÷ÔËת
{
lcd_pos(0x0); //
add = 0;
while(dis1[add] != '\0')
{
lcd_wdat(dis1[add]); // ÏÔʾ×Ö·û"run "
add++;
}
}
else //Ϊ0ʱ Á¢¼´Í£Ö¹
{
lcd_pos(0x0); //
add = 0;
while(dis1[add] != '\0')
{
lcd_wdat(dis0[add]); // ÏÔʾ×Ö·û"stop"
add++;
}
}
do
{
temp=P3;
temp&=0x08;
delay(30);
}while(temp!=0x08);
} 展开
1个回答
展开全部
中断2,启动-停止切换(通过切换flag_status),显示状态。do-while是延时。
中断1,计数器count增1,如果达到预设的数值tab[sp],计数器归零,标志flag置1。这个好像与速度有关。通过调整延时时间来调整速度。
中断0,读键盘。没有scan_key()的源代码,不知道里面有些什么操作。
while(1){...}循环是电机运转,flag_status是状态,1转动,0停止。
没有看到与正转反转有关的代码。也许在motor_cw_ccw();函数里面,这个就是电机动一下的函数。
原程序不完整,没有相应函数、变量的定义及意义说明。难以确切理解。
中断1,计数器count增1,如果达到预设的数值tab[sp],计数器归零,标志flag置1。这个好像与速度有关。通过调整延时时间来调整速度。
中断0,读键盘。没有scan_key()的源代码,不知道里面有些什么操作。
while(1){...}循环是电机运转,flag_status是状态,1转动,0停止。
没有看到与正转反转有关的代码。也许在motor_cw_ccw();函数里面,这个就是电机动一下的函数。
原程序不完整,没有相应函数、变量的定义及意义说明。难以确切理解。
更多追问追答
追问
我能不能给你发过去 帮我大概的解释下 过两天就答辩了
追答
782065873@qq.com,我试试
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |