📄 text1.c
字号:
#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit wave=P3^7;
//bit flag_s=0;
bit flag_t1=0;//判断定时器1是否定时完成
uchar key=0;
//延时用来形成低电平
void delay(uchar i)
{uchar p;
while(i--)
{p=2;
while(p--)
{
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
/*用来产生38KHZ的方波*/
void osscia(void)
{
TH0=0xf3;
TL0=0xf3;
TR0=1;
}
//键盘扫描的子程序段
bit keych(void) //检测是否有键按下子程序//
{
P1=0xf0;
if(P1==0xf0)
return(0);
else {
return(1);
}
}
uchar keyscan(void) // 检测是哪个键按下子程序//
{ uchar m,n;
uchar code k[4]={0xfe,0xfd,0xfb,0xf7};
for(m=0;m<4;m++)
{ P1=k[m];
n=P1+(m*m+5)*m/6;//此处要注意m为整型
switch(n)
{ case 0x7e:key=0+m*4;break;
case 0xbe:key=1+m*4;break;
case 0xde:key=2+m*4;break;
case 0xee:key=3+m*4;break;}
}
return(key); }
//用来发8位数据码
void tmpwrite(uchar i)
{uchar n;
uchar test_bit;
n=8;
test_bit=0x01;
while(n--){
TH1=0xfd; //固定延时低电平0.565MS(557)
TL1=0xcb;
TR1=1;
wave=0;
osscia();
while(flag_t1==0);
wave=1;
flag_t1=0;
if((test_bit&i)==0x00)//成立就是写0
{
TH1=0xfd; //固定延时0.56MS
TL1=0xd5;
TR1=1;
while(flag_t1==0);
flag_t1=0;
test_bit=test_bit<<1;
}
else {//不成立就是写1,高电平1.685uS(1682)
TH1=0xf9;
TL1=0x70;
TR1=1;
while(flag_t1==0);
flag_t1=0;
test_bit=test_bit<<1;
}
}
}
//用来发9MS的低电平
void send9(void)
{TH1=0xdc;
TL1=0xdb;
TR1=1;
wave=0;
osscia();
while(flag_t1==0);
wave=1;
flag_t1=0;
}
//用来发4.5MS的高电平(实际值4507)
void send45(void)
{wave=1;
delay(179);
}
/******************************
|功能:用来调制红外发射信号
|
|
|
\*****************************/
void main(void)
{bit flag_k=0;
TMOD=0x12;
ET0=1;
ET1=1;
PT1=1;
EA=1;//允许定时器中断,以后实现接收时是允许外部中断
// key=0x00;
while(1) {
flag_k=keych();
if(flag_k==1)
{key=keyscan();
wave=1;
//delay(255);
send9();//发9MS的低电平
send45();//发4.5MS的高电平
tmpwrite(0x00);//写识别码
tmpwrite(0xff);//写识别码的反码
tmpwrite(key);//写数据位
tmpwrite(~key);//写数据的反码
//key++;
}
while(P1&0xf0!=0xf0);
}
}
void tt0(void) interrupt 1
{
wave=~wave;
}
void tt1(void) interrupt 3
{TR0=0;
flag_t1=1;
TR1=0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -