|
單片機(jī)代碼
- #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}; //正轉(zhuǎn)
- unsigned char code REV[8]={0x01,0x09,0x08,0x0c,0x04,0x06,0x02,0x03}; //反轉(zhuǎn)
- sbit K1=P3^0; //運(yùn)行與停止
- sbit K2=P3^1; //設(shè)定圈數(shù)
- sbit K3=P3^2; //方向轉(zhuǎn)換
- sbit K4=P3^3; //速率調(diào)整
- sbit L1=P3^5; //正轉(zhuǎn)指示
- sbit L2=P3^6; //反轉(zhuǎn)指示
- sbit L3=P3^7; //停轉(zhuǎn)指示
- sbit LCD_RS=P2^0;
- sbit LCD_RW=P2^1;
- sbit LCD_EN=P2^2;
- bit on_off=0; //運(yùn)行與停止標(biāo)志
- bit direction=1; //方向標(biāo)志
- bit rate_dr=1; //速率標(biāo)志
- bit snum_dr=1; //圈數(shù)標(biāo)志
- uchar number=0,number1=1;
- uchar snum=1,snum1=1; //預(yù)設(shè)定標(biāo)志
- uchar rate=1; //預(yù)設(shè)定速率
- 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;
- }
- }
- }
- /**********延時(shí)10ms程序***************/
- void delay1()
- {
- unsigned char i,j;
- for(i=20;i>0;i--)
- for(j=248;j>0;j--);
- }
- /**********鍵盤掃描程序**************/
- void keyscan() //獨(dú)立按鍵掃描
- {
- 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
- }
- }
- }
- }
- /************定時(shí)器中斷**************/
- 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;
- }
- }
- }
復(fù)制代碼
|
-
-
單片機(jī)代碼.docx
2018-6-19 11:01 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
14.14 KB, 下載次數(shù): 16, 下載積分: 黑幣 -5
|