-
发射部分
#include
sbit P2_2=P2^2;
sbit
signalBit=P2^1;
//
发送信号标志位
sbit LED=P3^7; //
使能信号位,将
E
位定义为
P2.2
引
脚
unsigned char
irData[]={0x14,0xeb,0xf0,0x0f};
//
存放所有的控制码
unsigned char
mazhi[]={0x33,0x22,0xeb,0x14};
unsigned
char key,send_flag=0;
void
SendIRdata(unsigned char irdata[4]);
//
红外发射函数
void anjian_send(unsigned char flag);
void delay(unsigned int
tt)
//
延时函数
{
while(--tt);
}
void main(void)
{
signalBit=0;
P2_2= 0;
TMOD=0x12;//
设定定时器
1
和
0
工作方式为
1
和
2
EX1=1;
IT1=1;
ET0 =1; //
定时器
0
中断允许
ET1 =1;
TH0= 0xf4;
TL0= 0xf4; //
设定时值
0
为
38K
也就是每隔
13us
中断一次
TR0= 0;//
先关闭定时器
0
TR1= 0;
IP=0X01;
EA=1; //
允许
CPU
中断
LED=0;
while(1)
{
P1=0XF0;
if(send_flag==1)
{
anjian_send(key);
send_flag=0;
}
}
}
void anjian_send(unsigned char flag)
{
unsigned char zhi=flag;
switch(zhi)
周期为
26us
{
case 0xee:
SendIRdata(irData); break;
case 0xbe: SendIRdata(irData); break;
case 0xde: SendIRdata(irData); break;
case 0x7e: SendIRdata(irData); break;
case 0xed: SendIRdata(irData); break;
case 0xdd: SendIRdata(irData); break;
case 0xbd: SendIRdata(irData); break;
case 0x7d: SendIRdata(irData); break;
case 0xeb: SendIRdata(irData); break;
case 0xdb: SendIRdata(irData); break;
case 0xbb: SendIRdata(mazhi); break;
case 0x7b: SendIRdata(mazhi); break;
case 0xe7: SendIRdata(mazhi); break;
case 0xd7: SendIRdata(mazhi); break;
case 0xb7: SendIRdata(mazhi); break;
case 0x77:
SendIRdata(mazhi); break;
}
}
/*******
定时器
1
中断处理
***********/
void
isr_T1(void) interrupt 3
{
}
/*******
定时器
0
中断处理
38K
载波发生器
***********/
void timeint(void) interrupt 1
{
P2_2=~P2_2;
//
p>
产生
38k
的载波信号
}
/****************
中断
1
键盘的扫描
********************/
void Int1(void) interrupt 2
{
unsigned char l,h;
P1=0XF0;
l=P1;
l=l&0xf0;
if(l!=0xf0)
{
delay(10);
if(l!=0xf0)
{
l=P1&0xf0;
l=l|0x0f;
P1=l;
h=P1;
h=h&0x0f;
l=l&0xf0;
key=h+l;
send_flag=1;
LED=~LED;
}
}
}
/*********
红外发射函数
************/
void SendIRdata(unsigned char *mData)
{
unsigned char i,j;
unsigned char test[4];
for(i=0;i<4;i++)
test[i]=mData[i];
TR0=1; //
开定时器
T0 <
/p>
输出
38K
载波
/*********
发送
9ms
的高电平
************/
TH1=0XDF;
//
装入初值设置波延时为
9ms
TL1=0XE3;
TR1=1;
p>
//
启动
T1
工作
定时所需时间
signalBit=1;
//
发送信号
while(!TF1);
TF1=0;
/*********
发送
4.
5ms
的低电平
*************/
TH1=0xef;
TL1=0xf0;
signalBit=0;
while(!TF1);
TF1=0;
/*********
发送
用户码
控制码
控制反码
***********/
for(j=0;j<4;j++)
//
发送十六位地址的前八位
{
for(i=0;i<8;i++)
{
//
先发送
0.565ms
的
38KHZ
红外波(
即编码中
0.565ms
的高电平)
TH1=0XFE;
TL1=0X70;
signalBit=1;
while(!TF1);
TF1=0;
//
停止
发送红外信号(即编码中的高电平)
if(test[j]&0x01) //
判断二进制数个位为
1
还是
0
{
TH1=0XFA;
//
//1
为宽的低电平
,
持续时间
1.685ms
TL1=0X30;
}
else
{
TH1=0XFE;
//0
为窄的低电平
,
持
续时间
0.56ms
TL1=0x50;
}
signalBit=0;
while(!TF1);
TF1=0;
test[j]=test[j]>>1;
}
}
TR1=0;
//
发送停止位
关闭定时器
T0
signalBit=1;
delay(100);
signalBit=0;
TR0=0;
//
关闭定时器
T1
}
检测部分
#include
包含单片机寄存器的头文件
#define uchar unsigned char
#define uint
unsigned int
sbit IR=P3^2; /
/
将
IR
位定义为
P3.2
引脚
sbit
rs=P2^4; //
寄存器选择位,将
RS
位定义为
P2.0
引脚
sbit rw=P2^5; //
读写选择位,将
RW
位定义为
P2.1
引
脚
sbit e=P2^6; //
使能信号位,将
E
位定义为
P2.2<
/p>
引脚
sbit LED=P2^0;
//
使能信号位,将
E
位定义为
P2.2
引脚
unsigned char code string[ ]=
unsigned char code
smg[]=
unsigned
char code
MA[]=
unsigned
char a[4];
//
储存用户码、用户反码与键数据码、键数据反码
unsigned int LowTime,HighTime;
//
储存高、低电平的宽度
0-65535
void delay(unsigned
int tt)
{
while(--tt);
}
void w_cmd(unsigned char
dd)
-
-
-
-
-
-
-
-
-
上一篇:英语词汇学自考题-19讲课讲稿
下一篇:生涯规划档案