久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
51單片機簡易紅外控制電機的程序設(shè)計
[打印本頁]
作者:
hei51a
時間:
2021-6-27 15:43
標題:
51單片機簡易紅外控制電機的程序設(shè)計
通過紅外遙控控制直流電機是否轉(zhuǎn)動并在LCD1602上顯示
單片機源程序如下:
/*
實驗說明:
根據(jù)自己使用的LCD1602是否帶有轉(zhuǎn)接板,如果帶有轉(zhuǎn)接板的即為4位,需在LCD.H頭文件中
將宏#define LCD1602_4PINS打開,我們這里使用的LCD1602是8位,所以默認將該宏注釋。
實驗接線:
1,LCD1602液晶模塊-->單片機管腳
參考LCD1602液晶顯示實驗接線(開發(fā)攻略內(nèi)在對應(yīng)的實驗章節(jié)內(nèi)實驗現(xiàn)象有接線說明)
2,紅外接收模塊-->單片機管腳
參考紅外遙控實驗接線(開發(fā)攻略內(nèi)在對應(yīng)的實驗章節(jié)內(nèi)實驗現(xiàn)象有接線說明)
3,直流電機模塊-->單片機管腳
IN1-->P10(參考直流電機實驗接線)
實驗現(xiàn)象:
LCD1602顯示遙控器鍵值,并且顯示電機狀態(tài)(ON/OFF),通過按第一個按鍵可以控制馬達的啟動和停止
*/
#include<reg51.h>
#include"lcd.h"
typedef unsigned char uint8;
typedef unsigned int uint16;
sbit moto=P1^0;
uint8 d1[8]=" RED IR ";
uint8 d2[12]="MOTO STATE: ";
uint8 num[16]="0123456789ABCDEF";
uint8 irtime; //接收時間
uint8 startflag; //開始檢測
uint8 bitnum; //bit位數(shù)
uint8 irdata[33]; //寄存沒有個bit的時間
uint8 irreceok; //接收完成標志位
uint8 ircode[4]; //將接收的四個字節(jié)數(shù)據(jù)保存
uint8 irprosok; //接收數(shù)據(jù)處理標志位
uint8 irdisp[8]; //將四個字節(jié)的16進制通過轉(zhuǎn)換變成十進制存儲
uint8 dat1,dat2;
uint8 keynum;
uint8 motoflag;
void delay(uint16 i)
{
while(i--);
}
void lcdwrc(uint8 c)
{
LcdWriteCom(c);
}
void lcdwrd(uint8 dat)
{
LcdWriteData(dat);
}
void lcd_init()
{
LcdInit();
}
void int0init()
{
EA=1;
EX0=1;
IT0=1;
}
void time0init()
{
TMOD=0X02; //設(shè)置定時器0模式2.該模式為自動裝載模式
TH0=0X00;
TL0=0X00;//設(shè)定計數(shù)初值,每當TL0計數(shù)到255時,TH0將把自己的數(shù)據(jù)給TL0,又重新計數(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ù)中的四個字節(jié)數(shù)據(jù)
{
for(i=0;i<8;i++) //取出了一個字節(jié)的數(shù)據(jù)
{
value>>=1;
if(irdata[k]>6)
{
value=value|0x80;
}
k++;
}
ircode[j]=value;
}
irprosok=1;
}
void irwork() //將四個字節(jié)的數(shù)據(jù)轉(zhuǎn)換成10進制數(shù)顯示
{
irdisp[0]=ircode[0]/16;//顯示高位
irdisp[1]=ircode[0]%16;//顯示低位
irdisp[2]=ircode[1]/16;
irdisp[3]=ircode[1]%16; //同一個遙控器此2個字節(jié)的引導(dǎo)碼數(shù)據(jù)是不會改變的,改變的只是數(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(motoflag==1) //馬達狀態(tài)顯示
{
lcdwrd('O');
lcdwrd('N');
lcdwrd(' ');
}
else
{
lcdwrd('O');
lcdwrd('F');
lcdwrd('F');
}
}
void motopros()
{
if((dat1==4)&&(dat2==5)&&(keynum==1)) //按下第一次按鍵開馬達
{
dat1=0;
dat2=0;
motoflag=1;
moto=1;
}
if((dat1==4)&&(dat2==5)&&(keynum>=2)) //按下第二次此按鍵時關(guān)閉馬達
{
dat1=0;
dat2=0;
keynum=0;
motoflag=0;
moto=0;
}
}
void main()
{
moto=0;
lcd_init();
int0init();
time0init();
while(1)
{
if(irreceok)
{
irreceok=0;
irpros();
if(irprosok)
{
irwork();
}
}
motopros();
display();
}
}
void time0() interrupt 1
{
irtime++;//每進來一次就說明定時時間為256us;
}
void init0() interrupt 0
{
if(startflag)
{
if(irtime>32)//檢測引導(dǎo)碼,求法是用引導(dǎo)碼時間除以一次計數(shù)時間,看看要多少次
{
bitnum=0;
}
irdata[bitnum]=irtime;
irtime=0;
bitnum++;
if(bitnum==33)
{
bitnum=0;
irreceok=1;//一幀紅外數(shù)據(jù)接收完成標志
}
}
else
{
startflag=1;//將開始標志位置1,等到下次進入中斷即可進入if語句
irtime=0;//將開始之前的計數(shù)器時間清零。等到下次進入中斷的時候才是引導(dǎo)碼真正的時間
}
}
復(fù)制代碼
所有代碼51hei提供下載:
電機遠程控制--紅外遙控控制.zip
(26.1 KB, 下載次數(shù): 26)
2021-6-27 15:42 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
波多野结衣一区二区三区
|
国产成人精品一区
|
91精品国产综合久久精品
|
国产一区二区三区www
|
日韩中文字幕久久
|
一级毛片观看
|
热re99久久精品国99热观看
|
国产在线观看av
|
亚洲精品视频一区
|
综合国产
|
九色av
|
四虎成人免费电影
|
日韩视频a
|
欧洲精品视频一区
|
国产综合网站
|
国产精品精品视频一区二区三区
|
亚洲免费网址
|
成人在线观看免费视频
|
色综合99
|
国产成人在线播放
|
久久久不卡网国产精品一区
|
国产视频综合
|
午夜影视网
|
色婷婷一区二区三区四区
|
色性av
|
久草视频观看
|
视频一区二区在线
|
91精品国产乱码久久久久久
|
国产传媒视频在线观看
|
成人欧美一区二区三区在线观看
|
亚洲一区久久
|
大香在线伊779
|
国产97久久
|
国产在线精品一区二区
|
羞羞在线观看视频
|
91影片
|
密室大逃脱第六季大神版在线观看
|
精品欧美一区二区精品久久
|
一级做受毛片免费大片
|
成人精品久久日伦片大全免费
|
久久国产一区
|