欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標(biāo)題:
51單片機(jī)紅外遙控控制馬達(dá)源碼
[打印本頁]
作者:
15622633856
時(shí)間:
2018-5-10 22:19
標(biāo)題:
51單片機(jī)紅外遙控控制馬達(dá)源碼
圖片1.png
(136.21 KB, 下載次數(shù): 47)
下載附件
2018-5-10 22:17 上傳
單片機(jī)源程序如下:
/* 模仿人機(jī)界面 通過遙控器控制馬達(dá)
其狀態(tài)通過LCD顯示
通過按第一個(gè)按鍵可以控制馬達(dá)的啟動(dòng)和停止*/
#include<reg52.h>
typedef unsigned char uint8;
typedef unsigned int uint16;
sbit rs=P2^6;
sbit rw=P2^5;
sbit e=P2^7;
uint8 d1[8]=" RED IR ";
uint8 d2[12]="MOTO STATE: ";
uint8 num[16]="0123456789ABCDEF";
uint8 a[]={0x2d,0x03,0x17,0x02,0x2a,0x00,0x14,0x01};//A-AB-B-B`A-`A-`A`B-`B-`BA
uint8 irtime; //接收時(shí)間
uint8 startflag; //開始檢測
uint8 bitnum; //bit位數(shù)
uint8 irdata[33]; //寄存沒有個(gè)bit的時(shí)間
uint8 irreceok; //接收完成標(biāo)志位
uint8 ircode[4]; //將接收的四個(gè)字節(jié)數(shù)據(jù)保存
uint8 irprosok; //接收數(shù)據(jù)處理標(biāo)志位
uint8 irdisp[8]; //將四個(gè)字節(jié)的16進(jìn)制通過轉(zhuǎn)換變成十進(jìn)制存儲(chǔ)
uint8 dat1,dat2;
uint8 keynum;
uint8 moto;
void delay(uint16 i)
{
while(i--);
}
void lcdwrc(uint8 c)
{
delay(1000);
rs=0;
rw=0;
e=0;
P0=c;
e=1;
delay(10);
e=0;
/*
P0=c<<4;
e=0;
*/
}
void lcdwrd(uint8 dat)
{
delay(1000);
rs=1;
rw=0;
e=0;
P0=dat;
e=1;
delay(10);
e=0;
/*
P0=dat<<4;
e=0;
*/
rs=0;
}
void lcdinit()
{
delay(1000);
/*
lcdwrc(0x32);
lcdwrc(0x28);
lcdwrc(0x28);
*/
lcdwrc(0x38);
lcdwrc(0x38);
lcdwrc(0x38);
lcdwrc(0x06);
lcdwrc(0x0c);
lcdwrc(0x01);
}
void int0init()
{
EA=1;
EX0=1;
IT0=1;
}
void time0init()
{
TMOD=0X02; //設(shè)置定時(shí)器0模式2.該模式為自動(dòng)裝載模式
TH0=0X00;
TL0=0X00;//設(shè)定計(jì)數(shù)初值,每當(dāng)TL0計(jì)數(shù)到255時(shí),TH0將把自己的數(shù)據(jù)給TL0,又重新計(jì)數(shù)
TR0=1;
ET0=1;
EA=1;
}
void irpros() //紅外接收數(shù)據(jù)處理 ,區(qū)分是數(shù)據(jù)0還是1
{
uint8 i,j,value;
uint8 k=1; //引導(dǎo)碼去掉,所以令k=1;
for(j=0;j<4;j++) //取出了一幀數(shù)據(jù)中的四個(gè)字節(jié)數(shù)據(jù)
{
for(i=0;i<8;i++) //取出了一個(gè)字節(jié)的數(shù)據(jù)
{
value>>=1;
if(irdata[k]>6)
{
value=value|0x80;
}
k++;
}
ircode[j]=value;
}
irprosok=1;
}
void irwork() //將四個(gè)字節(jié)的數(shù)據(jù)轉(zhuǎn)換成10進(jìn)制數(shù)顯示
{
irdisp[0]=ircode[0]/16;//顯示高位
irdisp[1]=ircode[0]%16;//顯示低位
irdisp[2]=ircode[1]/16;
irdisp[3]=ircode[1]%16; //同一個(gè)遙控器此2個(gè)字節(jié)的引導(dǎo)碼數(shù)據(jù)是不會(huì)改變的,改變的只是數(shù)據(jù)碼及反碼
irdisp[4]=ircode[2]/16;
irdisp[5]=ircode[2]%16;
irdisp[6]=ircode[3]/16;
irdisp[7]=ircode[3]%16;
dat1=irdisp[4];
dat2=irdisp[5];
keynum++;
}
void display()
{
uint8 i;
lcdwrc(0x00+0x80);
for(i=0;i<8;i++)
{
lcdwrd(d1[i]);
}
for(i=4;i<6;i++)
{
lcdwrd(num[irdisp[i]]);
}
lcdwrc(0x40+0x80);
for(i=0;i<12;i++)
{
lcdwrd(d2[i]);
}
if(moto==1) //馬達(dá)狀態(tài)顯示
{
lcdwrd('O');
lcdwrd('N');
}
else
{
lcdwrd('O');
lcdwrd('F');
lcdwrd('F');
}
}
void motopros()
{
uint8 i;
uint16 j=200;
if((dat1==4)&&(dat2==5)&&(keynum==1)) //按下第一次按鍵開馬達(dá)
{
dat1=0;
dat2=0;
moto=1;
while(j--)
{
for(i=0;i<8;i++)
{
P1=a[i];
delay(75);
}
}
}
if((dat1==4)&&(dat2==5)&&(keynum>=2)) //按下第二次此按鍵時(shí)關(guān)閉馬達(dá)
{
dat1=0;
dat2=0;
keynum=0;
moto=0;
P1=0xff;
}
}
void main()
{
lcdinit();
int0init();
time0init();
while(1)
{
if(irreceok)
{
irreceok=0;
irpros();
if(irprosok)
{
irwork();
}
}
motopros();
display();
}
}
void time0() interrupt 1
{
irtime++;//每進(jìn)來一次就說明定時(shí)時(shí)間為256us;
}
void init0() interrupt 0
{
if(startflag)
{
if(irtime>32)//檢測引導(dǎo)碼,求法是用引導(dǎo)碼時(shí)間除以一次計(jì)數(shù)時(shí)間,看看要多少次
{
bitnum=0;
}
irdata[bitnum]=irtime;
irtime=0;
bitnum++;
if(bitnum==33)
{
bitnum=0;
irreceok=1;//一幀紅外數(shù)據(jù)接收完成標(biāo)志
}
}
else
{
startflag=1;//將開始標(biāo)志位置1,等到下次進(jìn)入中斷即可進(jìn)入if語句
irtime=0;//將開始之前的計(jì)數(shù)器時(shí)間清零。等到下次進(jìn)入中斷的時(shí)候才是引導(dǎo)碼真正的時(shí)間
}
}
復(fù)制代碼
所有資料51hei提供下載:
紅外遙控控制馬達(dá).zip
(36.84 KB, 下載次數(shù): 36)
2018-5-10 22:17 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
lantian28
時(shí)間:
2018-5-13 00:25
是否控制直流電機(jī)嗎?
作者:
nnngtd
時(shí)間:
2020-12-15 19:25
想問一下,如果我想紅外遙控實(shí)現(xiàn)電機(jī)轉(zhuǎn)動(dòng)并調(diào)速,該如何用代碼實(shí)現(xiàn)
歡迎光臨 (http://m.raoushi.com/bbs/)
Powered by Discuz! X3.1