ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:17.01KB ,
资源ID:12111056      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12111056.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(ARM课程设计步进电机键盘控制可调速.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

ARM课程设计步进电机键盘控制可调速.docx

1、ARM课程设计步进电机键盘控制可调速步进电机(键盘控制可调速)#include #define uchar unsigned charstatic unsigned int count; /计数static int step_index; /步进索引数,值为07static bit turn; /步进电机转动方向static bit stop_flag; /步进电机停止标志static int speedlevel; /步进电机转速参数,数值越大速度越大,最小值为1,速度最慢static int spcount; /步进电机转速参数计数void ddelay(void); /键盘扫描延时函数v

2、oid 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 = 0xf8; / 发全0行扫描码if (P1&0xf8)!=0xf8)/

3、若有键按下ddelay();/ 延时去抖动if (P1&0xf8)!=0xf8)/ 延时后再判断一次,去除抖动影响scancode = 0xfe;while(scancode&0x08)!=0)/ 逐行扫描P1 = scancode;/ 输出行扫描码if (P1&0xf8)!=0xf8)/ 本行有键按下tmpcode = (P1&0xf8)|0x07;return(scancode)+(tmpcode);/ 返回特征字节码,为1的位即对应于行和列 else scancode = (scancode1)|0x01;/ 行扫描码左移一位return(0);/ 无键按下,返回值为0 void mai

4、n(void) uchar key; count = 0; step_index = 0; spcount = 0;P10 = 0; P11 = 0; P12 = 0; P13 = 0;EA = 1; /允许CPU中断 TMOD = 0x11; /设定时器0和1为16位模式1 ET0 = 1; /定时器0中断允许TH0 = 0xFc; TL0 = 0x18; /设定时每隔1ms中断一次 TR0 = 1; /开始计数stop_flag = 0; turn=0;speedlevel = 20; while(1) key = keyscan(); switch(key) case 0x09: /按键

5、#, 正转以speedlevel = 1的速度转1000*0.5MS=0.5Sstop_flag=0; turn = 0; speedlevel =10; gorun(); delay(1000);break;case 0x0c: /按键*, 停止 2000*0.5MS=0.5S stop_flag=1;break; case 0x0a: /按键0, 反转以speedlevel = 1的速度转1000*0.5MS=0.5S stop_flag=0; turn=1; speedlevel =10;gorun(); delay(1000);break;case 0x11: / 按键9, 以-spe

6、edlevel的加速转1000*0.5MS=0.5Sstop_flag=0;if (speedlevel=1) speedlevel=1;else -speedlevel;gorun();delay(1000); break;case 0x12:/ 按键8, 以+speedlevel的减速转1000*0.5MS=0.5Sstop_flag=0; +speedlevel;gorun(); delay(1000); break; /定时器0中断处理 void timeint(void) interrupt 1 TH0=0xFc; TL0=0x18; /设定时每隔1ms中断一次count+; spc

7、ount-; 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; 步进电机(键盘控制可调速加显示)#include #define uchar uns

8、igned charstatic unsigned int count; /计数static int step_index; /步进索引数,值为07static bit turn; /步进电机转动方向static bit stop_flag; /步进电机停止标志static int speedlevel; /步进电机转速参数,数值越大速度越大,最小值为1,速度最慢static int spcount; /步进电机转速参数计数void ddelay(void); /键盘扫描延时函数void delay(unsigned int endcount); /延时函数,延时为endcount*1毫秒vo

9、id gorun(); /步进电机控制步进函数void Delay400Ms(void);void LCMInit(void); /LCM初始化void WriteCommandLCM(unsigned char WCLCM,BuysC); /BuysC为0时忽略忙检测void DisplayOneChar(uchar X, uchar Y, uchar DData);void DisplayListChar(uchar X, uchar Y,uchar ListLength, uchar *DData,uchar n);sbit P10=P30 ; /电机端口定义sbit P11=P31 ;

10、sbit P12=P32; sbit P13=P33 ;uchar code speed= 0x3a,0x39,0x38,0x37,0x36,0x35,0x34,0x33,0x32,0x31,0x30;uchar code stop = stop;uchar code 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 t

11、mpcode;P1 = 0xf8; / 发全0行扫描码if (P1&0xf8)!=0xf8)/ 若有键按下ddelay();/ 延时去抖动if (P1&0xf8)!=0xf8)/ 延时后再判断一次,去除抖动影响scancode = 0xfe;while(scancode&0x08)!=0)/ 逐行扫描P1 = scancode;/ 输出行扫描码if (P1&0xf8)!=0xf8)/ 本行有键按下tmpcode = (P1&0xf8)|0x07;return(scancode)+(tmpcode);/ 返回特征字节码,为1的位即对应于行和列 else scancode = (scancode1

12、)|0x01;/ 行扫描码左移一位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 = 0x11; /设定时器0和1为16位模式1 ET0 = 1; /定时器0中断允许TH0 = 0xFc; TL0 = 0x18; /设定时每隔1ms中断一次 TR0 = 1; /开始计数P0=0XFF; P3 &=0XEF; /573片选 LCMInit(); /LCM初

