完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
《独立按键控制步进电机运转C语言程序》由会员分享,可在线阅读,更多相关《独立按键控制步进电机运转C语言程序(10页珍藏版)》请在人人文库网上搜索。
1、*名称:步进电机 * 晶振:12MHZ* 修改:无* 内容 :主程序中用 3 个按键,加速、减速、启动和停止。定时器做数码 * 管动态扫描和步进电机驱动。 * 硬件事项:J19的7B,6B,5B,4B依次用杜邦线连接到P27,P26,P25,P24*/#include #define DataPort P1 定义数据端口程序中遇到 DataPort则用P1替换***it LATC H仁P2八0;/定义锁存使能端口段锁存***it LATCH2=P2A1;/位 锁存***it S17=P3A3;/ 独立按键***it S18=P3A2;***it S19=P3A1;***it S20=P3A0;unsign。 2、edcharcodeHEYAO_DuanMa10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0x f8,0x80,0x90;/ 显示段码值 89unsigned char code HEYAO_WeiMa=0x1,0x2,0x4,0x8,0x10,0x20,0x40,0x80;/ 分别对应相应的数码管点亮 ,即位码un sig nedcharTempData8=0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X存储;/ 显示值的全局变量***it A1=P2A7; /定义步进电机连接端口***it B1=P2A6;***it C1=P2A5;***i。 3、t D1=P2A4;#define Coil_AB1 A仁 1;B1=1;C 仁 0;D 仁 O;/A0 目通电,其他相断电#define Coil_BC1 A 仁 0;B1=1;C1=1;D 仁0;/B相通电,其他相断电#define Coil_CD1 A仁 0;B1=0;C 仁1;D1=1;/C 相通电,其他相断电#define Coil_DA1 A仁 1;B1=0;C 仁0;D1=1;相通电,其他相断电#define Coil_A1 A 仁 1;B1=0;C 仁0;D 仁0;/A相通电,其他相断电#define Coil_B1 A 仁 0;B1=1;C 仁 0;D1=0;Bf 通电,其他。 4、相断电#define Coil_C1 A仁0;B仁0;C1=1;D仁0;C目通电,其他相断电#define Coil_D1 A 仁 0;B1=0;C 仁 0;D1=1;Df 通电,其他相断电#define Coil_OFF A 仁 0;B1=0;C 仁0;D 仁 0;全部断电unsigned char Speed;bit StopFlag;bit Flag,***;void Display(unsigned char FirstBit,unsigned char Num);void Init_Timer0(void);un sig ned char KeySca n(v oid);/键盘扫描/*。 5、uS延时函数,含有输入参数 un sig ned char t,无返回值un sig ned char是定义无符号字符变量,其值的范围是0255这里使用晶振12M,大致xxxx 如下 T=tx2+5 uS*/void DelayUs2x(unsigned char t)while(-t);void DelayMs(unsigned chart)while(t-)/ 大致延时 1mSDelayUs2x(245);DelayUs2x(245);/*主函数*/main()unsigned int j,i;/ 旋转一周时间unsigned char num;Init_Timer0();while(1)。 6、/ 正向Coil_OFFnum二KeySca n();循环调用按键扫描if(num=1)第一个按键,速度等级增加if(Speed1)switch(j)Speed+;else if(nu m=2)/第二个按键,速度等级减小Speed-;else if(nu m=3)第三个按键,电机停止和启动 case 0:Coil_OFFStopFlag=1;j+;break;case 1: StopFlag=0;j-;break;else if(num=4)***=1;while(1)&(***)Flag=1;i=50;while(i-)&(Flag)/ 正向 Coil_A1DelayMs(Speed);Coil。 7、_AB1遇到 Coil_AB1A仁1;B1=1;C仁0;D仁(代替DelayMs(Speed);/改变这个参数可以调整电机转速,/数字越小,转速越大 力矩越小 Coil_B1DelayMs(Speed);Coil_BC1DelayMs(Speed);Coil_C1DelayMs(Speed);Coil_CD1 用 DelayMs(Speed);Coil_D1DelayMs(Speed);Coil_DA1DelayMs(Speed);num=KeyScan();if(num=3)/ 第三个按键,电机停止和启动 Flag=0;***=0;Coil_OFFi=50;while(i-)&(Flag)/ 。 8、反?/ num=KeyScan();Coil_A1DelayMs(Speed);Coil_DA1遇到 Coil_AB1A仁1;B1=1;C仁0;D仁(代替DelayMs(Speed);/改变这个参数可以调整电机转速,/数字越小,转速越大 力矩越小 Coil_D1DelayMs(Speed);Coil_CD1DelayMs(Speed);Coil_C1DelayMs(Speed);Coil_BC1DelayMs(Speed);Coil_B1DelayMs(Speed);Coil_AB1DelayMs(Speed);num=KeyScan();if(num=3)/ 第三个按键,电机停止和启动用 F。 9、lag=0;***=0;TempData0=HEYAO_DuanMaSpeed/10;TempData1=HEYAO_DuanMaSpeed%10;/ 分解显示信息,如要显示 68,则 =668%10=8TempData0=HEYAO_DuanMaSpeed/10;TempData1=HEYAO_DuanMaSpeed%10;/*显示函数,用于动态扫描数码管输入参数 FirstBit 表示需要显示的第一位,如赋值 2 表示从第三个数码管开始显示如输入 0 表示从第一个显示。Num 表示需要显示的位数,如需要显示 99 两位数值则该值输入 2 */void Display(unsigned cha。 10、r FirstBit,unsigned char Num)static unsigned char i=0;DataPort=0xff;/ 清空数据,防止有交替重影LATCH1=1;/xxLATCH1=0;DataPort=HEYAO_WeiMai+FirstBit; /取位码LATCH2=1;/位锁存LATCH2=0;DataPort=TempDatai; /取显示数据,段码LATCH1=1;/xxLATCH1=0;i+;if(i=Num)i=0;/*定时器初始化子程序*/void Init_Timer0(void)TMOD |= 0x01;/ 使用模式 1,16位定时器,使用 | 符 号可。 11、以在使用多个定时器时不受影响/TH0=0x00;/ 给定初值/TL0=0x00;EA=1;/ 总 xx 打开ET0=1;定时器xx打开TR0=1;定时器开关打开PT0=1;优先级打开/*定时器xx子程序*/void Timer0_isr(void) interrupt 1static unsigned char times,i;TH0=(65536-1000)/256; 重新赋值 1msTL0=(65536-1000)%256;TR0=0;TR0=1;Display(0,8);if(!StopFlag)if(times=(20-Speed)/最大值 18,所以最小间隔值 20- 18=2tim。 12、es=0;switch(i)case 0:Coil_A1;i+;break;case 1:Coil_B1;i+;break;case 2:Coil_C1;i+;break;case 3:Coil_D1;i+;break;case 4:i=0;break;default:break;times+;/*按键扫描函数,返回扫描键值*/un sig ned char KeySca n(void)if(!S20)/如果检测到低电平,说明按键按下 DelayMs(10); /延时去抖,一般 10-20msif(!S20)再次确认按键是否按下,没有按下则退出while(!S20);如果确认按下按键等待按键释。 13、放,没有释放则一直等待 return 1;if(!S19)如果检测到低电平,说明按键按下DelayMs(10); /延时去抖,一般 10-20msif(!S19)再次确认按键是否按下,没有按下则退出while(!S19);如果确认按下按键等待按键释放,没有释放则一直等待 return 2;if(!S18)如果检测到低电平,说明按键按下DelayMs(10); /延时去抖,一般 10-20msif(!S18)再次确认按键是否按下,没有按下则退出 while(!S18);如果确认按 下按键等待按键释放,没有释放则一直等待 return 3;if(!S17)如果检测到低电平,说明按键按下DelayMs(10); /延时去抖,一般 10-20msif(!S17)再次确认按键是否按下,没有按下则退出 while(!S17);如果确认按 下按键等待按键释放,没有释放则一直等待 return 4;return 0;10 / 10。 |
|
|
|
只有小组成员才能发言,加入小组>>
2434 浏览 0 评论
9099 浏览 4 评论
36771 浏览 19 评论
5025 浏览 0 评论
24743 浏览 34 评论
1527浏览 2评论
1742浏览 1评论
2192浏览 1评论
1552浏览 0评论
523浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 13:55 , Processed in 1.188682 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号