控制步进电机LCD显示.docx

上传人:b****5 文档编号:11660648 上传时间:2023-03-29 格式:DOCX 页数:19 大小:140.98KB
下载 相关 举报
控制步进电机LCD显示.docx_第1页
第1页 / 共19页
控制步进电机LCD显示.docx_第2页
第2页 / 共19页
控制步进电机LCD显示.docx_第3页
第3页 / 共19页
控制步进电机LCD显示.docx_第4页
第4页 / 共19页
控制步进电机LCD显示.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

控制步进电机LCD显示.docx

《控制步进电机LCD显示.docx》由会员分享,可在线阅读,更多相关《控制步进电机LCD显示.docx(19页珍藏版)》请在冰豆网上搜索。

控制步进电机LCD显示.docx

控制步进电机LCD显示

2011-2012学年第1学期

 

学生课程实习报告

 

环节名称

计算机控制技术课程实习

所属课程

计算机控制技术

学生姓名

冼燎刚

学号

200811631128

所在班级

电气1081

成绩

评语

指导教师签名

 

一、设计题目:

控制步进电机LCD显示

二、设计要求:

设计一个单片机三相步进电机控制系统,要求系统具有以下功能。

(1)用K0-K2作为通电方式选择键,K0为单三拍,K1为双三拍,K2为三相六拍。

(2)K3-K4作为启动和方向控制。

(3)正转时红色指示灯亮,反转时黄色指示灯亮,不转时绿灯亮。

(4)可通过键盘设定步进电机步数给定值。

(5)用三位LED数码管显示剩余工作步数

三、系统总体框图与原理说明

系统的整体框图

四、硬件电路图

五、程序流程图

 

六、仿真说明

输入一个三位数

按下DIRECTION选择方向相应的灯会亮

选择不同的工作方式

按下START按钮,倒数开始,电机按剩余步数转动。

倒数完毕,显示OVER,绿灯亮。

七、心得体会

通过自己几天的辛勤努力并查阅诸多资料,终于完成了本次课程设计。

从系统框图到程序,自己逐一完成。

程序虽然很长,但通过分成不同的H文件,有序地把它们分割成几部分。

不仅对于自己,还对查看程序的人有不少的帮助。

设计的思路按照对于仿真的步骤编程。

从按下第一个按键开始,就已经进入到设计者的程序当中。

程序有较强的逻辑性,这些都依赖于平时的练习及老师的教导。

附录:

程序清单

//***************************程序的总体文件*************************//

#include

#include

#include

#include

voidinitial();

uni,motor_step=0,time_control=0;

uckeyscan();

ucloop1[2][4]={{0x01,0x02,0x04,0x08},{0x08,0x04,0x02,0x01}};//ABCD

ucloop2[2][4]={{0x03,0x06,0x0C,0x09},{0x09,0x0C,0x06,0x03}};//ABBCCDDA

ucloop3[2][8]={{0x01,0x03,0x02,0x06,0x04,0x0C,0x08,0x0A},{0x0A,0x08,0x0C,0x04,0x06,0x02,0x03,0x01}};//AABBBCCCDDDA

voidinitial_show();//函数申明

voidclr();

voidwirte_com(uccom);

voidwirte_data(ucdate);

voiddelay(unsignedintz);

voidinput_keycode();

voidoutput_key();

voidcount();

voidswith();

voidtest();

voidmain()//主函数

{

initial();//初始化

initial_show();

clr();

while

(1)

{

input_keycode();

output_key();

TMOD=0x01;//fangshiyi

TL1=0xB0;

TH1=0x3C;

ET0=1;//yunxuTOzhongduan

TR0=1;

EA=1;

while

(1);

}

}

/*************中断服务函数***********/

voidT0_time()interrupt1//

{TL1=0xB0;

TH1=0x3C;

time_control++;

if(a>0)

{

if(time_control==2)

{

swith();}

}

else

{red=1;green=0;yellow=1;

wirte_com(0xc0+10);

for(i=0;i<4;i++)//over

{

wirte_data(table6[i]);

}

}

}

voidcount()

{

t=a/100;

f=a%100/10;

g=a%10;

wirte_com(0xC0+10);//rewritestep

wirte_data(table[t]);

wirte_data(table[f]);

wirte_data(table[g]);

}

voidswith()

{

switch(motor1)

{

case0:

{

if(motor_step<4)

{

P3=loop1[fanzhuan][motor_step];

}

else

{

motor_step=0;

P3=loop1[fanzhuan][motor_step];

}

motor_step++;

break;

}

case1:

{

if(motor_step<4)

{

P3=loop2[fanzhuan][motor_step];

}

else

{

motor_step=0;

P3=loop2[fanzhuan][motor_step];

}

motor_step++;

break;

}

case2:

{

if(motor_step<8)

{

P3=loop3[fanzhuan][motor_step];

}

else

{

motor_step=0;

P3=loop3[fanzhuan][motor_step];

}

motor_step++;

break;

}

}

count();

time_control=0;

a--;//zongbushu

}

///*************************键盘扫描电路********************************//

uctemp,ge,shi,bb,num;

uckeyscan()//键盘扫描子程序

