|
本程序是一個51單片機(jī)控制步進(jìn)電機(jī)轉(zhuǎn)動的程序,通過鍵盤設(shè)置轉(zhuǎn)的圈數(shù),電機(jī)能自動轉(zhuǎn)設(shè)置的圈數(shù),并且轉(zhuǎn)的圈數(shù)和已經(jīng)轉(zhuǎn)過的圈數(shù)都能在液晶上顯示出來。求大神幫忙寫個程序流程圖,先謝謝大佬們。以下是程序:
- #include <reg52.h>
- #include <intrins.h>
- #include "LCD1602.h" //添加液晶頭文件
- #include "key.h" //添加1602頭文件
- #define uchar unsigned char
- #define uint unsigned int
- uchar code FFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};
- uchar code REV[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};
- unsigned char speed=2; //檔位
- unsigned char speed_1=30;//速度延遲
- unsigned char key_X=0; //0 運(yùn)行,1 設(shè)置
- unsigned char set=0; //0 運(yùn)行,1 設(shè)置
- /********************************************************/
- /*
- /* 延時t毫秒
- /* 11.0592MHz時鐘,延時約1ms
- /*
- /********************************************************/
- void delay(uint t)
- {
- uint k;
- while(t--)
- {
- for(k=0; k<125; k++)
- { }
- }
- }
- /********************************************************/
- /*
- /*步進(jìn)電機(jī)正轉(zhuǎn)
- /*
- /********************************************************/
- void motor_ffw(uint n)
- {
- uchar i;
- uint j;
- for (j=0; j<n; j++) //轉(zhuǎn)1×n圈
- {
- for (i=0; i<8; i++) //一個周期轉(zhuǎn)30度
- {
- P1 = FFW[i]; //取數(shù)據(jù)
- delay(30); //調(diào)節(jié)轉(zhuǎn)速
- }
- }
- }
- /********************************************************/
- /*
- /*步進(jìn)電機(jī)反轉(zhuǎn)
- /*
- /********************************************************/
- void motor_rev(uint n)
- {
- uchar i;
- uint j;
- for (j=0; j<n; j++) //轉(zhuǎn)1×n圈
- {
- for (i=0; i<8; i++) //一個周期轉(zhuǎn)30度
- {
- P1 = REV[i]; //取數(shù)據(jù)
- delay(30); //調(diào)節(jié)轉(zhuǎn)速
- }
- }
- }
- void disp()
- {
- if(set==0)
- {
- write_1602_c(0x87);
- write_1602_d(key_X/100+0x30);
- write_1602_d(key_X%100/10+0x30);
- write_1602_d('.');
- write_1602_d(key_X%10+0x30);
- write_1602_c(0xc8);
- write_1602_d(speed%10+0x30);
- }
- if(set==1)
- {
- }
- }
- unsigned char k=16; //矩陣鍵盤值
- unsigned char k1=17; //矩陣鍵盤值
- void main(){
- unsigned char x1=0; //光標(biāo)位置
- unsigned char quan=0; //圈數(shù)
- unsigned char xiaoshudian=0;//小數(shù)點
- unsigned char x2=0; //整數(shù)
- unsigned char x3=0; //小數(shù)
- LCD_init();
- write_1602_c(0x80);
- write_1602_d('M');
- write_1602_d('O');
- write_1602_d('T');
- write_1602_d('O');
- write_1602_d('R');
- write_1602_d(' ');
- write_1602_d(' ');
- write_1602_c(0x8C);
- write_1602_d(' ');
- write_1602_d('0');
- write_1602_d('.');
- write_1602_d('0');
- write_1602_c(0xC0);
- write_1602_d('S');
- write_1602_d('P');
- write_1602_d('E');
- write_1602_d('E');
- write_1602_d('D');
- while(1)
- {
- k=scan(); //矩陣鍵盤
- if(k!=k1)
- {
- if(set==1)
- if(k<10) //數(shù)字
- {
- if(x1==0)
- x2=k;
- if(x1==2)
- x3=k;
- write_1602_c(0x8D+x1);
- write_1602_d(k+'0');
- x1=x1+2;
- write_1602_c(0x8D+x1);
- write_1602_c(0x0f);//讓光標(biāo)閃爍
- }
- if(k==14) //開閥
- {
- set=0;
- write_1602_c(0x0C); //讓光標(biāo)停
- key_X=key_X+(x2*10+x3);
- disp();
- motor_rev(x2*10+x3); //電機(jī)轉(zhuǎn)
- }
- if(k==15) //關(guān)閥
- {
- set=0;
- write_1602_c(0x0C); //讓光標(biāo)停
- if(key_X>=(x2*10+x3))
- {
- key_X=key_X-(x2*10+x3);
- disp();
- motor_ffw(x2*10+x3); //電機(jī)轉(zhuǎn)
- }
- }
- if(k==10) //設(shè)置鍵
- {
- if(set==0)
- {
- set=1;
- x1=0;
- write_1602_c(0x8C);
- write_1602_d(' ');
- write_1602_d('0');
- write_1602_d('.');
- write_1602_d('0');
- write_1602_c(0x8D);
- write_1602_c(0x0f);//讓光標(biāo)閃爍
- }
- else
- {
- write_1602_c(0x0c);//讓光標(biāo)消失
- set=0;
- }
- }
-
- k1=k;
- if(k==12) //按加速
- {
- if(speed<4)
- {
- speed++;
- }
- if(speed==4)
- speed_1=30;
- if(speed==3)
- speed_1=50;
- if(speed==2)
- speed_1=70;
- if(speed==1)
- speed_1=90;
- }
- if(k==13) //按減速
- {
- if(speed>1)
- {
- speed--;
- }
- if(speed==4)
- speed_1=30;
- if(speed==3)
- speed_1=50;
- if(speed==2)
- speed_1=70;
- if(speed==1)
- speed_1=90;
- }
- }
- disp();
- }
- }
復(fù)制代碼
|
|