控制步进电机LCD显示_第1页
控制步进电机LCD显示_第2页
控制步进电机LCD显示_第3页
控制步进电机LCD显示_第4页
控制步进电机LCD显示_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2011 - 2012 学年 第 1 学期学生课程实习报告 环节名称计算机控制技术课程实习所属课程计算机控制技术学生姓名冼燎刚学号200811631128所在班级电气1081成绩评语指导教师签名一、 设计题目: 控制步进电机LCD显示二、 设计要求: 设计一个单片机三相步进电机控制系统,要求系统具有以下功能。(1)用K0-K2作为通电方式选择键,K0为单三拍,K1为双三拍,K2为三相六拍。(2)K3-K4作为启动和方向控制。(3)正转时红色指示灯亮,反转时黄色指示灯亮,不转时绿灯亮。(4)可通过键盘设定步进电机步数给定值。(5)用三位LED数码管显示剩余工作步数三、 系统总体框图与原理说明 系

2、统的整体框图四、 硬件电路图 五、 程序流程图开始键盘读取步数键盘读取正反转键盘读取工作方式键盘读取是否按下 ENTER液晶显示数字液晶显示数字液晶显示数字相应的灯发光步进电机转动一拍总步数减一并显示总步数是否为0显示OVERYN结束六、 仿真说明 输入一个三位数 按下DIRECTION 选择方向 相应的灯会亮 选择不同的工作方式 按下START按钮,倒数开始,电机按剩余步数转动。 倒数完毕,显示OVER,绿灯亮。七、 心得体会通过自己几天的辛勤努力并查阅诸多资料,终于完成了本次课程设计。从系统框图到程序,自己逐一完成。程序虽然很长,但通过分成不同的H文件,有序地把它们分割成几部分。不仅对于自

3、己,还对查看程序的人有不少的帮助。设计的思路按照对于仿真的步骤编程。从按下第一个按键开始,就已经进入到设计者的程序当中。程序有较强的逻辑性,这些都依赖于平时的练习及老师的教导。 附录:程序清单 /*程序的总体文件*/#include<reg51.h> #include<led_show.h> #include<keyscan.h> #include<keycount.h> void initial(); un i,motor_step=0,time_control=0;uc keyscan();uc loop124=0x01,0x02,0x04,

4、0x08,0x08,0x04,0x02,0x01; /A B C Duc loop224=0x03,0x06,0x0C,0x09,0x09,0x0C,0x06,0x03; /AB BC CD DAuc loop328=0x01,0x03,0x02,0x06,0x04,0x0C,0x08,0x0A,0x0A,0x08,0x0C,0x04,0x06,0x02,0x03,0x01; /A AB B BC C CD D DA void initial_show(); /函数申明void clr(); void wirte_com(uc com);void wirte_data(uc date);voi

5、d delay(unsigned int z);void input_keycode() ;void output_key();void count(); void swith();void test(); void main()/主函数initial();/初始化 initial_show();clr();while(1) input_keycode(); output_key(); TMOD=0x01; /fangshi yi TL1=0xB0; TH1=0x3C; ET0=1; /yun xu TO zhongduanTR0=1; EA=1;while(1);/*中断服务函数*/void

6、 T0_time() interrupt 1/ 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(table6i); void count()t=a/100;f=a%100/10;g=a%10;wirte_com(0xC0+10); /rewrite stepwirte_data(tablet);wirte_data(tablef);

7、wirte_data(tableg);void swith() switch(motor1) case 0: if(motor_step<4) P3=loop1fanzhuanmotor_step ; else motor_step=0; P3=loop1fanzhuanmotor_step ; motor_step+; break; case 1: if(motor_step<4) P3=loop2fanzhuanmotor_step ; else motor_step=0; P3=loop2fanzhuanmotor_step ; motor_step+; break; cas

