您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 直流电机控制C语言程序
/***********************************************************************//***********************************************************************//*******************************************************//***************************电子兴趣小组****************************//***********************************************************************//*****************************************************//**************************单片机组***************************//*****************************************************//***********************************************************************//***********************************************************************//************************************************//************************直流电动机控制C语言程序***************//************************************************//***********************************************************************//***********************************************************************//*****************************************************************************************************************************功能:运行速度设置为40转/秒,经过若干秒后,直流电机转速慢慢下降到运行速度,以设定的速度运行。接线:1、把7279阵列式键盘的J9四只短路帽打在上方,J10打在VCC处2,用8P排线将JD7和八位动态数码显示的JD11相连,JD8和JD12相连。2、最小系统的1.0口接电机单元的Control口,最小系统的T1接电机单元的PulseOut。*****************************************************************************************************************************/#includeSTC12C5A.h//头文件定义#defineuintunsignedint//宏定义#defineucharunsignedchar#definePwmCCAP1HsbitHD7279_cs=P2^7;//7279片选脚sbitHD7279_clk=P1^6;//7279时钟脚sbitHD7279_dat=P1^7;//7279数据脚sbitControl=P1^0;ucharTime0_num;//记录定时器0中断次数uintHz;//保存频率变量bitTime0_bit;//显示频率标示uchari,Str[2];//显示频率中间变量/******************************************函数名称:delayms;函数功能:延时z毫秒;形参:z(延时时间参数)*******************************************/voidDelayms(intz){uintx,y;for(x=z;x0;x--)for(y=11;y0;y--);}/******************************************函数名称:Delay;函数功能:延时函数;形参:z(延时时间参数)*******************************************/voidDelay(uintz){while(z--);}/******************************************函数名称:Write_Com_7279函数功能:向7279芯片写一条纯指令形参:com写进7279芯片的指令*******************************************/voidWrite_Com_7279(ucharcom){uchari;HD7279_cs=0;HD7279_clk=0;for(i=0;i8;i++){com=1;HD7279_dat=CY;HD7279_clk=1;Delay(15);HD7279_clk=0;Delay(15);}}/******************************************函数名称:Write_Dis_7279函数功能:向7279芯片写一条带数据指令形参:com写进7279芯片的指令dat数据*******************************************/voidWrite_Dis_7279(ucharcom,uchardat){Write_Com_7279(com);Write_Com_7279(dat);HD7279_cs=1;}/******************************************函数名称:Read_Byte_7279函数功能:从7279芯片读出一个字节,将数据返回*******************************************/ucharRead_Byte_7279(){uchari,temp;for(i=0;i8;i++){HD7279_clk=1;Delay(15);temp=1;temp|=HD7279_dat;HD7279_clk=0;Delay(15);}returntemp;}/******************************************函数名称:Read_Key_7279函数功能:从7279芯片读出按键值,将数据返回*******************************************/ucharRead_Key_7279(){uchartemp;Write_Com_7279(0x15);temp=Read_Byte_7279();HD7279_cs=1;returntemp;}/******************************************函数名称:Time_init函数功能:初始化两个定时器形参:*******************************************/voidTime_init(void){EA=1;//开中断EX0=1;IT0=1;ET0=1;//开定制器0中断TMOD=0X51;//定时器0,做定时器工作与方式1;定时器1做计数器TR0=1;TR1=1;//定时器,计数器启动CCON=0X40;CCAPM1=0X42;}ucharKey_num;ucharKey_bit;ucharSet_num;ucharZS;floatKp;floata1;floata2;floata3;chare1;chare2;chare3;ucharPWM;voidmain(void){Delayms(10);ZS=20;Kp=1;Time_init();PWM=0;a1=1.5;a2=0.8;a3=0.5;Write_Com_7279(0xa4);Write_Dis_7279(0x82,0x0e);//转速显示while(1){Delayms(255-PWM);Control=0;Delayms(PWM);Control=1;}}/*voidPID_P(void){if(HzZS){Pwm+=(Hz-ZS)*Kp;}if(HzZS){Pwm-=(ZS-Hz)*Kp;//转速调节}for(i=0;i2;i++)//分解数据显示{Str[i]=Hz%10;Hz/=10;Write_Dis_7279(0x80+i,Str[i]);//转速显示}}*/voidPID_PID(void){uchari;intnum;e1=Hz-ZS;num=(Pwm+(a1*e1)+(a3*e3)-(a2*e2));if(num255)num=255;if(num0)num=0;Pwm=num;PWM=num;e2=e1;e3=e2;for(i=0;i2;i++)//分解数据显示{Str[i]=Hz%10;Hz/=10;Write_Dis_7279(0x80+i,Str[i]);//转速显示}}voidTime0()interrupt1{TH0=0x4c;TL0=0x00;//50MS初值Time0_num++;if(Time0_num==10)//一秒到,读计数器值{Time0_num=0;Time0_bit=1;Hz=TH1;Hz=8;Hz|=TL1;TL1=0;TH1=0;//读取计数器值Hz/=6;//12个脉冲为一转PID_PID();}}voidInt0()interrupt0{ucharnum;Key_num=Read_Key_7279();//读取按键值if(Key_num==12){Set_num=1;TR0=0;TR1=0;Write_Com_7279(0xa4);Write_Dis_7279(0x87,0x0a);Write_Dis_7279(0x81,ZS/10);Write_Dis_7279(0x80,ZS%10);}if(Key_num==13){Set_num=2;TR0=0;TR1=0;Write_Com_7279(0xa4);Write_Dis_7279(0x87,0x0a);Write_Dis_7279(0x81,ZS/10);Write_Dis_7279(0x80,ZS%10);}if(Key_num==15){Set_num=0;TR0=1;TR1=1;Write_Com_7279(0xa4);Write_Dis_7279(0x82,0x0e);//转速显示}if(Set_num==1){if(Key_num==0){ZS++;Write_Dis_7279(0x81,ZS/10);Write_Dis_7279(0x80,ZS%10);}if(Key_num==1){ZS--;Write_Dis_7279(0x81,ZS/10);Write_Dis_7279(0x80,ZS%10);}}if(Set_num==2){if(Key_num==0){Kp+=0.1;}if(Key_num==1){Kp-=0.1;}num=Kp*10;Write_Dis_7279(0x81,num/10+0x80);Write_Dis_7279(0x80,num%10);}}
本文标题:直流电机控制C语言程序
链接地址:https://www.777doc.com/doc-5682495 .html