📄 hong_fa.c
字号:
#include"reg51.h"
#include"intrins.h"
#define uchar unsigned char
#define uint unsigned int
#define key0 P0
#define key1 P2
//
sbit remoteout=P3^5; //遥控输出口
//
uchar temp;//keyscan();
uint i,j;
uchar flag=0,key=0,keyvol; //"flag"连发码发射标志位,"key"按键按下标志位
uchar code keyv[8]={1,2,4,8,16,32,64,128};
bit flag1;
//
/************100us延时程序********************/
delay(uint t)
{
TMOD=0x22;
TR0=1;
while(t!=0)
{
TH0=0x9b;
TL0=0x9b;
while(TF0!=1);
TF0=0;
t--;
}
TR0=0;
}
//
/************初始化函数*************/
clearmen()
{
remoteout=0; //关遥控输出
IE=0x00;
IP=0x01;
TMOD=0x22;
TH1=0xf3; //定时方式2
TL1=0xf3; //38KHZ初值
EA=1;
}
//
/**************连发码发射程序*************/
alltimesed()
{
for(j=0;j<9;j++)
{
ET1=1;
TR1=1;
delay(90);
ET1=0;
TR1=0;
remoteout=0;//38KHZ发9ms
delay(30);//3ms的结束码
}
}
//
/**************编码0发射程序**************/
sed0()
{
ET1=1;
TR1=1;
delay(6);//发射0.6ms
ET1=0;
TR1=0;
remoteout=0;
delay(6);//"0"持续1.2ms
}
//
/*************编码1发射程序***************/
sed1()
{
ET1=1;
TR1=1;
delay(6);
ET1=0;
TR1=0;
remoteout=0;
delay(18); //"1"持续2.4ms
}
//
/*******引导码,结果码,地址码编码函数******/
frocode()
{
ET1=1;
TR1=1;
delay(90);//9ms的引导码
ET1=0;
TR1=0;
remoteout=0;
delay(45);//4.5ms的结果码
sed0();sed0();sed0();sed1();
sed1();sed1();sed1();sed1();//地址码高八位0x1f
sed1();sed1();sed1();sed0();
sed0();sed0();sed0();sed0();//地址码低八位0xe0
}
//
/*************按键后发射函数***************/
tx()
{
if(flag==0)
{
// switch(keyvol)
switch(key)
{
case 0:{frocode();
sed0();sed0();sed0();sed0();
sed0();sed0();sed0();sed1();
sed1();sed1();sed1();sed1();
sed1();sed1();sed1();sed0();
sed0(); //key1数据码0x01
delay(360);
break;}
case 1:{frocode();
sed1();sed0();sed0();sed0();
sed0();sed0();sed0();sed1();
sed0();sed1();sed1();sed1();
sed1();sed1();sed1();sed0();sed0();//key2数据码0x81
delay(360);
break;}
case 2:{frocode();
sed0();sed1();sed0();sed0();
sed0();sed0();sed0();sed1();
sed1();sed0();sed1();sed1();
sed1();sed1();sed1();sed0();sed0();//key3数据码0x41
delay(360);
break;}
case 3:{frocode();
sed1();sed1();sed0();sed0();
sed0();sed0();sed0();sed1();
sed0();sed0();sed1();sed1();
sed1();sed1();sed1();sed0();sed0();//key4数据码0xc1
delay(360);
break;}
case 4:{frocode();
sed0();sed0();sed1();sed0();
sed0();sed0();sed0();sed1();
sed1();sed1();sed0();sed1();
sed1();sed1();sed1();sed0();sed0();//key5数据码0x21
delay(360);
break;}
case 5:{frocode();
sed1();sed0();sed1();sed0();
sed0();sed0();sed0();sed1();
sed0();sed1();sed0();sed1();
sed1();sed1();sed1();sed0();sed0();//key6数据码0xa1
delay(360);
break;}
case 6:{frocode();
sed0();sed1();sed1();sed0();
sed0();sed0();sed0();sed1();
sed1();sed0();sed0();sed1();
sed1();sed1();sed1();sed0();sed0();//key7数据码0x61
delay(360);
break;}
case 7:{frocode();
sed1();sed1();sed1();sed0();
sed0();sed0();sed0();sed1();
sed0();sed0();sed0();sed1();
sed1();sed1();sed1();sed0();sed0();//key8数据码0xe1
delay(360);
break;}
case 8:{frocode();
sed0();sed0();sed0();sed1();
sed0();sed0();sed0();sed1();
sed1();sed1();sed1();sed0();
sed1();sed1();sed1();sed0();sed0();//key9数据码0x11
delay(360);
break;}
case 9:{frocode();
sed1();sed0();sed0();sed1();
sed0();sed0();sed0();sed1();
sed0();sed1();sed1();sed0();
sed1();sed1();sed1();sed0();sed0();//key10数据码0x91
delay(360);
break;}
case 10:{frocode();
sed0();sed1();sed0();sed1();
sed0();sed0();sed0();sed1();
sed1();sed0();sed1();sed0();
sed1();sed1();sed1();sed0();sed0();//key11数据码0x51
delay(360);
break;}
case 11:{frocode();
sed1();sed1();sed0();sed1();
sed0();sed0();sed0();sed1();
sed0();sed0();sed1();sed0();
sed1();sed1();sed1();sed0();sed0();//key12数据码0xd1
delay(360);
break;}
case 12:{frocode();
sed0();sed0();sed1();sed1();
sed0();sed0();sed0();sed1();
sed1();sed1();sed0();sed0();
sed1();sed1();sed1();sed0();sed0();//key13数据码0x31
delay(360);
break;}
case 13:{frocode();
sed1();sed0();sed1();sed1();
sed0();sed0();sed0();sed1();
sed0();sed1();sed0();sed0();
sed1();sed1();sed1();sed0();sed0();//key14数据码0xb1
delay(360);
break;}
case 14:{frocode();
sed0();sed1();sed1();sed1();
sed0();sed0();sed0();sed1();
sed1();sed0();sed0();sed0();
sed1();sed1();sed1();sed0();sed0();//key15数据码0x71
delay(360);
break;}
case 15:{frocode();
sed1();sed1();sed1();sed1();
sed0();sed0();sed0();sed1();
sed0();sed0();sed0();sed0();
sed1();sed1();sed1();sed0();sed0();//key16数据码0xf1
delay(360);
break;}
case 16:{frocode();
sed0();sed0();sed0();sed0();
sed1();sed0();sed0();sed1();
sed1();sed1();sed1();sed1();
sed0();sed1();sed1();sed0();sed0();//key17数据码0x09
delay(360);
break;}
case 17:{frocode();
sed1();sed0();sed0();sed0();
sed1();sed0();sed0();sed1();
sed0();sed1();sed1();sed1();
sed0();sed1();sed1();sed0();sed0();//key18数据码0x89
delay(360);
break;}
case 18:{frocode();
sed0();sed1();sed0();sed0();
sed1();sed0();sed0();sed1();
sed1();sed0();sed1();sed1();
sed0();sed1();sed1();sed0();sed0();//key19数据码0x49
delay(360);
break;}
case 19:{frocode();
sed1();sed1();sed0();sed0();
sed1();sed0();sed0();sed1();
sed0();sed0();sed1();sed1();
sed0();sed1();sed1();sed0();sed0();//key20数据码0xc9
delay(360);
break;}
case 20:{frocode();
sed0();sed0();sed1();sed0();
sed1();sed0();sed0();sed1();
sed1();sed1();sed0();sed1();
sed0();sed1();sed1();sed0();sed0();//key21数据码0x29
delay(360);
break;}
case 21:{frocode();
sed1();sed0();sed1();sed0();
sed1();sed0();sed0();sed1();
sed0();sed1();sed0();sed1();
sed0();sed1();sed1();sed0();sed0();//key22数据码0xa9
delay(360);
break;}
case 22:{frocode();
sed0();sed1();sed1();sed0();
sed1();sed0();sed0();sed1();
sed1();sed0();sed0();sed1();
sed0();sed1();sed1();sed0();sed0();//key23数据码0x69
delay(360);
break;}
case 23:{frocode();
sed1();sed1();sed1();sed0();
sed1();sed0();sed0();sed1();
sed0();sed0();sed0();sed1();
sed0();sed1();sed1();sed0();sed0();//key24数据码0xe9
delay(360);
break;}
case 24:{frocode();
sed0();sed0();sed0();sed1();
sed1();sed0();sed0();sed1();
sed1();sed1();sed1();sed0();
sed0();sed1();sed1();sed0();sed0();//key25数据码0x19
delay(360);
break;}
case 25:{frocode();
sed1();sed0();sed0();sed1();
sed1();sed0();sed0();sed1();
sed0();sed1();sed1();sed0();
sed0();sed1();sed1();sed0();sed0();//key26数据码0x99
delay(360);
break;}
case 26:{frocode();
sed0();sed1();sed0();sed1();
sed1();sed0();sed0();sed1();
sed1();sed0();sed1();sed0();
sed0();sed1();sed1();sed0();sed0();//key27数据码0x59
delay(360);
break;}
case 27:{frocode();
sed1();sed1();sed0();sed1();
sed1();sed0();sed0();sed1();
sed0();sed0();sed1();sed0();
sed0();sed1();sed1();sed0();sed0();//key28数据码0xd9
delay(360);
break;}
case 28:{frocode();
sed0();sed0();sed1();sed1();
sed1();sed0();sed0();sed1();
sed1();sed1();sed0();sed0();
sed0();sed1();sed1();sed0();sed0();//key29数据码0x39
delay(360);
break;}
case 29:{frocode();
sed1();sed0();sed1();sed1();
sed1();sed0();sed0();sed1();
sed0();sed1();sed0();sed0();
sed0();sed1();sed1();sed0();sed0();//key30数据码0xb9
delay(360);
break;}
case 30:{frocode();
sed0();sed1();sed1();sed1();
sed1();sed0();sed0();sed1();
sed1();sed0();sed0();sed0();
sed0();sed1();sed1();sed0();sed0();//key31数据码0x79
delay(360);
break;}
case 31:{frocode();
sed1();sed1();sed1();sed1();
sed1();sed0();sed0();sed1();
sed0();sed0();sed0();sed0();
sed0();sed1();sed1();sed0();sed0();//key32数据码0xf9
delay(360);
break;}
default:break;
}
}
if(flag==1)
{
alltimesed();
}
}
/*****************键功能函数***************/
/*keywork()
{
keyvol=0x00;
key0=0xff;
key1=0xf0;
if(key0!=0xff)
{
delay(360);//按键超过36ms开始判断按键值
if(key0!=0xff)
{
key=1;
key1=0xfe;
if(key0!=0xff)
{
for(i=0;i<8;i++)
{
if(~key0==keyv[i])
{
keyvol=i;
flag=0;
}
}
}
key1=0xfd;
if(key0!=0xff)
{
for(i=0;i<8;i++)
{
if(~key0==keyv[i])
{
keyvol=i+8;
flag=0;
}
}
}
key1=0xfb;
if(key0!=0xff)
{
for(i=0;i<8;i++)
{
if(~key0==keyv[i])
{
keyvol=i+16;
flag=0;
}
}
}
key1=0xf7;
if(key0!=0xff)
{
for(i=0;i<8;i++)
{
if(~key0==keyv[i])
{
keyvol=i+24;
flag=0;
}
}
}
delay(360);//当键按下超过108ms,发射连发码
if(key0!=0xff)
{
delay(360);
if(key0!=0xff)
{
flag=1;
}
}
}
while(key0!=0xff);
}
} */
//
//
void keyscan()
{
P1=0xfe;
temp=P1;
temp&=0xf0;
if(temp!=0xf0)
{
delay(20);
if(temp!=0xf0)
{
flag1=1;
switch(temp)
{
case 0xe0: key=0;break;
case 0xd0: key=1;break;
case 0xb0: key=2;break;
case 0x70: key=3;break;
}
}
}
P1=0xfd;
temp=P1;
temp&=0xf0;
if(temp!=0xf0)
{
delay(20);
if(temp!=0xf0)
{
flag1=1;
switch(temp)
{
case 0xe0: key=4;break;
case 0xd0: key=5;break;
case 0xb0: key=6;break;
case 0x70: key=7;break;
}
}
}
P1=0xfb;
temp=P1;
temp&=0xf0;
if(temp!=0xf0)
{
delay(20);
if(temp!=0xf0)
{
flag1=1;
switch(temp)
{
case 0xe0: key=8;break;
case 0xd0: key=9;break;
case 0xb0: key=10;break;
case 0x70: key=11;break;
}
}
}
P1=0xf7;
temp=P1;
temp&=0xf0;
if(temp!=0xf0)
{
delay(20);
if(temp!=0xf0)
{
flag1=1;
switch(temp)
{
case 0xe0: key=12;break;
case 0xd0: key=13;break;
case 0xb0: key=14;break;
case 0x70: key=15;break;
}
}
}
}
/***************主函数****************/
main()
{
while(1)
{
/*keywork();
if(key==1)
{
tx();
}
key=0; */
if(flag1==1)
{
tx();
}
flag1=0;
}
}
/****************38KHz发生器******************/
void time_intt1(void) interrupt 3
{
remoteout=~remoteout;
}
//
//
/*************************END************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -