久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標(biāo)題:
51單片機(jī)+編碼器+42步進(jìn)電機(jī)的源程序
[打印本頁]
作者:
mxk569364343
時間:
2018-5-15 10:05
標(biāo)題:
51單片機(jī)+編碼器+42步進(jìn)電機(jī)的源程序
前幾天幫別做一個51的小東西需要編碼器,結(jié)果發(fā)現(xiàn)網(wǎng)上編碼器的程序比較不好找,自己根據(jù)別人一個巧妙的思路寫了一個讀編碼器讀數(shù)的程序,用LCD1602顯示出來。里邊還有使用L298N驅(qū)動42步進(jìn)電機(jī)部分,可以參考一下。
單片機(jī)源程序如下:
#include <reg52.h>
typedef unsigned char uchar;
typedef unsigned int uint;
//LCD1602定義
#define LCD1602_DB P0 //LCD1602數(shù)據(jù)總線
sbit LCD1602_RS = P2^7; //RS端
sbit LCD1602_RW = P2^6; //RW端
sbit LCD1602_EN = P2^5; //EN端
uchar code digit[ ]={"0123456789"}; //定義字符數(shù)組顯示數(shù)字
uchar idata TEST[]="TEST";
//電機(jī)正反轉(zhuǎn)二維數(shù)組 0為逆時針,1為順時針
uchar code MotorCode[2][8]={{0x04,0x06,0x02,0x0a,0x08,0x09,0x01,0x05},{0x05,0x01,0x09,0x08,0x0a,0x02,0x06,0x04}};
uchar MotorStatus;//電機(jī)正反轉(zhuǎn)標(biāo)志位
sbit EncoderA=P3^2; //編碼器A相
sbit EncoderB=P3^4; //編碼器B相
uint EncoderCount=0 ;
/* 毫秒軟件延時函數(shù)*/
void delay_ms(uint x)
{
uint a,b;
for(a=x;a>0;a--)
for(b=114;b>0;b--);
}
/*=================================================
*函數(shù)名稱:Read_Busy
*函數(shù)功能:判斷1602液晶忙,并等待
=================================================*/
void Read_Busy()
{
uchar busy;
LCD1602_DB = 0xff;//復(fù)位數(shù)據(jù)總線
LCD1602_RS = 0; //拉低RS
LCD1602_RW = 1; //拉高RW讀
do
{
LCD1602_EN = 1;//使能EN
busy = LCD1602_DB;//讀回?cái)?shù)據(jù)
LCD1602_EN = 0; //拉低使能以便于下一次產(chǎn)生上升沿
}while(busy & 0x80); //判斷狀態(tài)字BIT7位是否為1,為1則表示忙,程序等待
}
/*=================================================
*函數(shù)名稱:LCD1602_Write_Cmd
*函數(shù)功能:寫LCD1602命令
*調(diào)用:Read_Busy();
*輸入:cmd:要寫的命令
=================================================*/
void LCD1602_Write_Cmd(uchar cmd)
{
Read_Busy(); //判斷忙,忙則等待
LCD1602_RS = 0;
LCD1602_RW = 0; //拉低RS、RW操作時序情況1602課件下中文使用說明基本操作時序章節(jié)
LCD1602_DB = cmd;//寫入命令
LCD1602_EN = 1; //拉高使能端 數(shù)據(jù)被傳輸?shù)絃CD1602內(nèi)
LCD1602_EN = 0; //拉低使能以便于下一次產(chǎn)生上升沿
}
/*=================================================
*函數(shù)名稱:LCD1602_Write_Dat
*函數(shù)功能:寫LCD1602數(shù)據(jù)
*調(diào)用:Read_Busy();
*輸入:dat:需要寫入的數(shù)據(jù)
=================================================*/
void LCD1602_Write_Dat(uchar dat)
{
Read_Busy();
LCD1602_RS = 1;
LCD1602_RW = 0;
LCD1602_DB = dat;
LCD1602_EN = 1;
LCD1602_EN = 0;
}
/*=================================================
*函數(shù)名稱:LCD1602_Clear
*函數(shù)功能:LCD1602清屏
=================================================*/
void LCD1602_Clear()
{
Read_Busy();
LCD1602_Write_Cmd(0x01); //清屏
}
/*=================================================
*函數(shù)名稱:LCD1602_Dis_OneChar
*函數(shù)功能:在指定位置顯示一個字符
*調(diào)用:LCD1602_Write_Cmd(); LCD1602_Write_Dat();
*輸入:x:要顯示的橫坐標(biāo)取值0-40,y:要顯示的行坐標(biāo)取值0-1(0為第一行,1為第二行)
dat:需要顯示的數(shù)據(jù)以ASCLL形式顯示
=================================================*/
void LCD1602_Dis_OneChar(uchar x, uchar y,uchar dat)
{
if(y) x |= 0x40;
x |= 0x80;
LCD1602_Write_Cmd(x);
LCD1602_Write_Dat(dat);
}
/*=================================================
*函數(shù)名稱:LCD1602_Dis_Str
*函數(shù)功能:在指定位置顯示字符串
*調(diào)用:LCD1602_Write_Cmd(); LCD1602_Write_Dat();
*輸入:x:要顯示的橫坐標(biāo)取值0-40,y:要顯示的行坐標(biāo)取值0-1(0為第一行,1為第二行)
*str:需要顯示的字符串
=================================================*/
void LCD1602_Dis_Str(uchar x, uchar y, uchar *str)
{
if(y) x |= 0x40;
x |= 0x80;
LCD1602_Write_Cmd(x);
while(*str != '\0')
{
LCD1602_Write_Dat(*str++);
}
}
/*=================================================
*函數(shù)名稱:Init_LCD1602
*函數(shù)功能:1602初始化
*調(diào)用: LCD1602_Write_Cmd();
=================================================*/
void Init_LCD1602()
{
LCD1602_Write_Cmd(0x38); // 設(shè)置16*2顯示,5*7點(diǎn)陣,8位數(shù)據(jù)接口
LCD1602_Write_Cmd(0x0c); //打開顯示屏,不顯示光標(biāo),光標(biāo)所在位置的字符不閃爍。
LCD1602_Write_Cmd(0x06); //讀寫一字節(jié)后地址指針加1
LCD1602_Write_Cmd(0x01); //清除顯示
}
void Motor_Forward() //電機(jī)正轉(zhuǎn)
{
TMOD=0x01;
TH0=(65535-2000)/256;
TL0=(65535-2000)%256;
EA=1;
ET0=1;
TR0=1;
MotorStatus=0;
}
void Motor_Reversal() //電機(jī)反轉(zhuǎn)
{
TMOD=0x01;
TH0=(65535-2000)/256;
TL0=(65535-2000)%256;
EA=1;
ET0=1;
TR0=1;
MotorStatus=1;
}
void Motor_Stop() //停止電機(jī)
{
ET0=0;
TR0=0;
P1=P1&0xF0;
}
uchar index = 0; //定義節(jié)拍輸出索引
void time0() interrupt 1
{
uchar tmp; //定義一個臨時變量
TH0=(65535-1000)/256;
TL0=(65535-1000)%256;
tmp = P1; //用 tmp 把 P1 口當(dāng)前值暫存
tmp = tmp & 0xF0; //用&操作清零低4位
//用|操作把節(jié)拍代碼寫到低4位
tmp = tmp | MotorCode[MotorStatus][index];
//把低4位的節(jié)拍代碼和高4位的原值送回 P1
P1 = tmp;
index++; //節(jié)拍輸出索引遞增
index = index & 0x07; //用&操作實(shí)現(xiàn)到8歸零
}
Init_Encoder ()
{
EA = 1; //開總中斷
EX0 = 1;//開外部中斷1
IT0 = 1;//外部中斷1下降沿觸發(fā)
}
void main()
{
Init_Encoder ();
Init_LCD1602();
Motor_Reversal();
LCD1602_Dis_Str(0, 0, &TEST[0]); //提示第一行MENU1
while (1)
{
LCD1602_Dis_OneChar(0,1,digit[EncoderCount/10000]);
LCD1602_Dis_OneChar(1,1,digit[EncoderCount%10000/1000]);
LCD1602_Dis_OneChar(2,1,digit[EncoderCount%1000/100]);
LCD1602_Dis_OneChar(3,1,digit[EncoderCount%100/10]);
LCD1602_Dis_OneChar(4,1,digit[EncoderCount%10/1]);
delay_ms(100);
// delay_ms(500); //延時 2 ms,即 2 ms 執(zhí)行一拍
// Motor_Reversal(); //電機(jī)反轉(zhuǎn)
// delay_ms(500); //延時 2 ms,即 2 ms 執(zhí)行一拍
// Motor_Stop();
// delay_ms(500); //延時 2 ms,即 2 ms 執(zhí)行一拍
}
}
//外部中斷1中斷服務(wù)程序
void int0() interrupt 0
{
if (EncoderB)
{
EncoderCount++; //正轉(zhuǎn)
}else
{
EncoderCount--; //反轉(zhuǎn)
}
if (EncoderCount==360)
Motor_Stop();
}
復(fù)制代碼
所有資料51hei提供下載:
42步進(jìn)電機(jī) 編碼器.rar
(32.23 KB, 下載次數(shù): 489)
2018-5-15 10:03 上傳
點(diǎn)擊文件名下載附件
51單片機(jī)+增量式編碼器+42步進(jìn)電機(jī)
下載積分: 黑幣 -5
作者:
7454679
時間:
2018-7-29 00:29
好東西
作者:
15942379927
時間:
2018-10-21 20:26
好貼 頂上去
作者:
lindeijun1
時間:
2018-10-22 15:36
好東西,頂一頂!!
作者:
liliqun
時間:
2018-11-25 11:39
學(xué)習(xí)學(xué)習(xí)
作者:
hongaa
時間:
2018-11-25 12:08
好東西,頂一頂!!
作者:
letter1996
時間:
2018-11-26 18:58
謝謝大佬
作者:
letter1996
時間:
2018-11-26 19:01
謝謝大佬的分享
作者:
夢園心田
時間:
2019-1-22 01:34
太強(qiáng)了。。
作者:
gdatgb
時間:
2019-1-24 14:34
謝謝大佬的分享,學(xué)習(xí) 學(xué)習(xí)!!
作者:
gdatgb
時間:
2019-1-24 14:35
有沒有電路圖啊????
作者:
電子123456
時間:
2019-5-4 16:30
樓主用的是八拍的嗎?
作者:
鉆研旋律
時間:
2019-5-21 22:16
頂上去,學(xué)習(xí)了
作者:
肖蠢蠢
時間:
2019-6-10 17:03
大哥,沒圖?
作者:
1606050540011
時間:
2019-6-10 19:14
很給力!
作者:
鵬博士PBs
時間:
2019-6-10 21:43
42步進(jìn)電機(jī)用的是多少拍的啊
作者:
Tars
時間:
2019-6-18 12:01
感謝大佬!!!!!!!!!!!!!
作者:
ttaniscy
時間:
2019-8-5 10:22
這個是好東西,謝謝分享
作者:
lizhidi100
時間:
2019-10-30 19:04
謝謝分享
作者:
hulilanyua
時間:
2019-11-8 23:58
有沒有電路圖啊????
作者:
wdliming
時間:
2019-11-14 13:06
謝謝分享
作者:
xyllovezuu
時間:
2020-5-18 12:42
學(xué)習(xí)了,感謝樓主
作者:
xllin
時間:
2020-5-20 10:39
謝謝分享
作者:
yyzf998
時間:
2020-7-2 06:39
寶貝不錯,好好學(xué)習(xí)了,謝謝樓主!
作者:
lilei12306
時間:
2021-4-14 23:10
有仿真沒?
作者:
中國紅
時間:
2021-12-27 14:32
不完全,是不是要下載壓縮包?
作者:
快樂眼淚
時間:
2023-8-30 21:59
謝謝樓主!有沒有電路圖?
作者:
kevintang
時間:
2024-1-16 19:32
這個是好東西,謝謝分享。
作者:
35462
時間:
2024-10-24 13:09
有圖嗎,要怎么接線
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
爱操影视
|
日韩精品一区二区三区中文在线
|
久久综合久
|
国产一级片一区二区三区
|
久久免费视频观看
|
羞羞视频网站
|
中文在线a在线
|
欧美亚洲日本
|
日本h片在线观看
|
九九九久久国产免费
|
黄色毛片视频
|
a级片在线观看
|
日日夜夜精品视频
|
国产不卡视频
|
美女日批免费视频
|
成人精品
|
国产精品毛片无码
|
国产精品视频免费观看
|
91久久精品日日躁夜夜躁国产
|
亚洲一区二区三区免费视频
|
五月激情婷婷在线
|
国产精品欧美一区二区三区不卡
|
欧美成ee人免费视频
|
激情欧美一区二区三区中文字幕
|
欧美片网站免费
|
日韩毛片视频
|
午夜欧美
|
成人乱人乱一区二区三区软件
|
黄色大片免费播放
|
www国产亚洲精品久久网站
|
天天曰天天干
|
国产乱码久久久
|
www.啪啪.com
|
xxx国产精品视频
|
成人av激情
|
久久av.com
|
羞羞视频免费在线观看
|
国产我和子的乱视频网站
|
亚洲一区精品在线
|
黄色在线观看网址
|
婷婷色在线播放
|