欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
51單片機(jī)紅外控制步進(jìn)電機(jī)代碼
[打印本頁]
作者:
ssk7793
時間:
2018-11-13 06:57
標(biāo)題:
51單片機(jī)紅外控制步進(jìn)電機(jī)代碼
單片機(jī)源程序如下:
#include<reg52.h> //包含頭文件,一般情況不需要改動,頭文件包含特殊功能寄存器的定義
#define uchar unsigned char
/*********************************************************************************/
sbit IR=P3^2; //紅外接口標(biāo)志
uchar i;
unsigned char irtime; //紅外用全局變量
bit irpro_ok,irok;
unsigned char IRcord[4];
unsigned char irdata[33];
/*********************************************************************************/
sbit A1=P1^0; //定義步進(jìn)電機(jī)連接端口 P1^0-P1^3
sbit B1=P1^1;
sbit C1=P1^2;
sbit D1=P1^3;
#define Coil_AB1 {A1=1;B1=1;C1=0;D1=0;}//AB相通電,其他相斷電
#define Coil_BC1 {A1=0;B1=1;C1=1;D1=0;}//BC相通電,其他相斷電
#define Coil_CD1 {A1=0;B1=0;C1=1;D1=1;}//CD相通電,其他相斷電
#define Coil_DA1 {A1=1;B1=0;C1=0;D1=1;}//D相通電,其他相斷電
#define Coil_OFF {A1=0;B1=0;C1=0;D1=0;}//全部斷電
unsigned int o;
unsigned char Speed;
/*------------------------------------------------
uS延時函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值
unsigned char 是定義無符號字符變量,其值的范圍是
0~255 這里使用晶振12M,精確延時請使用匯編,大致延時
長度如下 T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{
while(--t);
}
/*------------------------------------------------
mS延時函數(shù),含有輸入?yún)?shù) unsigned char t,無返回值
unsigned char 是定義無符號字符變量,其值的范圍是
0~255 這里使用晶振12M,精確延時請使用匯編
------------------------------------------------*/
void DelayMs(unsigned char t)
{
while(t--)
{
//大致延時1mS
DelayUs2x(245);
DelayUs2x(245);
}
}
/*********************************************************************************/
void Ir_work(void);
void Ircordpro(void);
void tim0_isr (void) interrupt 1 using 1
{
irtime++; //用于計數(shù)2個下降沿之間的時間
}
void EX0_ISR (void) interrupt 0 //外部中斷0服務(wù)函數(shù)
{
static unsigned char i; //接收紅外信號處理
static bit startflag; //是否開始處理標(biāo)志位
if(startflag)
{
if(irtime<63&&irtime>=33)//引導(dǎo)碼 TC9012的頭碼,9ms+4.5ms
i=0;
irdata[i]=irtime;//存儲每個電平的持續(xù)時間,用于以后判斷是0還是1
irtime=0;
i++;
if(i==33)
{
irok=1;
i=0;
}
}
else
{
irtime=0;
startflag=1;
}
}
void delay(uchar z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=120;y>0;y--);
}
void TIM0init(void)//定時器0初始化
{
TMOD=0x02;//定時器0工作方式2,TH0是重裝值,TL0是初值
TH0=0x00; //重載值
TL0=0x00; //初始化值
ET0=1; //開中斷
TR0=1;
}
void EX0init(void)
{
IT0 = 1; //指定外部中斷0下降沿觸發(fā),INT0 (P3.2)
EX0 = 1; //使能外部中斷
EA = 1; //開總中斷
}
void Ir_work(void)//紅外鍵值散轉(zhuǎn)程序
{
switch(IRcord[2])//判斷第三個數(shù)碼值
{
case 0x44:
Speed=2; //數(shù)字越小,轉(zhuǎn)速越大,力矩越小
o=256;//旋轉(zhuǎn)一周時間為512,這里改成紅外按住才轉(zhuǎn)動,所以是100
Coil_OFF //步進(jìn)電機(jī)參數(shù)
while(o--) //正向
{
Coil_AB1 //遇到Coil_AB1 用{A1=1;B1=1;C1=0;D1=0;}代替
DelayMs(Speed); //改變這個參數(shù)可以調(diào)整電機(jī)轉(zhuǎn)速 ,
Coil_BC1
DelayMs(Speed);
Coil_CD1
DelayMs(Speed);
Coil_DA1
DelayMs(Speed);
}
break;//電源 顯示相應(yīng)的按鍵值
case 0x40:
Speed=2; //數(shù)字越小,轉(zhuǎn)速越大,力矩越小
o=256;//旋轉(zhuǎn)一周時間為512,這里改成紅外按住才轉(zhuǎn)動,所以是100
Coil_OFF //步進(jìn)電機(jī)參數(shù)
while(o--)//反向
{
Coil_DA1 //遇到Coil_AB1 用{A1=1;B1=1;C1=0;D1=0;}代替
DelayMs(Speed); //改變這個參數(shù)可以調(diào)整電機(jī)轉(zhuǎn)速 ,
Coil_CD1
DelayMs(Speed);
Coil_BC1
DelayMs(Speed);
Coil_AB1
DelayMs(Speed);
}
break;//電源 顯示相應(yīng)的按鍵值
case 0x07:
Speed=2; //數(shù)字越小,轉(zhuǎn)速越大,力矩越小
o=20;//旋轉(zhuǎn)一周時間為512,這里改成紅外按住才轉(zhuǎn)動,所以是100
Coil_OFF //步進(jìn)電機(jī)參數(shù)
while(o--) //正向
{
Coil_AB1 //遇到Coil_AB1 用{A1=1;B1=1;C1=0;D1=0;}代替
DelayMs(Speed); //改變這個參數(shù)可以調(diào)整電機(jī)轉(zhuǎn)速 ,
Coil_BC1
DelayMs(Speed);
Coil_CD1
DelayMs(Speed);
Coil_DA1
DelayMs(Speed);
}
break;//電源 顯示相應(yīng)的按鍵值
case 0x15:
Speed=2; //數(shù)字越小,轉(zhuǎn)速越大,力矩越小
o=20;//旋轉(zhuǎn)一周時間為512,這里改成紅外按住才轉(zhuǎn)動,所以是100
Coil_OFF //步進(jìn)電機(jī)參數(shù)
while(o--)//反向
{
Coil_DA1 //遇到Coil_AB1 用{A1=1;B1=1;C1=0;D1=0;}代替
DelayMs(Speed); //改變這個參數(shù)可以調(diào)整電機(jī)轉(zhuǎn)速 ,
Coil_CD1
DelayMs(Speed);
Coil_BC1
DelayMs(Speed);
Coil_AB1
DelayMs(Speed);
}
break;//電源 顯示相應(yīng)的按鍵值
default:break;
}
irpro_ok=0;//處理完成標(biāo)志
}
void Ircordpro(void)//紅外碼值處理函數(shù)
{
unsigned char i, j, k,cord,value;
k=1;
for(i=0;i<4;i++) //處理4個字節(jié)
{
for(j=1;j<=8;j++) //處理1個字節(jié)8位
{
cord=irdata[k];
if(cord>7)//大于某值為1,這個和晶振有絕對關(guān)系,這里使用12M計算,此值可以有一定誤差
value=value|0x80;
if(j<8)
{
value>>=1;
}
k++;
}
IRcord[i]=value;
value=0;
}
irpro_ok=1;//處理完畢標(biāo)志位置1
}
void main(void)
{
EX0init(); //初始化外部中斷
TIM0init();//初始化定時器
while(1)//主循環(huán)
{
if(irok) //如果接收好了進(jìn)行紅外處理
{
Ircordpro();
irok=0;
}
if(irpro_ok) //如果處理好后進(jìn)行工作處理,如按對應(yīng)的按鍵后顯示對應(yīng)的數(shù)字等
{
Ir_work();
}
}
}
復(fù)制代碼
所有資料51hei提供下載:
51紅外控制步進(jìn)電機(jī).zip
(29.21 KB, 下載次數(shù): 101)
2018-11-13 06:57 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
xhiu
時間:
2018-12-23 13:52
感謝分享~~
作者:
都市郎
時間:
2019-8-15 22:09
感謝樓主分享!
作者:
ty417502873
時間:
2019-8-19 21:37
為什么這個程序放我這里用不了。我就是用了P3^3口用的接收。。。。
作者:
luolinlin12121
時間:
2020-11-27 21:43
這個是用慧凈電子開發(fā)板嗎
作者:
安安說方法
時間:
2020-12-7 21:55
怎樣接線呀
作者:
intiiiii
時間:
2021-7-14 17:52
這是慧凈電子的開發(fā)板吧 謝謝樓主
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1