8、e 2: if(motor_step<8) P3=loop3fanzhuanmotor_step ; else motor_step=0; P3=loop3fanzhuanmotor_step ; motor_step+; break; count(); time_control=0; a-; /zong bu shu/*键盘扫描电路*/uc temp,ge,shi,bb,num;uc keyscan()/键盘扫描子程序 while(1)P1=0xfe; temp=P1;temp=temp&0xf0;if(temp!=0xf0)delay(10); temp=P1; /重新赋值b

9、b=P1;/保留值 temp=temp&0xf0;/去抖动 if(temp!=0xf0)temp=P1;switch(temp) case 0xee:num=0;break;case 0xde:num=1;break;case 0xbe:num=2;break;case 0x7e: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

10、&0xf0; if(temp!=0xf0)temp=P1;switch(temp) case 0xed:num=4;break;case 0xdd:num=5;break;case 0xbd:num=6;break;case 0x7d: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=

11、P1;switch(temp) case 0xeb:num=8;break;case 0xdb:num=9;break;case 0xbb:num=10;break;case 0x7b: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) case 0xe7:nu

12、m=12;break;case 0xd7:num=13;break;case 0xb7:num=14;break;case 0x77:num=15;break;default:break;while(P1=bb);delay(10);while(P1=bb); if(num!=99) return(num);/*LCD显示电路*/#define uc unsigned char #define un unsigned int unsigned int i; sbit rs=P20;/位申明sbit rw=P21;sbit e=P22; uc code table2="designed

13、 by xlg" uc code table3="setting:"uc code table4="remaining:"uc code table5=" "uc code table6="over:"void wirte_com(uc com);void wirte_data(uc date);void delay(un z); void initial() /初始化子函数rs=1;rw=1;e=1; wirte_com(0x01);/显示清零 delay(10); wirte_com(0x38); /

14、16*2显示 ;5*7点阵;八位数据接口 delay(10); wirte_com(0x0f); / 1 开显示,有光标 光标闪手 (1 1 1) delay(10); wirte_com(0x06);/000001NS (N=1时右移) (S=0时整屏不移动) delay(10); wirte_com(0x80);/初始化指针 delay(10);void initial_show() for(i=0;i<16;i+)wirte_data(table2i);delay(100);wirte_com(0x01);wirte_com(0x80); for(i=0;i<8;i+)wir

15、te_data(table3i);wirte_com(0xC0);for(i=0;i<10;i+)wirte_data(table4i); void clr() wirte_com(0x80+10); for(i=0;i<3;i+)wirte_data(table5i); wirte_com(0x80+10);void wirte_com(uc com) /液晶写指令P0=com;rs=0;rw=0;e=0; /上升沿 delay(10); e=1;void wirte_data(uc date)/液晶写数据P0=date;rs=1;rw=0;e=0; /上升沿delay(100)

16、;e=1;void delay(un z)/延时子程序un x,y;for(x=z;x>0;x-)for(y=110;y>0;y-);/*键盘电路读取*/sbit start=P23 ; sbit red=P24 ; sbit green=P25 ; sbit yellow=P26 ; un a,b,c,d,t,f,g,fanzhuan=1,motor1=0,output_type;uc code table="0123456789ABCDEF" /定义表格 void input_keycode() num=99; keyscan(); while (table

17、num!='A') while (tablenum>='0'&&tablenum<='9' ) wirte_com(0x80+10);t=tablenum;wirte_data(t); /bai位数 abc tfga=tablenum-48;num=99; /shi位数keyscan();b=tablenum-48;a=a*10+b; f=tablenum ;wirte_data(f); num=99; /ge位数 输入的数据存在Akeyscan();c=tablenum-48;a=a*10+c; g=tablenum

18、 ;wirte_data(g); wirte_com(0x0c); wirte_com(0x80+10); num=99; keyscan(); while (tablenum='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 (tablenum='D'|tablenum='E'|tablenum='F') switch(tablenum) case 'D': motor1=0; wirte_com(0xC0+15); wirte_data('1'); /类型 a/bwirte_com(0xC0+15);break; case 'E': motor1=1; wirte_com(0xC0+15); wirte_data('2'); /类型 a/bwirte_co

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论