2022年步进电机程序 2.pdf
《2022年步进电机程序 2.pdf》由会员分享,可在线阅读,更多相关《2022年步进电机程序 2.pdf(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、步进电机控制程序(2008-06-05 19:07:55) 转载标签:it 分类:程序设计步进电机 (键盘控制可调速) #include #define uchar unsigned char static unsigned int count; /计数static int step_index; /步进索引数,值为07 static bit turn; /步进电机转动方向static bit stop_flag; /步进电机停止标志static int speedlevel; / 步进电机转速参数,数值越大速度越大,最小值为1,速度最慢static int spcount; /步进电机转速参
2、数计数void ddelay(void); /键盘扫描延时函数void delay(unsigned int endcount); /延时函数,延时为endcount*1 毫秒void gorun(); /步进电机控制步进函数 sbit P10=P20 ; /电机端口定义 sbit P11=P21 ; sbit P12=P22; sbit P13=P23 ; void ddelay(void) uchar i; for (i=300;i0;i-); uchar keyscan(void) uchar scancode; uchar tmpcode; P1 = 0 xf8; / 发全 0 行扫描
3、码 if (P1&0 xf8)!=0 xf8) / 若有键按下 ddelay(); / 延时去抖动 if (P1&0 xf8)!=0 xf8) / 延时后再判断一次,去除抖动影响 scancode = 0 xfe; while(scancode&0 x08)!=0) / 逐行扫描 P1 = scancode; / 输出行扫描码 if (P1&0 xf8)!=0 xf8) / 本行有键按下名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 17 页 - - - - - - -
4、- - tmpcode = (P1&0 xf8)|0 x07; return(scancode)+(tmpcode); / 返回特征字节码,为1 的位即对应于行和列 else scancode = (scancode1)|0 x01; / 行扫描码左移一位 return(0); / 无键按下,返回值为0 void main(void) uchar key; count = 0; step_index = 0; spcount = 0; P10 = 0; P11 = 0; P12 = 0; P13 = 0; EA = 1; /允许 CPU 中断TMOD = 0 x11; / 设定时器 0 和 1
5、 为 16 位模式 1 ET0 = 1; /定时器 0 中断允许TH0 = 0 xFc; TL0 = 0 x18; /设定时每隔1ms 中断一次TR0 = 1; /开始计数stop_flag = 0; turn=0; speedlevel = 20; while(1) key = keyscan(); switch(key) case 0 x09: /按键 #,正转以 speedlevel = 1 的速度转1000*0.5MS=0.5S stop_flag=0; turn = 0; speedlevel =10; gorun(); delay(1000); break; case 0 x0c:
6、 /按键 *, 停止2000*0.5MS=0.5S stop_flag=1; break; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 17 页 - - - - - - - - - case 0 x0a: /按键 0, 反转以 speedlevel = 1 的速度转1000*0.5MS=0.5S stop_flag=0; turn=1; speedlevel =10; gorun(); delay(1000); break; case 0 x11: / 按键 9, 以
7、-speedlevel 的加速转 1000*0.5MS=0.5S stop_flag=0; if (speedlevel=1) speedlevel=1; else -speedlevel; gorun(); delay(1000); break; case 0 x12: / 按键 8,以 +speedlevel 的减速转1000*0.5MS=0.5S stop_flag=0; +speedlevel; gorun(); delay(1000); break; /定时器 0中断处理void timeint(void) interrupt 1 TH0=0 xFc; TL0=0 x18; / 设定
8、时每隔1ms 中断一次count+; spcount-; if(spcount=0) / 速度调整,SPEEDLEVEL越大, 延时越长(延时约为1MS*SPEEDLEVEL ) , / 频率越小,速度越慢spcount = speedlevel; gorun(); void delay(unsigned int endcount)/ 延时函数,延时为endcount*0.5 毫秒 count=0; do while(count7) step_index=0; else /反转step_index-; if (step_index0) step_index=7; 步进电机 (键盘控制可调速加显
9、示) #include #define uchar unsigned char static unsigned int count; /计数static int step_index; /步进索引数,值为07 static bit turn; /步进电机转动方向static bit stop_flag; /步进电机停止标志static int speedlevel; / 步进电机转速参数,数值越大速度越大,最小值为1,速度最慢static int spcount; /步进电机转速参数计数void ddelay(void); /键盘扫描延时函数void delay(unsigned int en
10、dcount); /延时函数,延时为endcount*1 毫秒名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 17 页 - - - - - - - - - void gorun(); /步进电机控制步进函数void Delay400Ms(void); void LCMInit(void); /LCM初始化void WriteCommandLCM(unsigned char WCLCM,BuysC); /BuysC为 0 时忽略忙检测void DisplayOneChar(
11、uchar X, uchar Y , uchar DData); void DisplayListChar(uchar X, uchar Y ,uchar ListLength, uchar *DData,uchar n); sbit P10=P30 ; /电机端口定义 sbit P11=P31 ; sbit P12=P32; sbit P13=P33 ; uchar code speed= 0 x3a,0 x39,0 x38,0 x37,0 x36,0 x35,0 x34,0 x33,0 x32,0 x31,0 x30; uchar code stop = stop; uchar code
12、go = go:; uchar code back = back:; uchar code max = max:8; void ddelay(void) uchar i; for (i=300;i0;i-); uchar keyscan(void) uchar scancode; uchar tmpcode; P1 = 0 xf8; / 发全 0 行扫描码 if (P1&0 xf8)!=0 xf8) / 若有键按下 ddelay(); / 延时去抖动 if (P1&0 xf8)!=0 xf8) / 延时后再判断一次,去除抖动影响 scancode = 0 xfe; while(scancode
13、&0 x08)!=0) / 逐行扫描 P1 = scancode; / 输出行扫描码 if (P1&0 xf8)!=0 xf8) / 本行有键按下 tmpcode = (P1&0 xf8)|0 x07; return(scancode)+(tmpcode); / 返回特征字节码,为1 的位即对应于行和列 else scancode = (scancode1)|0 x01; / 行扫描码左移一位 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 17 页 - - - - -
14、- - - - return(0); / 无键按下,返回值为0 void main(void) uchar key; count = 0; step_index = 0; spcount = 0; P10 = 0; P11 = 0; P12 = 0; P13 = 0; EA = 1; /允许 CPU 中断TMOD = 0 x11; / 设定时器 0 和 1 为 16 位模式 1 ET0 = 1; /定时器 0 中断允许TH0 = 0 xFc; TL0 = 0 x18; /设定时每隔1ms 中断一次TR0 = 1; /开始计数P0=0XFF; P3 &=0XEF; /573 片选LCMInit(
15、); /LCM初始化Delay400Ms(); stop_flag = 0; turn=0; speedlevel = 5; DisplayListChar(0,0,3,go,1); / 每次扫描键盘显示更新一次uchar code go DisplayOneChar(0,1,0 x35); / 每次扫描键盘显示更新一次while(1) key = keyscan(); switch(key) case 0 x09: /按键 #,正转以 speedlevel = 1 的速度转1000*0.5MS=0.5S stop_flag=0; turn = 0; speedlevel =5; gorun(
16、); WriteCommandLCM(0 x01,1);/显示清屏 , DisplayListChar(0,0,3,go,0); / 每次扫描键盘显示更新一次uchar code go DisplayOneChar(0,1,0 x35); / 每次扫描键盘显示更新一次 delay(1000); break; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 17 页 - - - - - - - - - case 0 x0c: /按键 *, 停止2000*0.5MS=0.5S
17、 stop_flag=1; WriteCommandLCM(0 x01,1);/显示清屏 , DisplayListChar(0,0,4,stop,0); / 每次扫描键盘显示更新一次 break; case 0 x0a: /按键 0, 反转以 speedlevel = 1 的速度转1000*0.5MS=0.5S stop_flag=0; turn=1; speedlevel =5; gorun(); WriteCommandLCM(0 x01,1);/显示清屏 , DisplayListChar(0,0,5,back,0); / 每次扫描键盘显示更新一次 DisplayOneChar(0,1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年步进电机程序 2022 步进 电机 程序
限制150内