实物调试
游客,本帖隐藏的内容需要积分高于 1 才可浏览,您当前积分为 0
程序
- #include<reg52.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit SCL=P0^2;
- sbit SDA=P0^3;
- //xainshi
- unsigned char z; //运行的电机
- unsigned char x; //正反
- unsigned char c; //数字加
- uchar code FFW1[8]={0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x90}; //四相八拍正转编码 前四
- uchar code FFW[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //四相八拍正转编码 后四
- uchar code REV1[8]={0x90,0x80,0xc0,0x40,0x60,0x20,0x30,0x10}; ////四相八拍反转编码 前四
- uchar code REV[8]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01}; ////四相八拍反转编码 后死
- sbit BEEP = P0^7; //蜂鸣器
- sbit K1 = P0^4; //cwshi
- sbit K111 = P1^0; //
- sbit K112 = P1^1; //
- sbit K121 = P1^2; //
- sbit K122 = P1^3; //
- sbit K131 = P1^4; //
- sbit K132 = P1^5; //
- sbit K141 = P1^6; //
- sbit K142 = P1^7; //
- sbit K166 = P0^5; //全套动作
- unsigned char keyval; //定义变量储存按键值
- unsigned char jianzhi; //定义变量储存按键值
- unsigned char M1;
- unsigned char i1;
- unsigned char t,shi,ge,bai,dadt;
- unsigned char code xsbcdbuf[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77};
- /*************************************************************************
- ********************
- LCD WRITE 模式 连续写入数据
- *************************************************************************/
- /*********************************************************
- *IIC_delay
- *******************************************************/
- void led_delay(void)
- {
- unsigned char j;
- for(j=0;j<200;j++)
- {}
- }
- void delay(uint t)
- {
- uint k;
- while(t--)
- {
- for(k=0; k<130; k++)
- { }
- }
- }
- //电机运转延时函数
- void delayB(uchar x) //x*0.14MS
- {
- uchar i;
- while(x--)
- {
- for (i=0; i<13; i++)
- { }
- }
- }
- //dengmingqi
- void beep()
- {
- uchar i;
- for (i=0;i<100;i++)
- {
- // delayB(4);
- BEEP=!BEEP; //BEEP取反
- }
- BEEP=1; //关闭蜂鸣器
- }
- //一号主控电机
- //正转
- void motor_ffw10()
- {
- uchar i;
- // uint j;
- // for (j=0; j<8; j++) //转1*n圈
- for (i=0; i<8; i++) //一个周期转45度
- {P2=FFW1[i]; //取数据
- delay(1); //调节转速
- c=i;
- // }
- }
- }
- //反转
- void motor_rev11()
- {
- uchar i;
- uint j;
- x=0;
- z=1;
- // for (j=0; j<8; j++) //转1×n圈
- {
- // if(K3==0)
- // {break;} //退出此循环程序
-
- for (i=0; i<8; i++) //一个周期转45度
- {
- P2 = REV1[i]; //取数据
- delay(1); //调节转速
- c=i;
- }
- }
- }
- //二号主控电机
- //电机正转动
- void motor_ffw20()
- {
- uchar i;
- uint j;
- x=1;
- z=2;
- // for (j=0; j<8; j++) //转1*n圈
- {
- // if(K3==0)
- //{break;} //退出此循环程序
- for (i=0; i<8; i++) //一个周期转45度
- {
- P2 = FFW[i]; //取数据
- delay(1); //调节转速
- c=i;
- }
- }
- }
- //反转
- void motor_rev21()
- {
- uchar i;
- uint j;
- x=0;
- z=2;
- // for (j=0; j<8; j++) //转1×n圈
- {
- //if(K3==0)
- // {break;} //退出此循环程序
- c=8;
- for (i=0; i<8; i++) //一个周期转45度
- {
- P2 = REV[i]; //取数据
- delay(1); //调节转速
- c=i;
- }
- }
- }
- //三号主控电机
- //电机正转动
- void motor_ffw30()
- {
- uchar i;
- uint j;
- x=1;
- z=3;
- //for (j=0; j<8; j++) //转1*n圈
- for (i=0; i<8; i++) //一个周期转45度
- {
- P3=FFW1[i]; //取数据
- delay(1);
- c=i; //调节转速
- }
- }
- //反转
- void motor_rev31()
- {
- uchar i;
- uint j;
- x=0;
- z=3;
- // for (j=0; j<8; j++) //转1×n圈
- // {
- // if(K3==0)
- // {break;}
- //退出此循环程序
- c=j;
- for (i=0; i<8; i++) //一个周期转45度
- {
- P3 = REV1[i]; //取数据
- delay(1); //调节转速
- //调节转速
- }
- // }
- }
- //四号主控电机
- //电机正转动
- void motor_ffw40()
- {
- uchar i;
- uint j;
- x=1;
- z=4;
- // for (j=0; j<8; j++) //转1*n圈
- {
- // if(K3==0)
- // {break;}
- //退出此循环程序
-
- for (i=0; i<8; i++) //一个周期转45度
- {
- P3 = FFW[i]; //取数据
- c=i;
- delay(2); //调节转速
- }
- }
- }
- //反转
- void motor_rev41()
- {
- uchar i;
- uint j;
-
- x=0;
- z=4;
- // for (j=0; j<8; j++) //转1×n圈
- {
- c=j;
- for (i=0; i<8; i++) //一个周期转45度
- {
- P3 = REV[i]; //取数据
- delay(2); //调节转速
- }
- }
- }
- //一号主控电机
- //正转
- void motor_ffws10()
- {
- uchar i;
- // uint j;
- // for (j=0; j<8; j++) //转1*n圈
- for (i=0; i<8; i++) //一个周期转45度
- {P2=FFW1[i]; //取数据
- delay(1); //调节转速
- c=i;
- // }
- }
- }
- //反转
- void motor_revs11()
- {
- uchar i;
- uint j;
- x=0;
- z=1;
- // for (j=0; j<8; j++) //转1×n圈
- {
- // if(K3==0)
- // {break;} //退出此循环程序
-
- for (i=0; i<8; i++) //一个周期转45度
- {
- P2 = REV1[i]; //取数据
- delay(1); //调节转速
- c=i;
- }
- }
- }
- //二号主控电机
- //电机正转动
- void motor_ffws20()
- {
- uchar i;
- uint j;
- x=1;
- z=2;
- // for (j=0; j<8; j++) //转1*n圈
- {
- // if(K3==0)
- //{break;} //退出此循环程序
- for (i=0; i<8; i++) //一个周期转45度
- {
- P2 = FFW[i]; //取数据
- delay(1); //调节转速
- c=i;
- }
- }
- }
- //反转
- void motor_revs21()
- {
- uchar i;
- uint j;
- x=0;
- z=2;
- // for (j=0; j<8; j++) //转1×n圈
- {
- //if(K3==0)
- // {break;} //退出此循环程序
- c=8;
- for (i=0; i<8; i++) //一个周期转45度
- {
- P2 = REV[i]; //取数据
- delay(1); //调节转速
- c=i;
- }
- }
- }
- //三号主控电机
- //电机正转动
- void motor_ffws30()
- {
- uchar i;
- uint j;
- x=1;
- z=3;
- //for (j=0; j<8; j++) //转1*n圈
- for (i=0; i<8; i++) //一个周期转45度
- {
- P3=FFW1[i]; //取数据
- delay(1);
- c=i; //调节转速
- }
- }
- //反转
- void motor_revs31()
- {
- uchar i;
- uint j;
- x=0;
- z=3;
- // for (j=0; j<8; j++) //转1×n圈
- // {
- // if(K3==0)
- // {break;}
- //退出此循环程序
- c=j;
- for (i=0; i<8; i++) //一个周期转45度
- {
- P3 = REV1[i]; //取数据
- delay(1); //调节转速
- //调节转速
- }
- // }
- }
- //四号主控电机
- //电机正转动
- void motor_ffws40()
- {
- uchar i;
- uint j;
- x=1;
- z=4;
- // for (j=0; j<8; j++) //转1*n圈
- {
- // if(K3==0)
- // {break;}
- //退出此循环程序
-
- for (i=0; i<8; i++) //一个周期转45度
- {
- P3 = FFW[i]; //取数据
- c=i;
- delay(2); //调节转速
- }
- }
- }
- //反转
- void motor_revs41()
- {
- uchar i;
- uint j;
-
- x=0;
- z=4;
- // for (j=0; j<8; j++) //转1×n圈
- {
- c=j;
- for (i=0; i<8; i++) //一个周期转45度
- {
- P3 = REV[i]; //取数据
- delay(2); //调节转速
- }
- }
- }
- //一号主控电机
- //正转
- void motor_ffwA10()
- {
- uchar i;
- uint j;
- x=1;
- z=1;
- for (j=0; j<50; j++) //转1*n圈
- {
- for (i=0; i<8; i++) //一个周期转45度
- {
- P2 = FFW1[i]; //取数据
- delay(50); //调节转速
- c=i;
- z=1;
- }
- }
- }
- //反转
- void motor_revA11()
- {
- uchar i;
- uint j;
- x=0;
- z=1;
- for (j=0; j<50; j++) //转1×n圈
- {
- // if(K3==0)
- // {break;} //退出此循环程序
-
- for (i=0; i<8; i++) //一个周期转45度
- {
- P2 = REV1[i]; //取数据
- delay(50); //调节转速
- z=1;
- c=i;
- }
- }
- }
- //二号主控电机
- //电机正转动
- void motor_ffwA20()
- {
- uchar i;
- uint j;
- x=1;
- z=2;
- for (j=0; j<20; j++) //转1*n圈
- {
- // if(K3==0)
- //{break;} //退出此循环程序
- for (i=0; i<8; i++) //一个周期转45度
- {
- P2 = FFW[i]; //取数据
- delay(50); //调节转速
- c=i;
- z=2;
- }
- }
- }
- //反转
- void motor_revA21()
- {
- uchar i;
- uint j;
- x=0;
- z=2;
- for (j=0; j<20; j++) //转1×n圈
- {
- //if(K3==0)
- // {break;} //退出此循环程序
- c=8;
- for (i=0; i<8; i++) //一个周期转45度
- {
- P2 = REV[i]; //取数据
- delay(50); //调节转速
- c=i;
- z=2;
- }
- }
- }
- //三号主控电机
- //电机正转动
- void motor_ffwA30()
- {
- uchar i;
- uint j;
- x=1;
- z=3;
- for (j=0; j<50; j++) //转1*n圈
- {
- for (i=0; i<8; i++) //一个周期转45度
- {
- P3=FFW1[i]; //取数据
- delay(1);
- c=i; //调节转速
- z=3;
- }
- }
- }
- //反转
- void motor_revA31()
- {
- uchar i;
- uint j;
- x=0;
- z=3;
- for (j=0; j<50; j++) //转1×n圈
- {
- // if(K3==0)
- // {break;}
- //退出此循环程序
- c=j;
- for (i=0; i<8; i++) //一个周期转45度
- {
- P3 = REV1[i]; //取数据
- delay(1); //调节转速
- //调节转速
- z=3;
- }
- }
- }
- //四号主控电机
- //电机正转动
- void motor_ffwA40()
- {
- uchar i;
- uint j;
- x=1;
- z=4;
- for (j=0; j<30; j++) //转1*n圈
- {
- // if(K3==0)
- // {break;}
- //退出此循环程序
-
- for (i=0; i<8; i++) //一个周期转45度
- {
- P3 = FFW[i]; //取数据
- c=i;
- delay(1); //调节转速
- z=4;
- }
- }
- }
- //反转
- void motor_revA41()
- {
- uchar i;
- uint j;
-
- x=0;
- z=4;
- for (j=0; j<30; j++) //转1×n圈
- {
- c=j;
- for (i=0; i<8; i++) //一个周期转45度
- {
- P3 = REV[i]; //取数据
- delay(2);
- z=4;
-
- }
- }
- }
- void motor_ffw1A40()
- {
- uchar i;
- uint j;
- x=1;
- z=4;
- for (j=0; j<30; j++) //转1*n圈
- {
- // if(K3==0)
- // {break;}
- //退出此循环程序
-
- for (i=0; i<8; i++) //一个周期转45度
- {
- P3 = FFW[i]; //取数据
- c=i;
- delay(1); //调节转速
- z=4;
- }
- }
- }
- //反转
- void motor_rev1A41()
- {
- uchar i;
- uint j;
-
- x=0;
- z=4;
- for (j=0; j<30; j++) //转1×n圈
- {
- c=j;
- for (i=0; i<8; i++) //一个周期转45度
- {
- P3 = REV[i]; //取数据
- delay(2);
- z=4;
-
- }
- }
- }
- /*
- void Init_Timer0(void)
- {
- TMOD |= 0x01; //使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响
- TH0=0x00; //给定初值,这里使用定时器最大值从0开始计数一直到65535溢出
- TL0=0x00;
- EA=1; //总中断打开
- ET0=1; //定时器中断打开
- TR0=1; //定时器开关打开
- }
- */
- void init()
- {
- TMOD=0X01;
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256;
- ET0=1;
- EA=1;
- TR0=1;
- }
- void IIC_delay(void)
- {
- unsigned char i;
- for(i=0;i<20;i++) _nop_();
- }
- /*********************************************************
- *
- 启动IIC
- *********************************************************/
- void start_IIC(void)
- {
- SCL=1; //给芯片发送开始信号
- SDA=1;
- IIC_delay();
- SDA=0;
- IIC_delay();
- SCL=0; //开始信号传送完
- IIC_delay();
- }
- /*******************************************************
- *
- 停止IIC
- *******************************************************/
- void stop_IIC(void)
- {
- SCL=0;
- IIC_delay();
- SDA=0;
- IIC_delay();
- SCL=1;
- IIC_delay();
- SDA=1;
- }
- void ack_IIC()
- {
- SCL=0;
- _nop_();_nop_();_nop_();
- while(SDA);
- SCL=1;
- _nop_();_nop_();_nop_();
- SCL=0;
- }
- /*******************************************************
- *
- 写一个字节数据
- *******************************************************/
- void WriteByte(unsigned char WriteData)
- {
- unsigned char i;
- for(i=0;i<8;i++)//开始传送8位数据,每循环一次传送一位数据
- {
- SCL=0;
- IIC_delay();
- WriteData=WriteData>>1;
- SDA=CY;
- IIC_delay();
- SCL=1;
- IIC_delay();
- }
- //8位数据传送完
- ack_IIC(); //判断芯片发过来的ACK应答信号
- }
- /*******************************************************
- /************************************************
- 写一字节数据到LEDSROM
- **************************************************/
- void write_LEDSROM(unsigned char addr,unsigned char WData)
- {
- start_IIC(); //调用开始信号
- WriteByte(addr); //写起始地址命令(0C0H),地址00H单元。
- WriteByte(WData);//给显示寄存器写显示数据,值可根据实参改变
- stop_IIC(); //调用结束信号,一个字节命令发送完毕,可以发送下一个命令
- }
- /************************************************
- /************************************************
- *
- 分开写数据到LED
- **************************************************/
- void xsled(void)
- {
- SDA=1;
- SCL=1;
- start_IIC(); //调用开始信号
- WriteByte(0x44);//写命令40H(数据设置)
- stop_IIC(); //调用结束信号,一个字节命令发送完毕,可以发送下一个命令
- write_LEDSROM(0xC0,0x00); //第一个数码管
- write_LEDSROM(0xC1,xsbcdbuf[bai]); //第二个数码管
- write_LEDSROM(0xC2,xsbcdbuf[shi]); //第三个数码管
- write_LEDSROM(0xC3,xsbcdbuf[ge]);//第四个数码管
- IIC_delay();
- start_IIC(); //调用开始信号
- WriteByte(0x8a); //送开屏命令,(8BH),亮度可以根据低三位调节。//显示亮度
- stop_IIC(); //调用结束信号,一个字节命令发送完毕,可以发送下一个命令
- }
- void jisuan()
- {
- bai=z ;
- shi=x ;
- ge=c;
- //bai=dadt/100;
- // shi=dadt/10%10;
- // ge=dadt%10;
- }
- main()
- {
- P0=0xff;
- M1=1;//chuzhi
- // unsigned char z;
- z=1;
- //P1=0xff;
- init();
- while(1)
- {
- //motor_revA11();
- //motor_revA10();
- // jisuan();
- // xsled();
- jisuan();
- xsled();
- K166=0;
-
-
- P2=0x00;
-
- P3=0x00;
-
- P1=0x00;
- if(t==1000)
- {
- t=0;
- }
- //1号电机
- if(K111==1)
- {
- // K1=1; //端口测试
- // beep();
- motor_ffw10(); //电机正转
- }
- if(K112==1)
- {
- motor_rev11(); //电机反转
- }
- //2号电机
- if(K121==1)
- {
- motor_ffw20(); //电机正转
- }
- if(K122==1)
- {
-
- motor_rev21(); //电机反转
- }
- //3号电机
- if(K131==1)
- {
-
- motor_ffw30(); //电机正转
-
- }
- if(K132==1)
- {
-
- motor_rev31(); //电机反转
-
- }
- //4号电机
- if(K141==1)
- {
-
- motor_ffw40(); //电机正转
-
- }
- if(K142==1)
- {
-
- motor_rev41(); //电机反转
-
- }
- //quantao
- if(K166==1)
- {
- uchar i;
- for (i=0; i<1; i++)
- {
- K1=1;
- {
-
- // motor_ffwA20(); //电机正转
- motor_revA21();
- jisuan();
- xsled();
- }
- jisuan();
- xsled();
- delay(2000);
- jisuan();
- xsled();
- //#############################################################shang
-
- // if(100>t>1)
- {
-
- motor_ffwA10(); //电机正转
- jisuan();
- xsled();
-
- }
- delay(2000);
- jisuan();
- xsled();
- //######################################################################xaunzhuanzhenti
- // if(30>t>25)
- {
-
- motor_ffwA30(); //电机正转
- jisuan();
- xsled();
-
- }
- jisuan();
- xsled();
- delay(1000);
- jisuan();
- xsled();
- //if(30>t>25)
- {
-
- motor_revA31(); //电机正转
-
- jisuan();
- xsled();
- }
- delay(100);
- jisuan();
- xsled();
- //#####################################################xuanzhaunshouwan
- //下降之前展开机
- //下降
- //if(40>t>30)
- {
- jisuan();
- xsled();
- motor_revA41();
- // motor_ffwA40(); //电机正转
- jisuan();
- xsled();
- }
- delay(3000);
- jisuan();
- xsled();
- // if(250>t>120) #############################################xaijiang
- {
-
- motor_ffwA20(); //电机正转
- // motor_revA21();
- motor_ffwA20();
- jisuan();
- xsled();
- }
- jisuan();
- xsled();
- delay(2000);
- jisuan();
- xsled();
- jisuan();
- xsled();
- //#####################################################jiajing
- // if(40>t>30)
- {
-
- // motor_revA41(); //电机正转
- motor_ffwA40();
- jisuan();
- xsled();
-
- M1=0;
- }
- jisuan();
- xsled();
- //#############################################################shang
-
- // if(100>t>1)
- {
- jisuan();
- xsled();
- motor_revA21();
-
- // motor_ffwA20(); //电机正转
- jisuan();
- xsled();
-
- }
- delay(2000);
- jisuan();
- xsled();
- jisuan();
- xsled();
- //if(20>t>13)#####################################################huizhuan
- {
-
- motor_revA11(); //电机正转
- jisuan();
- xsled();
-
- }
- // delay(2000);
- jisuan();
- xsled();
- //z =0;
- // x
- // if(30>t>25)
- {
-
- /// motor_ffwA30(); //电机正转
-
- }
- jisuan();
- xsled();
- // delay(10000);
- jisuan();
- xsled();
- //if(40>t>30)
- {
-
- // motor_ffwA40(); //电机正转
-
- }
- // delay(1000);
- jisuan();
- xsled();
- //if(20>t>13)
- {
-
- // motor_revA11(); //电机正转
-
- }
- // delay(2000);
- jisuan();
- xsled();
- //if(25>t>20)
- {
-
- // motor_revA21(); //电机正转
-
- }
- // delay(2000);
- jisuan();
- xsled();
-
- //if(30>t>25)
- {
-
- // motor_revA31(); //电机正转
-
- }
- // delay(1000);
- jisuan();
- xsled();
- // if(40>t>30)
- {
-
- // motor_revA41(); //电机正转
-
- M1=0;
- }
- jisuan();
- xsled();
- // delay(2000);
- }
- }
- jisuan();
- xsled();
- c =0;
- }
- }
- void T0_time() interrupt 1
- {
- TH0=(65535-80000)/256;
- TL0=(65535-60000)%256;
- // TH0 = 0x0FC;
- // TL0 = 0xEC;
- t++;
- }
复制代码
|