標(biāo)題:
求大神看程序?qū)懸粋(gè)單片機(jī)控制步進(jìn)電機(jī)轉(zhuǎn)動(dòng)的流程圖
[打印本頁]
作者:
牛鬼蛇神
時(shí)間:
2018-5-10 17:20
標(biāo)題:
求大神看程序?qū)懸粋(gè)單片機(jī)控制步進(jìn)電機(jī)轉(zhuǎn)動(dòng)的流程圖
本程序是一個(gè)51單片機(jī)控制步進(jìn)電機(jī)轉(zhuǎn)動(dòng)的程序,通過鍵盤設(shè)置轉(zhuǎn)的圈數(shù),電機(jī)能自動(dòng)轉(zhuǎn)設(shè)置的圈數(shù),并且轉(zhuǎn)的圈數(shù)和已經(jīng)轉(zhuǎn)過的圈數(shù)都能在液晶上顯示出來。求大神幫忙寫個(gè)程序流程圖,先謝謝大佬們。以下是程序:
#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è)置
/********************************************************/
/*
/* 延時(shí)t毫秒
/* 11.0592MHz時(shí)鐘,延時(shí)約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++) //一個(gè)周期轉(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++) //一個(gè)周期轉(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ù)點(diǎn)
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ù)制代碼
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1