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

上传人:b****1 文档编号:4832778 上传时间:2023-05-04 格式:DOCX 页数:17 大小:17.01KB
下载 相关 举报
ARM课程设计步进电机键盘控制可调速文档格式.docx_第1页
第1页 / 共17页
ARM课程设计步进电机键盘控制可调速文档格式.docx_第2页
第2页 / 共17页
ARM课程设计步进电机键盘控制可调速文档格式.docx_第3页
第3页 / 共17页
ARM课程设计步进电机键盘控制可调速文档格式.docx_第4页
第4页 / 共17页
ARM课程设计步进电机键盘控制可调速文档格式.docx_第5页
第5页 / 共17页
ARM课程设计步进电机键盘控制可调速文档格式.docx_第6页
第6页 / 共17页
ARM课程设计步进电机键盘控制可调速文档格式.docx_第7页
第7页 / 共17页
ARM课程设计步进电机键盘控制可调速文档格式.docx_第8页
第8页 / 共17页
ARM课程设计步进电机键盘控制可调速文档格式.docx_第9页
第9页 / 共17页
ARM课程设计步进电机键盘控制可调速文档格式.docx_第10页
第10页 / 共17页
ARM课程设计步进电机键盘控制可调速文档格式.docx_第11页
第11页 / 共17页
ARM课程设计步进电机键盘控制可调速文档格式.docx_第12页
第12页 / 共17页
ARM课程设计步进电机键盘控制可调速文档格式.docx_第13页
第13页 / 共17页
ARM课程设计步进电机键盘控制可调速文档格式.docx_第14页
第14页 / 共17页
ARM课程设计步进电机键盘控制可调速文档格式.docx_第15页
第15页 / 共17页
ARM课程设计步进电机键盘控制可调速文档格式.docx_第16页
第16页 / 共17页
ARM课程设计步进电机键盘控制可调速文档格式.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

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

《ARM课程设计步进电机键盘控制可调速文档格式.docx》由会员分享,可在线阅读,更多相关《ARM课程设计步进电机键盘控制可调速文档格式.docx(17页珍藏版)》请在冰点文库上搜索。

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

sbitP11=P2^1;

sbitP12=P2^2;

sbitP13=P2^3;

/*键消抖延时函数*/

voidddelay(void)

{

uchari;

for(i=300;

i>

0;

i--);

}

/*键扫描函数*/

ucharkeyscan(void)

ucharscancode;

uchartmpcode;

P1=0xf8;

 

//发全0行扫描码

if((P1&

0xf8)!

=0xf8) 

//若有键按下

ddelay();

//延时去抖动

//延时后再判断一次,去除抖动影响

scancode=0xfe;

while((scancode&

0x08)!

=0) 

//逐行扫描

P1=scancode;

//输出行扫描码

//本行有键按下

tmpcode=(P1&

0xf8)|0x07;

return((~scancode)+(~tmpcode));

//返回特征字节码,为1的位即对应于行和列

elsescancode=(scancode<

<

1)|0x01;

//行扫描码左移一位

return(0);

//无键按下,返回值为0 

voidmain(void)

{

ucharkey;

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)

{

case0x09:

//按键#,正转以speedlevel=1的速度转1000*0.5MS=0.5S

stop_flag=0;

turn=0;

speedlevel=10;

gorun();

delay(1000);

break;

case0x0c:

//按键*,停止2000*0.5MS=0.5S

stop_flag=1;

case0x0a:

//按键0,反转以speedlevel=1的速度转1000*0.5MS=0.5S

turn=1;

gorun();

delay(1000);

case0x11:

//按键9,以--speedlevel的加速转1000*0.5MS=0.5S

if(speedlevel==1)

{speedlevel=1;

else{--speedlevel;

case0x12:

//按键8,以++speedlevel的减速转1000*0.5MS=0.5S

++speedlevel;

}

//定时器0中断处理

voidtimeint(void)interrupt1

TH0=0xFc;

TL0=0x18;

count++;

spcount--;

if(spcount<

=0)//速度调整,SPEEDLEVEL越大,延时越长(延时约为1MS*SPEEDLEVEL),

// 

频率越小,速度越慢

spcount=speedlevel;

voiddelay(unsignedintendcount)//延时函数,延时为endcount*0.5毫秒

count=0;

do{}

while(count<

endcount);

voidgorun()

if(stop_flag==1)

{

P10=0;

return;

switch(step_index)

case0:

//0

P10=1;

break;

case1:

//0、1

P11=1;

case2:

//1

case3:

//1、2

P12=1;

case4:

//2

case5:

//2、3

P13=1;

case6:

//3

case7:

//3、0

if(turn==0) 

//正转

step_index++;

if(step_index>

7)

step_index=0;

else

//反转

step_index--;

if(step_index<

0)

step_index=7;

步进电机(键盘控制可调速加显示)

voidDelay400Ms(void);

voidLCMInit(void);

//LCM初始化

voidWriteCommandLCM(unsignedcharWCLCM,BuysC);

//BuysC为0时忽略忙检测

voidDisplayOneChar(ucharX,ucharY,ucharDData);

voidDisplayListChar(ucharX,ucharY,ucharListLength,uchar 

*DData,ucharn);

sbitP10=P3^0;

sbitP11=P3^1;

sbitP12=P3^2;

sbitP13=P3^3;

ucharcodespeed[]={0x3a,0x39,0x38,0x37,0x36,0x35,0x34,0x33,0x32,0x31,0x30};

ucharcodestop[]={"

stop"

};

ucharcodego[]={"

go:

"

ucharcodeback[]={"

back:

ucharcodemax[]={"

max:

8"

P0=0XFF;

P3&

=0XEF;

//573片选

LCMInit();

Delay400Ms();

speedlevel=5;

DisplayListChar(0,0,3,go,1);

//每次扫描键盘显示更新一次ucharcodego[]

DisplayOneChar(0,1,0x35);

//每次扫描键盘显示更新一次

speedlevel=5;

WriteCommandLCM(0x01,1);

//显示清屏,

DisplayListChar(0,0,3,go,0);

DisplayListChar(0,0,4,stop,0);

DisplayListChar(0,0,5,back,0);

if(speedlevel==2)

{speedlevel=2;

else{speedlevel--;

if(speedlevel==2)

{DisplayListChar(0,1,5,max,0);

else{DisplayOneChar(0,1,speed[speedlevel]);

}//每次扫描键盘显示更新一次

speedlevel++;

if(turn==0)

{DisplayListChar(0,0,3,go,0);

DisplayOneChar(0,1,speed[speedlevel]);

else{DisplayListChar(0,0,5,back,0);

DisplayOneChar(0,1,speed[speedlevel]);

步进电机(自动循环调速)

sbitP00=P2^0;

sbitP01=P2^1;

sbitP02=P2^2;

sbitP03=P2^3;

//步进电机转速参数,数值越大速度越快,最小值为1,速度最慢

//延时函数,延时为endcount*0.5毫秒

stop_flag=0;

P00=0;

P01=0;

P02=0;

P03=0;

TH0=0xFE;

TL0=0x0C;

//设定时每隔0.5ms中断一次

turn=0;

do{

speedlevel=4;

delay(10000);

//以speedlevel=4的速度转2000*0.5MS=1S

speedlevel=4;

delay(6000);

//停止,2000*0.5MS=3S

stop_flag=0;

}while

(1);

TH0=0xFE;

TL0=0x0C;

spcount--;

=0)

voiddelay(unsignedintendcount)

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2