📄 红外解码程序.c
字号:
//C51红外解码程序
#include<INTRINS.H>
#include <AT89X51.h>
#define uchar unsigned char
#define uint unsigned int
#include "lcd1602.h"
//晶振用的是11.0592M的。
sbit p32=P3^2;
sbit p11=P1^1;
unsigned char dm,i,j,k;
unsigned char a[4];//定义4个数组,用来存储代码
uchar l,m,n,p,q; //动态显示数码位变量
uchar tabl[]="0123456789abcdef";
bit flag=0;
uchar counter1=0,counter2=0;
/*********************************/
void init_T0(void);
/*********************************/
void display()
{ //unsigned char i;
wr_com(0x80); //set ram address
wr_com(0x01); ///***清屏****
/*
delay50us();
busycheck();
delay50us();
for(i=0;i<16;i++)
{wr_data(line1[i]); //display
delay50us();
busycheck();}
busycheck();
delay50us();
//
wr_com(0xc0);
delay50us();*/
busycheck();
delay50us();
wr_data('0'); //display
delay50us();
busycheck();
wr_data('x'); //display
delay50us();
busycheck();
wr_data(':'); //display
delay50us();
busycheck();
//
wr_data(tabl[m]); //display
delay50us();
busycheck();
wr_data(tabl[n]); //display
delay50us();
busycheck();
wr_data(tabl[p]); //display
delay50us();
busycheck();
wr_data(tabl[q]); //display
delay50us();
busycheck();
}
/*********************************/
/*********************************/
void ds1ms(void)
{
unsigned char i,j;
for(i=2;i>0;i--)
for(j=230;j>0;j--) ;
}
void ds2s(void)
{
unsigned char i,j,k;
for(i=12;i>0;i--)
for(j=80;j>0;j--)
for(k=10;k>0;k--) ;
}
/*********************************/
void ds0_9ms(void)
{
unsigned char j,k;
for(j=18;j>0;j--)
for(k=20;k>0;k--) ;
}
/*********************************/
void main()
{
IT0=1;
EX0=1;
EA=1;
dm=0;
init();
p11=0;
wr_com(0x01); ///***清屏****
display();
while(1)
{
if(flag==1)
{
if((m==4)&&(n==0))
{
init_T0();
p11=1;
}
display();
ds2s(); ds2s(); ds2s();
flag=0;
}
}
}
void T0_inter(void) interrupt 1
{
TR0=0;
TH0=0X3C;
TL0=0XB0;
TR0=1;
counter1+=1;
if(counter1==200) //10S
{
counter1=0;
counter2+=1;
if(counter2==1) //定时多少秒 counter2=1表示10秒
{
p11=~p11;
TR0=0;
counter2=0;
}
}
}
void init_T0(void)
{
////////////////////////////
TR0=0;
TMOD=0x01;
TH0=0X3C;
TL0=0XB0;
ET0=1;
TR0=1;
counter1=0;
counter2=0;
////////////////////////////
}
void E0_1(void) interrupt 0 //外部中断0的函数
{ uchar DL,DH,a0;
EA=0;P2=0xff;
for(k=0;k<1;k++)
{
ds0_9ms();
if (p32==1) {;break;}
while(p32==0);
ds0_9ms();a0=p32;
if(a0==1)
{ while(p32==1);
for(i=0;i<4;i++)
{
for(j=1;j<=8;j++)
{
while(p32==0);
ds0_9ms();
if(p32==1)
{ ds1ms();
dm=dm|0x80;
if(j<8) dm=dm>>1;
}
else
if(j<8)dm=dm>>1;
}
a[i]=dm;
dm=0;
}
}
}
DL=0X0F&a[2];
DH=a[2];
DH=DH>>4;
m=DL;
n=DH;
DL=0X0F&a[0];
DH=a[0];
DH=DH>>4;
q=DL;
p=DH;
ds2s();
ds2s();
ds2s();
flag=1;
EA=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -