亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
51單片機按鍵與串口控制步進電機正反轉調速源碼
[打印本頁]
作者:
搞科研
時間:
2018-10-10 12:50
標題:
51單片機按鍵與串口控制步進電機正反轉調速源碼
關于51單片機按鍵與串口控制步進電機正反轉調速的編程語言
單片機源程序如下:
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
//------8拍-----
uchar code zz[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09}; //正轉
uchar code fz[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01}; //反轉
sbit K1=P3^0; //停止
sbit K2=P3^1; //正轉
sbit K3=P3^2; //反轉
sbit K4=P3^3; //加速
sbit K5=P3^4; //減速
uchar state=0; //狀態變量
uint Time=60; //延時時間,用于調速
unsigned char receiveData='0';
void UsartConfiguration(); //初始化串口
void delay(uint ms) //延時,用于調速
{
uint t;
while(ms--)
for(t=0;t<120;t++);
}
void motor_zz() //正傳函數
{
uint j;
for(j=0;j<8;j++)
{
if(P3==0xfb)
break;
P1=zz[j];
delay(Time);
}
}
void motor_fz() //反轉函數
{
uint j;
for(j=0;j<8;j++)
{
if(P3==0xfb)
break;
P1=fz[j];
delay(Time);
}
}
void main()
{
UsartConfiguration();
while(1)
{
while(state==0) //狀態0,停止
{
if((K2==0)||(receiveData=='z')) //按下K2或串口接收到'z',電機正轉
{
state=1;
receiveData='0';
break;
}
if((K3==0)||(receiveData=='f')) //按下K3或串口接收到'f',電機反轉
{
state=2;
receiveData='0';
break;
}
P0=0xfb;
P1=0x03;
}
while(state==1) //狀態1,正轉
{
if((K1==0)||(receiveData=='t')) //按下K1或串口接收到'f',電機反轉
{
state=0;
receiveData='0';
break;
}
if((K2==0)||(receiveData=='z')) //按下K2或串口接收到'z',電機正轉
{
state=1;
receiveData='0';
break;
}
if((K3==0)||(receiveData=='f')) //按下K3或串口接收到'f',電機反轉
{
state=2;
receiveData='0';
break;
}
if((K4==0)||(receiveData=='+')) //按下K4或串口接收到'+',電機加速
{
Time=Time-5;
if(Time<20)
Time=20;
while(K4==0);
}
if((K5==0)||(receiveData=='-')) //按下K5或串口接收到'-',電機減速
{
Time=Time+5;
if(Time>100)
Time=100;
while(K5==0);
}
motor_zz(); //狀態1,正轉
}
while(state==2) //狀態2,反轉
{
if((K1==0)||(receiveData=='t')) //按下K1或串口接收到'f',電機反轉
{
state=0;
receiveData='0';
break;
}
if((K2==0)||(receiveData=='z')) //按下K2或串口接收到'z',電機正轉
{
state=1;
receiveData='0';
break;
}
if((K3==0)||(receiveData=='f')) //按下K3或串口接收到'f',電機反轉
{
state=2;
receiveData='0';
break;
}
if((K4==0)||(receiveData=='+')) //按下K4或串口接收到'+',電機加速
{
Time=Time-5;
if(Time<20)
Time=20;
while(K4==0);
}
if((K5==0)||(receiveData=='-')) //按下K5或串口接收到'-',電機減速
{
Time=Time+5;
if(Time>100)
Time=100;
while(K5==0);
}
motor_fz(); //狀態2,反轉
}
}
}
/************************************************************************
* 函數名 :UsartConfiguration()
* 函數功能 :設置串口
* 輸入 : 無
* 輸出 : 無
*************************************************************************/
void UsartConfiguration()
{
SCON=0X50; //設置為工作方式1
//TMOD=0X20; //設置計數器工作方式2
TMOD=0X21; //設置計數器工作方式2 和定時器0
PCON=0X80; //波特率加倍
//TH1=0XF4; //計數器初始值設置,注意波特率是4800的
//TL1=0XF4;
TH1=0XFA; //計數器初始值設置,注意波特率是9600的
TL1=0XFA;
ES=1; //打開接收中斷
EA=1; //打開總中斷
TR1=1; //打開計數器
}
void Usart() interrupt 4
{
receiveData=SBUF;//出去接收到的數據
RI = 0;//清除接收中斷標志位
}
復制代碼
所有資料51hei提供下載:
51單片機按鍵與串口控制步進電機正反轉調速.zip
(1.5 KB, 下載次數: 96)
2018-10-10 12:50 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
admin
時間:
2018-10-10 15:02
補全原理圖或者詳細說明一下電路連接即可獲得100+黑幣
作者:
搞科研
時間:
2018-10-10 22:33
我現在正在用STM32F030P4F6來嘗試,后續補上
作者:
hakelong
時間:
2018-10-12 07:38
正轉和反轉函數可以寫成一個函數,直接傳入一個參數就行。
作者:
dadiao
時間:
2018-10-12 11:12
思路不錯, 但是按鍵沒去抖動,串口控制命令只是一個字符,太簡單,容易誤動作,不太實用。
作者:
jion
時間:
2020-1-9 20:17
dadiao 發表于 2018-10-12 11:12
思路不錯, 但是按鍵沒去抖動,串口控制命令只是一個字符,太簡單,容易誤動作,不太實用。
在中斷力的SBUF有啥作用啊,一直沒想明白?
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1