- #include<reg51.h>
- int n,m,k,temp;
- sbit run=P2^7;
- sbit stop=P2^3;
- sbit Frun=P2^6;
- sbit up=P2^5;
- sbit down=P2^4; //定义操作按键 开始 停止 反转 不同速度的控制口
- sbit X=P1^0;
- sbit Y=P1^1;
- sbit Z=P1^2;
- sbit W=P1^3; //定义电机控制口
- sbit LSA=P1^5;
- sbit LSB=P1^6;
- sbit LSC=P1^7; //定义数码管显示口
- void delay(int i) //家中常备 延时函数
- {
- while(i--);
- }
- void show(unsigned int k) //动态数码管显示程序
- { int d[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- char i;
- int b[8];
- b[0]=0;
- b[1]=0;
- b[2]=0;
- b[3]=(k/10000)%10;
- b[4]=(k/1000)%10;
- b[5]=(k/100)%10;
- b[6]=(k/10)%10;
- b[7]=k%10;
- for(i=0;i<8;i++)
- {
- switch(i)
- {
- case(0):LSA=0;LSB=0;LSC=0; break;
- case(1):LSA=1;LSB=0;LSC=0; break;
- case(2):LSA=0;LSB=1;LSC=0; break;
- case(3):LSA=1;LSB=1;LSC=0; break;
- case(4):LSA=0;LSB=0;LSC=1; break;
- case(5):LSA=1;LSB=0;LSC=1; break;
- case(6):LSA=0;LSB=1;LSC=1; break;
- case(7):LSA=1;LSB=1;LSC=1; break;
- }
- if(i==0&&temp==1)P0=0x71;
- if(i==5)P0=d[b[i]]|0x80;
- if(i>0)P0=d[b[i]];//发送段码
- delay(100); //间隔一段时间扫描
- P0=0x00;//消隐
- }
-
-
- }
- void Zturn() //正转程序
- {
- X=0;Y=0;Z=1;W=0;n=0; //状态
- while(n/m==0); //延时
- X=1;Y=0;Z=0;W=0;n=0;
- while(n/m==0);
- X=0;Y=0;Z=0;W=1;n=0;
- while(n/m==0);
- X=0;Y=1;Z=0;W=0;n=0;
- while(n/m==0);
-
- }
- void Fturn() //反转程序
- {
- X=0;Y=1;Z=0;W=0;n=0;
- while(n/m==0);
- X=0;Y=0;Z=0;W=1;n=0;
- while(n/m==0);
- X=1;Y=0;Z=0;W=0;n=0;
- while(n/m==0);
- X=0;Y=0;Z=1;W=0;n=0;
- while(n/m==0);
- }
- void time1_ISR()interrupt 1
- {
- show(k); //调用数码管显示函数
- TH0=0XD8;TL0=0XF0;
- }
- void time0_ISR()interrupt 3
- {
-
- n++; //每一毫秒自加一次
- TH1=0XFC;TL1=0X18; //定时器复位
-
- }
- void main()
- {
- TMOD=0x11;TH1=0XFC;TL1=0X18;TR1=1;
- TH0=0XD8;TL0=0XF0;TR0=1; //使用定时器1和定时器0
- ET1=1;ET0=1;EA=1; //打开定时器1的中断
- P2=0XFF;
- while(1)
- {
- if(run==0)
- { m=50;temp=0;
- while(stop&Frun)
- {
-
- if(up==0){m=m-1;if(m<6){m=6;}}
- if(down==0){m=m+1;if(m>1000){m=1000;}}
- k=6000000/80/m;
- Zturn();
- }
- }
- if(Frun==0)
- { m=50;temp=1;
- while(run&stop)
- {
-
- if(up==0){m=m-1;if(m<6){m=6;}}
- if(down==0){m=m+1;if(m>1000){m=1000;}}
- k=6000000/80/m;
- Fturn();
- }
- }
- if(stop==0){k=0;temp=0;}
- }
- }
复制代码 |