亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標題:
單片機仿真步進電機設定旋轉度數 附源程序
[打印本頁]
作者:
吳海晨o
時間:
2020-11-16 20:26
標題:
單片機仿真步進電機設定旋轉度數 附源程序
步進電機控制旋轉度數,能控制開關,以及液晶顯示,通過按鍵設定正反轉度數。能夠設置正反轉。
仿真運行如下圖所示!
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei圖片20201116202608.png
(99.8 KB, 下載次數: 43)
下載附件
2020-11-16 20:26 上傳
單片機源程序如下:
#include <reg52.h>
unsigned long beats=0;
int set=0;
sbit k2=P3^1;
sbit k3=P3^2;
sbit K1=P3^0;
sbit k4=P3^3;
#define DATA P0 //1602驅動端口
int flag=0,flag2=0,flag3=0;
int i;
unsigned char S1,S2,S3;
sbit RS= P2^0;
sbit RW= P2^1;
sbit E= P2^2;
unsigned char tmp;
static unsigned char index=0;
unsigned char phasefz[8] ={0x08,0x0c,0x04,0x06,0x02,0x03,0x01,0x09};//正轉 電機導通相序 D-C-B-A
unsigned char phasezz[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};//反轉 電機導通相序 A-B-C-D
//判斷忙指令
void Busy()
{
DATA = 0xff;
RS = 0;
RW = 1;
while(DATA & 0x80)
{
E = 0;
E = 1;
}
E = 0;
}
//寫指令程序
void WriteCommand(unsigned char btCommand)
{
Busy();
RS = 0;
RW = 0;
E = 1;
DATA = btCommand;
E = 0;
}
//寫數據程序
void WriteData(unsigned char btData)
{
Busy();
RS = 1;
RW = 0;
E = 1;
DATA = btData;
E = 0;
}
//清屏顯示
void Clear()
{
WriteCommand(1);
}
//初始化
void Init()
{
WriteCommand(0x0c); //開顯示,無光標顯示
WriteCommand(0x06); //文字不動,光標自動右移
WriteCommand(0x38); //設置顯示模式:8位2行5x7點陣
}
//顯示單個字符
void DisplayOne(bit bRow, unsigned char btColumn, unsigned char btData, bit bIsNumber)
{
if (bRow) WriteCommand(0xc0 + btColumn);
else WriteCommand(0x80 + btColumn);
if (bIsNumber) WriteData(btData + 0x30);
else WriteData(btData);
}
//顯示字符串函數
void DisplayString(bit bRow, unsigned char btColumn, unsigned char *pData)
{
while (*pData != '\0')
{
if (bRow) WriteCommand(0xc0 + btColumn); //顯示在第1行
else WriteCommand(0x80 + btColumn); //顯示在第0行
WriteData(*(pData++)); //要顯示的數據
btColumn++; //列數加一
}
}
void startmotor(unsigned long angle);
void key()
{
if(K1==0)
{
flag2++;
while(K1==0);
}
if(k2==0)
{
set++;
if(set>180) set=180;
while(k2==0);
}
if(k3==0)
{
set--;
if(set<=0) set=0;
while(k3==0);
}
if(k4==0)
{
flag++;
while(k4==0);
}
}
void display()
{
S1 = (unsigned char)set / 100;
S2 = (unsigned char)set % 100 / 10;
S3 = (unsigned char)set % 10;
DisplayOne(1,6,S1,1);
DisplayOne(1,7,S2,1);
DisplayOne(1,8,S3,1);
if(flag%2==0) {DisplayString(1,5,"+");}
if(flag%2==1) {DisplayString(1,5,"-");}
}
void main()
{
EA=1;
TMOD=0X01;
TH0=0XF8;//2ms
TL0=0XCD;
ET0=1;
TR0=1;
Init();
flag3=1;
DisplayString(0,2,"MOTOR: OOF");
while(1)
{
key();
display();
if(flag2%2==1)
{
DisplayString(0,2,"MOTOR: ON");
for(i=0;i<1;i++)
{
startmotor(set);
}
flag2++;
}
}
}
void startmotor(unsigned long angle)
{
EA=0;
beats=(angle*4076)/360; //防止因為中斷導致計算錯誤,因為以后的中斷中需要使用到beats
EA=1;
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
步進.zip
(95.88 KB, 下載次數: 100)
2020-11-16 20:24 上傳
點擊文件名下載附件
步進電機
下載積分: 黑幣 -5
作者:
∮醉心∮·
時間:
2020-11-17 09:46
大神,我做的 步進電機仿真里轉,實物連線就沒有反應,可以 幫我看看程序嗎?
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1