📄 1.c
字号:
#include<REG52.H>
#define uchar unsigned char
#define uint unsigned int
sbit sendport=P3^0;
uchar bdata address;
sbit ad7=address^7;
uchar bdata datafan;
sbit datafan7=datafan^7;
uchar bdata datayuan;
sbit datayuan7=datayuan^7;
uchar key=0x00;
bit m=0;
/*=========关显示==========*/
void undisplay()
{
P2=0x00;
P3=0x00;
}
/*=========延时函数==========*/
void delay(uint i)
{
while(--i);
}
/*=========键盘扫描函数1==========*/
uchar kbscan1()
{
uchar l=0;
P1=0xff;
if(P1==0xff) //没有键按下
while(1)
{
if(P1!=0xff)
break;
}
if(P1!=0xff) //有键按下
{
delay(0x04e1); //延时10毫秒
if(P1!=0xff) //确有键按下
{
switch(P1)
{
case 0xfe:l=0x06;break;
case 0xfd:l=0x5b;break;
case 0xfb:l=0x4f;break;
case 0xf7:l=0x66;break;
case 0xef:l=0x6d;break;
case 0xdf:l=0x7d;break;
case 0xbf:l=0x07;break;
case 0x7f:l=0x01;break;
default: break; //读键值
}
}
}
return l;
}
/*=========键盘扫描函数2==========*/
uchar kbscan2()
{
uchar l=0;
P1=0xff;
if(P1==0xff) //没有键按下
while(1)
{
if(P1!=0xff)
break;
}
if(P1!=0xff) //有键按下
{
delay(0x04e1); //延时10毫秒
if(P1!=0xff) //确有键按下
{
switch(P1)
{
case 0xfe:l=0x7f;break;
case 0xfd:l=0x6f;break;
case 0xfb:l=0x77;break;
case 0xf7:l=0x7c;break;
case 0xef:l=0x39;break;
case 0xdf:l=0x5e;break;
case 0xbf:l=0x79;break;
case 0x7f:l=0x02;break;
default: break; //读键值
}
}
}
return l;
}
/*=========显示函数==========*/
void display(uchar n)
{
P2=n;
}
/*=========发射调制后的高电平函数==========*/
void sendh(uchar n)
{
uchar e;
sendport=1;
for(e=0;e<n;e++)
{
#pragma ASM
NOP
NOP
NOP
NOP
#pragma ENDASM
sendport=!sendport;
}
}
/*=========发射函数==========*/
void send(uchar qq)
{
bit c;
uchar i;
datayuan=qq;
datafan=~qq;
sendh(0xef); //发送起始位 高电平
delay(0x007a); //发送起始位 低电平
address=0x55; //地址码
for(i=0;i<8;i++)
{
c=ad7;
if(c==1)
sendh(0x9f);
else
sendh(0x4f);
delay(0x0082);
address<<=1;
} //发送地址位
for(i=0;i<8;i++)
{
c=datayuan7;
if(c==1)
sendh(0x9f);
else
sendh(0x4f);
delay(0x0082); //发送数据位
datayuan=datayuan<<1;
}
for(i=0;i<8;i++)
{
c=datafan7;
if(c==1)
sendh(0x9f);
else
sendh(0x4f);
delay(0x0082);
datafan=datafan<<1;
} //发送数据反码
sendh(0x4f);
sendport=0; //发送结束位
}
/*=========初始化==========*/
void original()
{
undisplay(); //关显示
}
/*==========键盘扫描函数==========*/
kbscan()
{
if(m==0)
{
key=kbscan1(); //键盘取值函数1
if(key==0x01)
{
m=1;
key=0x00;
}
}
else
{
key=kbscan2(); //键盘取值函数2
if(key==0x02)
{
m=0;
key=0x00;
}
}
return key;
}
/*========取发送数据==========*/
uchar qudata()
{
uchar y;
switch(key)
{
case 0x06:y=0x01;break;
case 0x5b:y=0x02;break;
case 0x4f:y=0x03;break;
case 0x66:y=0x04;break;
case 0x6d:y=0x05;break;
case 0x7d:y=0x06;break;
case 0x07:y=0x07;break;
case 0x7f:y=0x08;break;
case 0x6f:y=0x09;break;
case 0x77:y=0x0a;break;
case 0x7c:y=0x0b;break;
case 0x39:y=0x0c;break;
case 0x5e:y=0x0d;break;
case 0x79:y=0x0e;break;
default: break;
}
return y;
}
/*=========主程序==========*/
void main(void)
{
uchar senddata;
original(); //初始化
while(1)
{
kbscan(); //键盘取值函数
if(key!=0)
{
display(key); //显示函数
senddata=qudata();
send(senddata); //发射函数
delay(0x30ce); //延时100ms
send(senddata); //发射函数
delay(0xf405); //延时0.5s
delay(0xf405); //延时0.5s
undisplay(); //关显示
key=0x00; //键值清零
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -