#define uchar unsigned char #define uint unsigned int
uint temp=4,flag=0; int k=100,m=0;
void delay(uint z) {
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--); }
sbit P2_5=P2^5; sbit P2_6=P2^6; sbit P2_7=P2^7;
uchar check_key1() {
uchar n;
P2=0xff; n=P2;
if(n!=0xdf)
return 1; else
return 0; }
uchar check_key2() {
uchar n;
P2=0xff; n=P2;
if(n!=0xbf)
return 1; else
return 0; }
uchar check_key() {
uchar n;
P2=0xff;
n=P2;
if(n!=0x7f)
return 1; else
return 0; }
void timer0() interrupt 1 {
switch(P2) {
case 0xde:
if(check_key1()==1) {
delay(5);
if(check_key1()==1) {temp=0; P1=0xf0;} }
break;
case 0xdd:
if(check_key1()==1) {
delay(5);
if(check_key1()==1) {temp=1; P1=0xf0;} }
break;
case 0xbb:
if(check_key2()==1) {
delay(5);
if(check_key2()==1) temp=2; }
while(check_key2()); break;
case 0xb7:
if(check_key2()==1) {
delay(5);
if(check_key2()==1) temp=3; }
while(check_key2()); break;
case 0x6f:
if(check_key()==1) {
delay(5);
if(check_key()==1) {
flag++; if(flag>=2) flag=0; } }
while(check_key()); break; } }
void sudu0() {
if(temp==2) {
k+=200;
if(k>=1000) k=1000; temp=0; }
if(temp==3) {
k-=200; if(k<=0) k=100; temp=0; } }
void sudu1() { if(temp==2) {
k+=200; if(k>=1000) k=1000; temp=1; }
if(temp==3) {
k-=200; if(k<=0) k=100; temp=1; } }
sbit P1_0=P1^0; sbit P1_1=P1^1; sbit P1_2=P1^2; sbit P1_3=P1^3;
void main(void) {
TMOD=0x01; EA=1; ET0=1; TR0=1; P1_0=0; P1_1=0; P1_2=0; P1_3=0; while(1) {
for(m=1;m<=8;m++) {
if(flag==0) {
if(temp==0) {
switch(m) {
case 1: P1_0=1; delay(k);
break;
case 2: P1_3=0; delay(k); break;
case 3: P1_1=1; delay(k); break;
case 4: P1_0=0; delay(k); break;
case 5: P1_2=1; delay(k); break;
case 6: P1_1=0; delay(k); break;
case 7: P1_3=1; delay(k); break;
case 8: P1_2=0; delay(k); break; }
sudu0(); if(flag==1) P1=0xe0; }
if(P1==0xe0) break;
if(temp==1) {
switch(m) {
case 1: P1_3=1; delay(k); break;
case 2: P1_0=0; delay(k); break;
case 3: P1_2=1; delay(k); break;
case 4: P1_3=0; delay(k); break;
case 5: P1_1=1; delay(k); break;
case 6: P1_2=0; delay(k); break;
case 7: P1_0=1; delay(k); break;
case 8: P1_1=0; delay(k); break;
}
sudu1(); if(flag==1) P1=0xe0; }
if(P1==0xe0) break; }
if(flag==0) P1=0xd0; }
if(P1==0xd0) break;
if(temp==1) {
if(flag==1) {
if(temp==0) {
switch(m) {
case 1: P1_3=0;
P1_0=1; P1_1=1; delay(k); break;
case 2: P1_0=0; P1_1=1; P1_2=1; delay(k); break; case 3: P1_1=0; P1_2=1; P1_3=1; delay(k);
break;
case 4: P1_2=0; P1_3=1; P1_0=1; delay(k); break; }
sudu0();
switch(m) {
case 1: P1_0=0; P1_3=1; P1_2=1; delay(k); break; case 2: P1_3=0; P1_2=1; P1_1=1; delay(k); break; case 3: P1_2=0; P1_1=1; P1_0=1; delay(k);
break;
case 4: P1_1=0; P1_0=1; P1_3=1; delay(k); break; }
sudu1(); if(flag==0) P1=0xd0; }
if(P1==0xd0)
break; } } } }
五、新的体会
因为微机课和单片机课没怎么学好,故感觉在做这个设计时有点困难,比如汇编程序。后来决定用c来编写程序,这样稍微轻松点,在设计程序中涉及到了中断程序的编写,发现已学的理论知识完全用不上来,也许这就是理论脱离时间的结果,在期间恶补了单片机的中断知识及其相应的程序编写。
通过这次课程设计实验,我对步进电机调速控制系统有了实际的了解和认识,提高了动手能力。本次实验把书本上、课堂上学到的知识灵活地运用到实际的实物上,感觉是对学以致用的一种锻炼和考验
提高了用所学知识解决实际问题的
能力,加深和巩固的对知识的理解和掌握。控制电路、驱动电路、测速反馈电路、步进电机几个模块的整合,也实际中提高了自己对系统的认识,有了些整体的概念和思维观。实验是团队合作完成的,从设计电路到设计软件,然后仿真到做硬件做出符合要求的控制系统,不仅从实际中锻炼了动手能力而且学会了团队合作,互相学习,提高自己。
这次的课程设计总的感觉就是很累,但在不断的学习机实践当中学到了很多东西,知识的提高那是最基础的,中断,电路工作及相关的知识都是得到了提升;然后就是个人处理问题能力的提高,虽然说这次的设计不算一个大的项目,但也算是小的雏形,课题的选择,前期的准备,理论的实践,知识的提高,处理实际问题及后期的总结归纳。 付出去收获往往是成正比的,这次的课程设计中得到了充分的体现。
总的来说,这次设计的步进电机控制电路还是比较成功的
在设计中遇到了
很多问题,最后在自己的思考下,宿舍大家一起经过激烈的探讨下,终于游逆而解,有点小小的成就感,终于觉得平时所学的知识有了实用的价值,达到了理论与实际相结合的目的。不仅学到了不少知识,而且锻炼了自己的能力,使自己对以后的路有了更加清楚的认识。同时,对未来有了更多的信心。最后,对文老师表示忠心的感谢,老师,你辛苦了。