📄 main.c
字号:
#include <reg52.h>
#include <lcd1602.h>
void DelayA(void);
void DelayB(void);
sbit P32=P3^2;
sbit P00=P0^0;
void main(void)
{
unsigned int TempCyc;
InitLCD();
Write_Instruction(0x01);
// Write_Instruction(0x81);
// Write_Data(0x30);
// InitCom();//初始化串口
EA=1;//允许CPU中断
IT0=1;//INT0下降沿有效
EX0=1;//开INT0中断
do
{
for(TempCyc=0;TempCyc<35000;TempCyc++);
for(TempCyc=0;TempCyc<30000;TempCyc++);
}
while(1);
}
//INT0中断
void INT0FUN(void)interrupt 0 using 2
{
unsigned char IRCode[2],IROK;
unsigned int TempCyc,TempCycB,TempCycA;
EX0=0;//关闭中断0
IROK=0;
DelayA();//延时等待引导码的前半部结束
DelayA();
if(!P32)//检验前半部是否过早结束,仿干扰
{
for(TempCycA=0;TempCycA<2;TempCycA++)
{
DelayA();
if(P32)//检验前半部是否过早,防干扰
{
for(TempCyc=0;TempCyc<300;TempCyc++)
if(!P32)break;//等待第一个位
if(TempCyc<300)//超时检验
{
for(TempCyc=0;TempCyc<8;TempCyc++)
{
while(!P32);//等待P32拉高,开始位的下部分
DelayB();//这里没社超时,实际应用在多功能的设计时应设超时
IRCode[TempCycA]=IRCode[TempCycA]>>1;
if(P32)//当延时750us后P32仍为高则当前位为1
{
IRCode[TempCycA]=IRCode[TempCycA]|0x80;
for(TempCycB=0;TempCycB<100;TempCycB++)
if(!P32)break;
if(TempCycB>99)
goto endchk;
}
}
}
else
goto endchk;
}
else
goto endchk;
IROK++;
}
}
endchk:
if(IROK==2)
{
if(IRCode[1]==0x10)//1号键
{
// P00=~P00;
// InitLCD();
// Write_Instruction(0x01);
// Write_Instruction(0x81);
// Write_Data(0x30);
InitLCD();
Write_Instruction(0x01);
Write_Instruction(0x81);
Write_Data(0x30);
}
/*
if(IRCode[1]==0x11)//2
// P00=~P00;
if(IRCode[1]==0x12)//3
// P12=~P12;
if(IRCode[1]==0x13)//4
// P13=~P13;
if(IRCode[1]==0x14)//5
// P14=~P14;
if(IRCode[1]==0x15)//6
// P15=~P15;
if(IRCode[1]==0x16)//7
// P16=~P16;
if(IRCode[1]==0x17)//8
// P17=~P17;
if(IRCode[1]==0x0e)//8
// P1=~P1;
*/
for(TempCyc=0;TempCyc<300;TempCyc++)
DelayA();
}
EX0=1;
}
void DelayA(void)
{
unsigned int TempCyc;
for(TempCyc=0;TempCyc<650;TempCyc++);//3.5
}
void DelayB(void)
{
unsigned int TempCyc;
for (TempCyc=0;TempCyc<93;TempCyc++);//0.75ms
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -