改进代码 #include "reg51.h" #include "stdio.h" #include"1602.h" sbit HC=P1^0; sbit HB=P1^1; sbit HA=P1^2; sbit AL=P3^0; sbit AH=P3^1; sbit BL=P3^6; sbit BH=P3^3; sbit CL=P3^4; sbit CH=P3^5; unsigned char PWM = 50;//300-110 100-45 char WHITH = 100; unsigned char cnt = 0; unsigned int cnt_speed = 0; unsigned int cnt_1s = 0; char fankui = 0; void main() { TMOD = 0x11; //T TL0 = 0xFC; TH0 = 0x18; ET0 = 1; EA = 1; TR0 = 1; //启动T0 while(1) { fankui = ((unsigned char)(HA) << 2) + ((unsigned char)(HB) << 1) + (unsigned char)(HC); } } void timer0() interrupt 1 { TH0 = (65535-500)/256; //50ms TL0 = (65535-500)%256; ET0 = 0; // 禁止定时器0中断 TR0 = 1; // 启动定时器0 cnt++; if( cnt == 100 ) { cnt = 0; } if( cnt < PWM ) { switch(fankui)// { case 0x04://100 AH=1;BH=0;CH=0;AL=1;BL=1;CL=0;break; case 0x06: //110 AH=0;BH=1;CH=0;AL=1;BL=1;CL=0;break; case 0x02://010 AH=0;BH=1;CH=0;AL=0;BL=1;CL=1;break; case 0X03://011 AH=0;BH=0;CH=1;AL=0;BL=1;CL=1;break; case 0x01://001 AH=0;BH=0;CH=1;AL=1;BL=0;CL=1;break; case 0x05://101 AH=1;BH=0;CH=0;AL=1;BL=0;CL=1;break; default: break; } } }
时间: 2023-10-23 21:09:53 浏览: 39
这段代码是控制步进电机旋转的代码,其中使用定时器0来控制PWM的占空比,同时通过读取P1口的三个引脚来获取步进电机的反馈信号来确定电机的旋转方向和速度。在定时器0中断中,根据PWM的值来判断是否需要控制电机旋转,如果需要,则根据反馈信号来确定电机的旋转方向和速度。
建议在代码中加入注释,方便其他人理解你的代码。同时,你可以采用更加规范的命名方式来使代码更容易理解。