13、始化 Delay400Ms();stop_flag = 0; turn=0;speedlevel = 5;DisplayListChar(0,0,3,go,1); /每次扫描键盘显示更新一次uchar code goDisplayOneChar(0,1,0x35); /每次扫描键盘显示更新一次 while(1) key = keyscan(); switch(key) case 0x09: /按键#, 正转以speedlevel = 1的速度转1000*0.5MS=0.5Sstop_flag=0; turn = 0; speedlevel =5; gorun();WriteCommandLCM

14、(0x01,1);/显示清屏,DisplayListChar(0,0,3,go,0); /每次扫描键盘显示更新一次uchar code goDisplayOneChar(0,1,0x35); /每次扫描键盘显示更新一次 delay(1000);break;case 0x0c: /按键*, 停止 2000*0.5MS=0.5S stop_flag=1;WriteCommandLCM(0x01,1);/显示清屏,DisplayListChar(0,0,4,stop,0); /每次扫描键盘显示更新一次break; case 0x0a: /按键0, 反转以speedlevel = 1的速度转1000*

15、0.5MS=0.5S stop_flag=0; turn=1; speedlevel =5;gorun();WriteCommandLCM(0x01,1);/显示清屏,DisplayListChar(0,0,5,back,0); /每次扫描键盘显示更新一次DisplayOneChar(0,1,0x35); /每次扫描键盘显示更新一次 delay(1000);break;case 0x11: / 按键9, 以-speedlevel的加速转1000*0.5MS=0.5Sstop_flag=0;if (speedlevel=2) speedlevel=2;else speedlevel-;gorun

16、(); if(speedlevel=2) DisplayListChar(0,1,5,max,0);else DisplayOneChar(0,1, speedspeedlevel); /每次扫描键盘显示更新一次delay(1000); break;case 0x12:/ 按键8, 以+speedlevel的减速转1000*0.5MS=0.5Sstop_flag=0; speedlevel+;gorun();WriteCommandLCM(0x01,1);/显示清屏,if(turn=0)DisplayListChar(0,0,3,go,0); /每次扫描键盘显示更新一次uchar code g

17、oDisplayOneChar(0,1, speedspeedlevel); /每次扫描键盘显示更新一次else DisplayListChar(0,0,5,back,0); /每次扫描键盘显示更新一次 DisplayOneChar(0,1,speedspeedlevel); /每次扫描键盘显示更新一次 delay(1000); break; /定时器0中断处理 void timeint(void) interrupt 1 TH0=0xFc; TL0=0x18; /设定时每隔1ms中断一次count+; spcount-; if(spcount=0) /速度调整,SPEEDLEVEL越大,延时

18、越长(延时约为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; 步进电机(自动循环调速)#include sbit P00=P20 ;sbit P01=P21 ;sbit P02=P22; sbit P03=P23 ;static

19、unsigned int count; /计数static int step_index; /步进索引数,值为07static bit turn; /步进电机转动方向static bit stop_flag; /步进电机停止标志static int speedlevel; /步进电机转速参数,数值越大速度越快,最小值为1,速度最慢static int spcount; /步进电机转速参数计数void delay(unsigned int endcount); /延时函数,延时为endcount*0.5毫秒void gorun(); /步进电机控制步进函数void main(void) coun

20、t = 0; step_index = 0; spcount = 0; stop_flag = 0;P00 = 0; P01 = 0; P02 = 0; P03 = 0;EA = 1; /允许CPU中断 TMOD = 0x11; /设定时器0和1为16位模式1 ET0 = 1; /定时器0中断允许TH0 = 0xFE; TL0 = 0x0C; /设定时每隔0.5ms中断一次 TR0 = 1; /开始计数turn = 0; do speedlevel =4; delay(10000); /以speedlevel = 4的速度转2000*0.5MS=1Sspeedlevel =4; delay(10000); /以speedlevel = 4的速度转2000*0.5MS=1S stop_flag=1; delay(6000);/停止,2000*0.5MS=3S stop_flag=0; while(1);/定时器0中断处理 void timeint(void) interrupt 1 TH0=0xFE; TL0=0x0C; /设定时每隔0.5ms中断一次count+;spcount-; if(spcount=0) spcount = speedlevel; gorun(); void delay(unsigned int endcount) count=0; do

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1