📄 nn.c
字号:
/*
摇控板可使用红外线遥控编码芯片为LC7461等芯片
*/
#include<reg51.h>
sbit singer=P3^2;
unsigned flag;
unsigned REM_l;
unsigned REM_h;
unsigned char code seg[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0x0F8,0x80,0x90,0xFF};
/**************精确延时程序***************/
void dealay_880us(void) //延时880us
{
unsigned int i;
for(i=0;i<109;i++);
}
void dealay_4720us(void) //延时47ms
{
unsigned int k;
for(k=0;k<892;k++);
}
void dealay_1ms(void) //延时1ms
{
unsigned int m;
for(m=0;m<124;m++);
}
main()
{
EA=1;
IT0=1;
EX0=1;
dealay_1ms();
dealay_4720us();
dealay_880us();
while(1);
}
/*************中断服务程序***********/
void int0() interrupt 0 using 0
{
char i,k,n,temp;
EA=0;
for(i=0;i<10;i++)
{
dealay_880us();//延时882微秒后判断P3.2脚是否出现高电平如果有就退出解码程序
if(singer==1) {flag=1;break;}// 重复10次,目的是检测在8820微秒内如果出现高电平就退出解码程序
else flag=0;
}
if(flag==0)
{ //
while(singer==0);//等待高电平避开9毫秒低电平引导脉冲
dealay_4720us();//延时4.74毫秒避开4.5毫秒的结果码
for(i=0;i<26;i++)
{
while(singer==0);
dealay_880us();//高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
if(singer==0) continue;
else dealay_1ms();
}
for(n=0;n<2;n++)
{
k=0X01;
for(i=0;i<8;i++)
{
while(singer==0);//等待高电平避开9毫秒低电平引导脉冲
dealay_880us();
if(singer==0) temp=temp&(~k);///检测数据为0或1
else
{
dealay_1ms();
temp=temp|k;
}
k=k<<1;
}
if(n==0) REM_h=temp;
else REM_l=temp;
}
if((~REM_h)==REM_l)
{
P0=seg[REM_h];
P2=0XFF;
}
}
EA=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -