资源描述:
《独立按键控制步进电机运转c语言程序》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、*名称:步进电机**品振:12MHZ**修改:无**内容:主程序屮用3个按键,加速、减速、启动和停止。定时器做数码**管动态扫描和步进电机驱动。***硬件事项:J19的7B,6B,5B,4B依次用杜邦线连接到P27,P26,P25,P24****/include#defineDataPortP1//定义数据端口程序中遇到DataPort则用Pl替换sbitLATCHl=P2A0;//定义锁存使能端口段锁存sbitLATCH2=P2A1;//位锁存sbitS17=P3A3;〃独立
2、按键sbitS18二P3人2;sbitS19=P3Al;sbitS20=P3A0;unsignedcharcodeHEYAO_DuanMa[10J={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//显示段码值0123456789unsignedcharcodeHEYAO_WeiMa[]={Ox1,0x2,0x4,0x8,Ox10,0x20,0x40,0x80);〃分别对应相应的数码管点亮,即位码unsignedcharTempData⑻二
3、{0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF};〃存储显示值的全局变量sbitA1=P2A7;〃定义步进电机连接端口sbitB1=P2A6;sbitC1=P2A5;sbitD1=P2A4;#defineCoil.AB1{Al=l;Bl=l;Cl=0;Dl=0;}//AB相通电,其他相断电#defineCoil.BC1{Al=0;Bl=l;Cl=l;Dl=0;}//BC相通电,其他相断电#dcfincCoil_CDl{Al=0;Bl=0;Cl=l;Dl=l;}/
4、/CD相通电,其他相断电#defineCoil.DAl{Al=l;Bl=0;Cl=0;Dl=l;}//Dffl通电,其他相断电#defineCoil_Al{Al=l;Bl=0;Cl=0;Dl=0;}//Affi通电,其他相断电#defmeCoil.B1{Al=0;Bl=l;Cl=0;Dl=0;}//B相通电,其他相断电#dcfincCoil.Cl{A1=O;B1=O;C1=1;D1=O;}//C相通电,其他相断电#defineCoil_Dl{A1=O;B1=O;C1=O;D1=1;}//D相通电
5、,其他相断电#defineCoil_OFF{A1=O;B1=O;C1=0;D1=0;}//全部断电unsignedcharSpeed;bitStopFlag;bitFlag,sb;voidDisplay(unsignedcharFirstBit,unsignedcharNum);voidlnit_TimerO(void);unsignedcharKeyScan(void);//键盘扫描uS延吋函数,含有输入参数unsignedchart,无返回俏unsignedchar是定义无符号字符变fi,J
6、t值的范围是0-255这里使用品振12M,大致延吋长度如下T=tx2+5uS*/voidDelayUs2x(unsignedchart){while(—t);}voidDelayMs(unsignedchart){whilc(t—){〃大致延时ImSDelayUs2x(245);DelayUs2x(245);}主函数main(){unsignedintjj;//旋转一周时间unsignedcharnum;Init_TimciO();while(l)〃正向(CoilOFFnum=KcyScan()
7、;〃循环调用按键担描if(num==l)//第一个按键,速度等级增加{if(Speed<18)Speed++;}elseif(num==2)//第二个按键,速度等级减小{if(Speed>l)Speed-;)elseif(num==3)//笫三个按键,Hi机停止和启动switch。){case0:Coil_OFFStopFlag=1;j++;break;case1:StopFlag=0;j—;break;1}elseif(num==4){sb=l;while((l)&&(sb)){Flag=l;
8、〃正向//遇到Coil_AB1用〃改变这个参数可以调整电机转速,〃数字越小,转速越大,力矩越小i=50;while((i-)&&(Flag)){Coil_AlDclayMs(Spccd);Coil.AB1{A1=1;B1=1;C1=O;D1=O;}代替DelayMs(Speed);CoiI_BlDelayMs(Speed);Coil_BClDelayMs(Speed);Coil_ClDelayMs(Speed);CoilCD1DelayMs(Speed);Coil_DlDelayMs(Speed