步进电机的单片机控制.docVIP

  • 0
  • 0
  • 约3千字
  • 约 5页
  • 2023-09-08 发布于四川
  • 举报
用MCS-51系列单片机作为控制器;采用两相双极性步进电机为控制对象;采用L297/298驱动芯片为步进电机驱动器;用加速、减速、正转、反转4个键进行相应的控制;用LCD显示步进的电机的工作状态。 主程序: #includeLCD1602.h sbit s1=P1^0; //定义键与51单片机连接的引脚 sbit s2=P1^1; sbit s3=P1^2; sbit s4=P1^3; sbit P3_6=P3^6; sbit P3_7=P3^7; uchar Speed; uchar SPEEDdis[4]; //存放转换成液晶显示字符(ASIIC)的数组 void delayms (uint x) //延时子函数 { uchar i,j; for ( i=x;i--;i0) for (j=0; j110; j++); } void disspeed() //显示子程序 { unsigned char s=1000*8/Speed; SPEEDdis[0]=s /100+0x30; SPEEDdis[1]=s %100/10+0x30; SPEEDdis[2]=s %100%10+0x30; SPEEDdis[3]=\0; //最后一个字符是回车符号 LCD_Prints(1,0,SPEEDdis); } void main() { IT0=1; EA=1; //开总中断 EX0=1; //开外部中断0中断 LCD_Initial(); //初始化液晶 while(1) { delayms(Speed); P3_7=~P3_7; } } void int0() interrupt 0 //按键中断 { if(s1==0) { if(Speed50) //加速 Speed=Speed-10; else Speed=50; s4=1; s2=1; s3=1; disspeed(); } if(s2==0) //减速 { if(Speed150) Speed=Speed+10; else Speed=150; s1=1; s3=1; s4=1; disspeed(); } if(s3==0) { P3_6=1; //正转 s1=1; s2=1; s4=1; LCD_Prints(5,1,zhengzhuan); } if(s4==0) { P3_6=0; //反转 s1=1; s2=1; s3=1; LCD_Prints(5,1,fanzhuan ); } } LCD程序: #includereg52.h #includeintrins.h //此头文件定义有_nop_()函数 #includeLCD1602.h uchar LCD_Wait() { LcdRs=0; LcdRw=1; _nop_(); LcdEn=1; _nop_(); LcdEn=0; return DBPort; } #define LCD_COMMAND 0 //命令 #define LCD_DATA 1 //数据 #define LCD_CLEAR_SCREEN 0x01 //清屏 #define LCD_HOMING 0x02 //光标返回点 void LCD_Write(bit style,uchar input) { LcdEn=0; LcdRs=style; LcdRw=0; _nop_(); DBPort=input; _nop_(); LcdEn=1; _nop_(); LcdEn=0; _nop_(); LCD_Wait(); } #define LCD_SHOW 0x04 //显示开 #define LCD_HIDE 0x00 //显示关 #define LCD_CURSOR 0x02 //显示光标 #

文档评论(0)

1亿VIP精品文档

相关文档