|
单片机代码
- #include<reg51.h>
- #include<intrins.h>
- #include<stepmotrolcd1602.c>
- #define uchar unsigned char
- #define uint unsigned int
- #define delayNOP();{_nop_();_nop_();_nop_();};
- unsigned char last_val[4]={1,1,1,1},cur_val[4]={1,1,1,1};
- unsigned char code FFW[8]={0x02,0x06,0x04,0x0c,0x08,0x09,0x01,0x03}; //正转
- unsigned char code REV[8]={0x01,0x09,0x08,0x0c,0x04,0x06,0x02,0x03}; //反转
- sbit K1=P3^0; //运行与停止
- sbit K2=P3^1; //设定圈数
- sbit K3=P3^2; //方向转换
- sbit K4=P3^3; //速率调整
- sbit L1=P3^5; //正转指示
- sbit L2=P3^6; //反转指示
- sbit L3=P3^7; //停转指示
- sbit LCD_RS=P2^0;
- sbit LCD_RW=P2^1;
- sbit LCD_EN=P2^2;
- bit on_off=0; //运行与停止标志
- bit direction=1; //方向标志
- bit rate_dr=1; //速率标志
- bit snum_dr=1; //圈数标志
- uchar number=0,number1=1;
- uchar snum=1,snum1=1; //预设定标志
- uchar rate=1; //预设定速率
- uchar data_temp,data_temp0,rate1,rate1,rateh;
- uchar data_temp2[2]={'0','0'};
- void keyscan();
- void delay1();
- /************主程序************
- void main(void)
- {
- TMOD=0X01;
- rate1=0xb1;
- rateh=0xe0;
- EA=1;
- ET0=1;
- P1=0X03;
- L1=1;
- L2=1;
- L3=1;
- LcdRw=0;
- welcome();
- GotoXY(12,0);
- Print(">>");
- while(1)
- {GotoXY(0,1);
- Print("num: ");
- GotoXY(5,1);
- Print(data_conv(snum));
- GotoXY(8,1);
- Print("rate: ");
- GotoXY(14,1);
- Print(data_conv(rate));
- keyscan();
- if(number1==snum1)
- { number1=0;
- on_off=0;
- TR0=0;
- TL0=rate1;
- TH0=rateh;
- snum=snum1;
- P1=0X00;
- GotoXY(0,0);
- Print("Stop! ");
- L1=1;
- L2=1;
- L3=1;
- }
- }
- }
- /**********延时10ms程序***************/
- void delay1()
- {
- unsigned char i,j;
- for(i=20;i>0;i--)
- for(j=248;j>0;j--);
- }
- /**********键盘扫描程序**************/
- void keyscan() //独立按键扫描
- {
- last_val[0]=cur_val[0];
- cur_val[0]=K1;
- if((last_val[0]!=cur_val[0])&&cur_val[0]==0)
- {delay1();
- if((last_val[0]!=cur_val[0])&&cur_val[0]==0)
- {on_off=~on_off;
- {if(on_off)
- { GotoXY(0,0) ;
- Print("Running! ");
- TR0=0;
- TL0=rate1;
- TH0=rateh;
- if(direction)
- { L1=0;
- L2=1;
- L3=1;}
- }
- else
- { GotoXY(0,0);
- Print("Stop! ");
- TR0=0;
- TL0=rate1;
- TH0=rateh;
- L1=1;
- L2=1;
- L3=0;
- }
- }
- }
- }
- last_val[1]=cur_val[1];
- cur_val[1]=K2;
- if((last_val[1]!=cur_val[1])&&cur_val[1]==0)
- {delay1();
- if((last_val[1]!=cur_val[1])&&cur_val[1]==0)
- {if(snum_dr==1)
- {snum++;
- snum1=snum;
- if(snum==0x14)
- {snum_dr=~snum_dr;}
- }else{
- snum--;
- snum1=snum;
- if(snum==0x01)
- {snum_dr=~snum_dr;}
- }
- }
- }
- last_val[2]=cur_val[2];
- cur_val[2]=K3;
- if((last_val[2]!=cur_val[2])&&cur_val[2]==0)
- {delay1();
- if((last_val[2]!=cur_val[2])&&cur_val[2]==0)
- {direction=~direction;
- if(direction)
- {GotoXY(12,0);
- Print(">>");
- L1=0;
- L2=1;
- L3=1;}
- else{GotoXY(12,0);
- Print("<<");
- L1=1;
- L2=0;
- L3=1;}
- }
- }
- last_val[3]=cur_val[3];
- cur_val[3]=K4;
- if((last_val[3]!=cur_val[3])&&cur_val[3]==0)
- delay1();
- {if((last_val[3]!=cur_val[3])&&cur_val[3]==0)
- {if(rate_dr==1)
- {rate++;
- if(snum==0x10)
- {rate_dr=~rate_dr;}
- }
- else
- {
- rate--;
- if(rate==0x01)
- {rate_dr=~rate_dr;}
- }
- switch(rate)
- {
- case 1: rate1=0xb1;rateh=0xe0;break; //100hz
- case 2: rate1=0xec;rateh=0x78;break; //200hz
- case 3: rate1=0xf2;rateh=0xb2;break; //300hz
- case 4: rate1=0xf6;rateh=0x3c;break; //400hz
- case 5: rate1=0xf7;rateh=0xb6;break; //450hz
- case 6: rate1=0xf8;rateh=0x30;break; //500hz
- case 7: rate1=0xf8;rateh=0xe6;break; //550hz
- case 8: rate1=0xf9;rateh=0x7d;break; //600hz
- case 9: rate1=0xf9;rateh=0xfe;break; //650hz
- case 10: rate1=0xfa;rateh=0x6d;break; //700hz
- case 11: rate1=0xfa;rateh=0xcd;break; //750hz
- case 12: rate1=0xfb;rateh=0x1e;break; //800hz
- case 13: rate1=0xfb;rateh=0x68;break; //850hz
- case 14: rate1=0xfb;rateh=0xa9;break; //900hz
- case 15: rate1=0xfc;rateh=0x18;break; //1000hz
- case 16: rate1=0xfc;rateh=0x73;break; //1100hz
- }
- }
- }
- }
- /************定时器中断**************/
- void motor_onoff() interrupt 1
- {
- number++;
- TL0=rate1;
- TH0=rateh;
- if(number==64)
- {snum--;
- number=0;
- number1++;
- }
- else {
- if(direction==1)
- {if(v<8)
- {P1=FFW[v];
- v++;}
- if(v==8)
- v=0;
- }
- else
- {if(v<8)
- {P1=REV[v];v++;}
- if(v==8)
- v=0;
- }
- }
- }
复制代码
|
|