{

while

(1)

{

P1=0xfe;

temp=P1;

temp=temp&0xf0;

if(temp!

=0xf0)

{

delay(10);

temp=P1;//重新赋值

bb=P1;//保留值

temp=temp&0xf0;//去抖动

if(temp!

=0xf0)

{

temp=P1;

switch(temp)

{

case0xee:

num=0;break;

case0xde:

num=1;break;

case0xbe:

num=2;break;

case0x7e:

num=3;break;

default:

break;

}

while(P1==bb);//等待放手

delay(10);

while(P1==bb);

}

}

P1=0xfd;

temp=P1;

bb=P1;

temp=temp&0xf0;

if(temp!

=0xf0)

{

delay(10);

temp=P1;

temp=temp&0xf0;

if(temp!

=0xf0)

{

temp=P1;

switch(temp)

{

case0xed:

num=4;break;

case0xdd:

num=5;break;

case0xbd:

num=6;break;

case0x7d:

num=7;break;

default:

break;

}

while(P1==bb);

delay(10);

while(P1==bb);

}

}

P1=0xfb;

temp=P1;

bb=P1;

temp=temp&0xf0;

if(temp!

=0xf0)

{

delay(10);

temp=P1;

temp=temp&0xf0;

if(temp!

=0xf0)

{

temp=P1;

switch(temp)

{

case0xeb:

num=8;break;

case0xdb:

num=9;break;

case0xbb:

num=10;break;

case0x7b:

num=11;break;

default:

break;

}

while(P1==bb);

delay(10);

while(P1==bb);

}

}

P1=0xf7;

temp=P1;

bb=P1;

temp=temp&0xf0;

if(temp!

=0xf0)

{

delay(10);

temp=P1;

temp=temp&0xf0;

if(temp!

=0xf0)

{

temp=P1;

switch(temp)

{

case0xe7:

num=12;break;

case0xd7:

num=13;break;

case0xb7:

num=14;break;

case0x77:

num=15;break;

default:

break;

}

while(P1==bb);

delay(10);

while(P1==bb);

}

}

if(num!

=99)return(num);

}

}

//********************LCD显示电路*****************************//

#defineucunsignedchar

#defineununsignedint

unsignedinti;

sbitrs=P2^0;//位申明

sbitrw=P2^1;

sbite=P2^2;

uccodetable2[]="designedbyxlg";

uccodetable3[]="setting:

";

uccodetable4[]="remaining:

";

uccodetable5[]="";

uccodetable6[]="over:

";

voidwirte_com(uccom);

voidwirte_data(ucdate);

voiddelay(unz);

voidinitial()//初始化子函数

{

rs=1;

rw=1;

e=1;

wirte_com(0x01);//显示清零

delay(10);

wirte_com(0x38);//16*2显示;5*7点阵;八位数据接口

delay(10);

wirte_com(0x0f);//1开显示,有光标光标闪手(111)

delay(10);

wirte_com(0x06);//000001NS(N=1时右移)(S=0时整屏不移动)

delay(10);

wirte_com(0x80);//初始化指针

delay(10);

}

voidinitial_show()

{

for(i=0;i<16;i++)

{

wirte_data(table2[i]);

}

delay(100);

wirte_com(0x01);

wirte_com(0x80);

for(i=0;i<8;i++)

{

wirte_data(table3[i]);

}

wirte_com(0xC0);

for(i=0;i<10;i++)

{

wirte_data(table4[i]);

}

}

voidclr()

{

wirte_com(0x80+10);

for(i=0;i<3;i++)

{

wirte_data(table5[i]);

}

wirte_com(0x80+10);

}

voidwirte_com(uccom)//液晶写指令

{

P0=com;

rs=0;

rw=0;

e=0;//上升沿

delay(10);

e=1;

}

voidwirte_data(ucdate)//液晶写数据

{

P0=date;

rs=1;

rw=0;

e=0;//上升沿

delay(100);

e=1;

}

voiddelay(unz)//延时子程序

{

unx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

//**********************键盘电路读取**********************************//

sbitstart=P2^3;

sbitred=P2^4;

sbitgreen=P2^5;

sbityellow=P2^6;

una,b,c,d,t,f,g,fanzhuan=1,motor1=0,output_type;

uccodetable[]="0123456789ABCDEF";//定义表格

voidinput_keycode()

{

num=99;

keyscan();

while(table[num]!

='A')

{

while(table[num]>='0'&&table[num]<='9')

{

wirte_com(0x80+10);

t=table[num];

wirte_data(t);//bai位数abctfg

a=table[num]-48;

num=99;//shi位数

keyscan();

b=table[num]-48;

a=a*10+b;

f=table[num];

wirte_data(f);

num=99;//ge位数输入的数据存在A

keyscan();

c=table[num]-48;

a=a*10+c;

g=table[num];

wirte_data(g);

wirte_com(0x0c);

wirte_com(0x80+10);

num=99;

keyscan();

}

while(table[num]=='C')

{

wirte_com(0x80+15);

if(fanzhuan==1)

{

fanzhuan=0;

wirte_data('a');

red=0;green=1;yellow=1;

}

else

{

fanzhuan=1;

wirte_data('b');

red=1;green=1;yellow=0;

}

wirte_com(0x80+15);

num=99;

keyscan();}

while(table[num]=='D'||table[num]=='E'||table[num]=='F')

{

switch(table[num])

{

case'D':

{

motor1=0;

wirte_com(0xC0+15);

wirte_data('1');//类型a/b

wirte_com(0xC0+15);

break;

}

case'E':

{motor1=1;

wirte_com(0xC0+15);

wirte_data('2');//类型a/b

wirte_com(0xC0+15);

break;}

case'F':

{motor1=2;

wirte_com(0xC0+15);

wirte_data('3');//类型a/b

wirte_com(0xC0+15);

break;}

}

num=99;

keyscan();

}

if(table[num]=='B')

{clr();

num=99;

keyscan();

}

}

}

voidoutput_key()

{wirte_com(0xC0+10);

wirte_data(t);

wirte_data(f);

wirte_data(g);

wirte_com(0xC0+10);

}

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

当前位置:首页 > 求职职场 > 简历

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

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