赞
踩
51单片机
实现步进电机正反转、加减速、启动和停止。
用LCD显示电机工作状态
#include "reg51.h" #include "lcd1602.h" #define uchar unsigned char #define uint unsigned int sbit AA=P2^4;//步进电机 sbit BB=P2^5; sbit CC=P2^6; sbit DD=P2^7; sbit k1=P1^0;//按钮 sbit k2=P1^1; sbit k3=P1^2; sbit k4=P1^3; sbit k5=P1^4; sbit k6=P1^5; uchar flag=0,fang=0;//方向控制 uchar speed=0,time=0;//速度控制0-9 uchar start=0;//启动 uchar sec=0; uchar disp1[]="sudu:0 ";//速度 //主函数 void main() { init_1602(); TMOD|=0X01; TH0=(65536-10000)/256; TL0=(65536-10000)%256; ET0=1;//打开定时器0中断允许 EA=1;//打开总中断 TR0=1;//打开定时器 while(1) { //按键检测 if(!k1)//启动 { start=1; } if(!k2)//停止 { start=0; } if(!k3)//正转 { fang=0; } if(!k4)//反转 { fang=1; } if(!k5)//加速 { if(speed<9) speed++; while(!k5); } if(!k6)//减速 { if(speed>0) speed--; while(!k6); } } } //定时器中断 void Timer0() interrupt 1 { if(start==1)//启动 { if(time<10-speed)//速度0-9 { time++; } else { time=0; if(fang==0) //正转 { switch(flag) { case 0:BB=1;break; case 1:AA=0;break; case 2:CC=1;break; case 3:BB=0;break; case 4:DD=1;break; case 5:CC=0;break; case 6:AA=1;break; case 7:DD=0; } if(flag<7)//下一个状态 flag++; else flag=0; } else //反转 { switch(flag) { case 0:DD=1;break; case 1:AA=0;break; case 2:CC=1;break; case 3:DD=0;break; case 4:BB=1;break; case 5:CC=0;break; case 6:AA=1;break; case 7:BB=0; } if(flag<7)//下一个状态 flag++; else flag=0; } } } //=================显示 if(sec<50)//0.5s sec++; else { sec=0; disp1[5]=speed+0x30;//速度 write_string(1,0,disp1); if(start) { if(fang==0) { write_string(2,6,"right"); } else { write_string(2,6,"left "); } } else { write_string(2,6,"stop "); } } TH0=(65536-10000)/256; TL0=(65536-10000)%256; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。