|
|
//********************************************單片機(jī)紅外發(fā)射*******************************************
#include "reg52.h"
sbit ir=P2^7;//紅外發(fā)射管控制腳,使用24M晶振
sbit ka=P2^0;
sbit kb=P2^1;
unsigned int count, set_count; //中斷計(jì)數(shù),設(shè)定中斷次數(shù)
bit irflag,keyflag; //紅外發(fā)送標(biāo)志位,按鍵標(biāo)志位
unsigned char irsys[]={0x00,0xff};//16位用戶碼
unsigned char irdata,ircode; //發(fā)送的紅外數(shù)據(jù)
//---------------------------------------------------------------------------
void delay(unsigned int a)//延時(shí)約1ms,晶振24M ,此處延時(shí)不需很精確
{
unsigned char i;
while(--a!=0)
for(i=125;i>0;i--);
}
//---------------------------------------------------------------------------
void ir_sendbyte() //紅外發(fā)送一個(gè)字節(jié)數(shù)據(jù)
{
unsigned char i;
for(i=0;i<8;i++) //發(fā)送8位數(shù)據(jù)
{
set_count=35;//35; //發(fā)送編碼中的0.56ms高電平
irflag=1; //啟動(dòng)紅外發(fā)射二極管發(fā)射
count=0; //中斷計(jì)數(shù)先清0
TR0=1; //開(kāi)啟定時(shí)器0
while(count<set_count); //等待發(fā)送完
TR0=0; //關(guān)閉定時(shí)器0
if(ircode&0x01) set_count=130;//130; //判斷紅外編碼最低位,若為1則1.69ms的低電平
else set_count=35;//35; //為0則0.565ms的低電平
irflag=0; //低電平則不發(fā)射
count=0; //中斷計(jì)數(shù)清0
TR0=1; //開(kāi)啟定時(shí)器0
while(count<set_count); //等待發(fā)送完
TR0=0; //關(guān)閉定時(shí)器0
ircode=ircode>>1; //將數(shù)據(jù)右移,即從低位到高位發(fā)送
}
TR0=0;
set_count=0;
count=0;
ir=1; //發(fā)射完了關(guān)閉紅外發(fā)射二極管
}
//---------------------------------------------------------------------------
void ir_send() //發(fā)送紅外數(shù)據(jù)
{
set_count=672;//672; //發(fā)送編碼中的引導(dǎo)碼(9ms高電平+4.5ms低電平)
irflag=1; //啟動(dòng)紅外發(fā)射二極管發(fā)射
count=0; //中斷計(jì)數(shù)清0
TR0=1;
while(count<set_count);
TR0=0;
set_count=336;//336; //發(fā)送編碼中的4.5ms低電平
irflag=0; //低電平則不發(fā)射
count=0;
TR0=1;
while(count<set_count); //等待發(fā)送完
TR0=0;
ircode=irsys[0]; //發(fā)送16位用戶碼的前1-8位
ir_sendbyte();
ircode=irsys[1]; //發(fā)送16位用戶碼的前9-16位
ir_sendbyte();
ircode=irdata; //發(fā)送8位數(shù)據(jù)碼
ir_sendbyte();
ircode=~irdata; //發(fā)送8位數(shù)據(jù)反碼
ir_sendbyte();
}
//---------------------------------------------------------------------------
void timer0_init() //定時(shí)器初始化
{
EA=1;
TMOD=0x02; //定時(shí)0 8位自動(dòng)重裝模式
ET0=1;
TH0=0xf3;//0xf3; //定時(shí)13us,38K紅外矩形波,晶振24M (//后為12M晶振下的數(shù)值)
TL0=0xf3;
}
//---------------------------------------------------------------------------
void main()
{
P1=0x00;
timer0_init(); //定時(shí)0初始化
count=0; //中斷計(jì)數(shù)先清0
irflag=0; //紅外發(fā)射標(biāo)志先置0
irdata=9; //1 //55 55 55 A9
while(1) //2 //AA 55 55 53
{ //4 //55 55 55 04
ir_send(); //發(fā)送紅外編碼 //5 //55 55 55 49
delay(50); //6 //00 55 55 0A
} //7 //00 55 55 15
} //8 //54 55 55 4D
//----------------------------------------------------------------------- //9 //00 55 55 11
void timer0() interrupt 1 //定時(shí)器0中斷 //10 //A8 55 55 13
{
count++;
if(irflag==1) ir=~ir; //有發(fā)射標(biāo)志,則發(fā)射38khz的矩形波
else ir=1; //否則不發(fā)射,即相當(dāng)于發(fā)射編碼中的低電平
}
|
-
image022.jpg
(47.95 KB, 下載次數(shù): 34)
下載附件
2019-10-5 19:52 上傳
-
image012.jpg
(42.82 KB, 下載次數(shù): 44)
下載附件
2019-10-5 19:52 上傳
-
image006.jpg
(39.52 KB, 下載次數(shù): 33)
下載附件
2019-10-5 19:52 上傳
-
硬件原理圖.jpg
(175.22 KB, 下載次數(shù): 37)
下載附件
2019-10-5 19:51 上傳
-
image024.jpg
(46.34 KB, 下載次數(shù): 36)
下載附件
2019-10-5 19:52 上傳
-
image026.jpg
(45.54 KB, 下載次數(shù): 36)
下載附件
2019-10-5 19:52 上傳
-
-
履帶式蔽障車(chē).rar
2019-10-5 19:53 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
17.82 MB, 下載次數(shù): 19, 下載積分: 黑幣 -5
-
-
實(shí)例二、直流電機(jī)控制.rar
2019-10-5 19:53 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
78.8 KB, 下載次數(shù): 22, 下載積分: 黑幣 -5
|