转速显示Word格式.docx
- 文档编号:18740866
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:8
- 大小:16.47KB
转速显示Word格式.docx
《转速显示Word格式.docx》由会员分享,可在线阅读,更多相关《转速显示Word格式.docx(8页珍藏版)》请在冰豆网上搜索。
//步进电机停止标志
staticintspeedlevel;
//步进电机转速参数,数值越大速度越慢,最小值为1,速度最快
staticintspcount;
//步进电机转速参数计数
voiddelay(unsignedintendcount);
//延时函数,延时为endcount*0.5毫秒
voidgorun();
//步进电机控制步进函数
uchardatadate[4];
//date数组为存放地址原码,反码,数据原码,反码
chardataTest1[]="
"
;
#defineIR_REP3_2
voidDelayUs(unsignedcharus)//delayus
{
unsignedcharuscnt;
uscnt=us>
>
1;
/*Crystalfrequencyin12MHz*/
while(--uscnt);
}
/******************************************************************/
voidDelayMs(unsignedcharms)//delayMs
while(--ms)
{
DelayUs(250);
}
voidWriteCommand(unsignedcharc)//写指令
DelayMs(5);
//shortdelaybeforeoperation
E=0;
RS=0;
RW=0;
_nop_();
E=1;
Data=c;
/****************************************************************/
voidWriteData(unsignedcharc)
RS=1;
/***********单片机原创作品******************/
voidShowChar(unsignedcharpos,unsignedcharc)
unsignedcharp;
if(pos>
=0x10)
p=pos+0xb0;
//是第二行则命令代码高4位为0xc
else
p=pos+0x80;
//是第二行则命令代码高4位为0x8
WriteCommand(p);
//writecommand
WriteData(c);
//writedata
/*************************************************************************/
voidShowString(unsignedcharline,char*ptr)
unsignedcharl,i;
l=line<
<
4;
for(i=0;
i<
16;
i++)
ShowChar(l++,*(ptr+i));
//循环显示16个字符
/*********************************************************************/
voidInitLcd()//初始化LCD
DelayMs(15);
WriteCommand(0x38);
//displaymode
WriteCommand(0x06);
//显示光标移动位置
WriteCommand(0x0c);
//显示开及光标设置
WriteCommand(0x01);
//显示清屏
/*--------------------------延时1ms程子程序-----------------------*/
delay1000()
uinti,j;
for(i=0;
for(j=0;
j<
124;
j++);
/*---------------------------延时882us子程序-----------------------*/
delay882()
i++)
109;
/*--------------------------延时2400ms程子程序-----------------------*/
delay2400()
3;
for(j=0;
99;
voidIR_decode()//破译
uchari,j;
while(IR_RE==0);
delay2400();
if(IR_RE==1)//延时2.4ms后如果是高电平则是新码
//延时4.8ms避开4.5ms的高电平
8;
j++)
//等待地址码第1位高电平到来
delay882();
//延时882ms判断此时引脚电平
///CY=IR_RE;
if(IR_RE==0)
{
date[i]>
=1;
date[i]=date[i]&
0x7f;
elseif(IR_RE==1)
delay1000();
date[i]=date[i]|0x80;
}//1位数据接收结束
}//32位二进制码接收结束
}
if(date[2]==0x16)
TR0=0;
elseif(date[2]==0x14)
{TR0=1;
elseif(date[2]==0x10)
{if(speedlevel>
1)
speedlevel--;
else
speedlevel=1;
elseif(date[2]==0x1A)
{if(speedlevel<
5)
speedlevel++;
speedlevel=5;
elseif(date[2]==0x11)
turn=~turn;
voidint0()interrupt0using1
uinti;
if(IR_RE==1){k=~k;
}//刚开始为4.5ms的引导码,如果4ms内出现高电平则退出解码程序
if(k==0)
EX0=0;
//检测到有效信号关中断,防止干扰
IR_decode();
//如果接收到的是有效信号,则调用解码程序
//解码成功,调用显示程序,显示该键值
EX0=1;
//开外部中断,允许新的遥控按键
voidmain(void)
InitLcd();
sprintf(Test1,"
STEPMOTORSPEED"
);
//thefirstline
ShowString(0,Test1);
ShowChar(0x19,'
r'
ShowChar(0x1a,'
p'
ShowChar(0x1b,'
m'
count=0;
step_index=0;
spcount=0;
stop_flag=0;
P1_0=0;
P1_1=0;
P1_2=0;
P1_3=0;
SP=0x60;
EA=1;
//允许CPU中断
TMOD=0x11;
//设定时器0和1为16位模式1
ET0=1;
//定时器0中断允许
TH0=0xFE;
TL0=0x0C;
//设定时每隔0.5ms中断一次
TR0=1;
//开始计数
turn=0;
while
(1)
if(turn==0)
ShowChar(0x14,'
+'
-'
if(TR0==0)
ShowChar(0x15,'
0'
ShowChar(0x16,'
ShowChar(0x17,'
ShowChar(0x18,'
if(speedlevel==1)
3'
elseif(speedlevel==2)
1'
5'
elseif(speedlevel==3)
elseif(speedlevel==4)
7'
elseif(speedlevel==5)
6'
//定时器0中断处理
voidtimeint(void)interrupt1using0
TH0=0xFE;
TL0=0x0C;
count++;
spcount--;
if(spcount<
=0)
spcount=speedlevel;
gorun();
voiddelay(unsignedintendcount)
count=0;
do{}while(count<
endcount);
voidgorun()
if(stop_flag==1)
return;
switch(step_index)
case0:
//0
P1_0=1;
break;
case1:
//0、1
P1_1=1;
case2:
//1
case3:
//1、2
P1_2=1;
case4:
//2
case5:
//2、3
P1_3=1;
case6:
//3
case7:
//3、0
if(turn==0)
step_index++;
if(step_index>
7)
step_index=0;
step_index--;
if(step_index<
0)
step_index=7;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 转速 显示