📄 hwx.c
字号:
/*---------------------------
/*TITLE: uPD6121
/*AUTHOR: i-core
/*DATE: 2004-9-18
/*
/*---------------------------*/
#include<at89x51.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char datamatrix[32];
unsigned char knum=0;
void delay(void);
void delay1(void); //882微秒
void delay2(void); //延时4740微秒
void delay3(void); //延时1000微秒
void delay(void)
{
unsigned char i,j,tk;
for(tk=0;tk<100;tk++)
{
for(i=0;i<27;i++)
for(j=0;j<10;j++)
{}
}
}
void delay1(void)
{
unsigned char i,j;
for(i=0;i<24;i++)
for(j=0;j<10;j++)
{}
}
void delay2(void)
{
unsigned char i,j;
for(i=0;i<72;i++)
for(j=0;j<20;j++)
{}
}
void delay3(void)
{
unsigned char i,j;
for(i=0;i<27;i++)
for(j=0;j<10;j++)
{}
}
void sendcom(uchar a)
{
SBUF=a;
while(TI==0);
TI=0;
}
void outInterrupt(void) interrupt 0 //P3.2脚外部中断子程序,也就是解码程序
{
unsigned char isdata=1;
unsigned char i,j,m;
m=0;
EA=0;
for(i=0;i<10&&isdata;i++) //9000ms初始低电平判断
{
delay1();
/* #pragma asm
MOV R4,#20
D1: MOV R5,#20
DJNZ R5,$
DJNZ R4,D1
#pragma endasm*/
if(P3_2==1)
isdata=0; //
}
if(isdata==1)
{
while(P3_2==0) //等待高电平避开9ms低电平引导脉冲
{}
delay2(); //4.5ms
for(i=0;i<4;i++)
for(j=0;j<8;j++)
{
while(P3_2==0)
{
}
delay1();
if(P3_2==1) //true is 1 else 0
{
datamatrix[m++]=P3_2;
delay3();
}
else
datamatrix[m++]=P3_2;
}
datamatrix[22]=datamatrix[22]<<1;
datamatrix[21]=datamatrix[21]<<2;
datamatrix[20]=datamatrix[20]<<3;
datamatrix[19]=datamatrix[19]<<4;
datamatrix[18]=datamatrix[18]<<5;
datamatrix[17]=datamatrix[17]<<6;
datamatrix[16]=datamatrix[16]<<7;
datamatrix[16]=datamatrix[16]|datamatrix[17]|datamatrix[18]|datamatrix[19]|datamatrix[20]|datamatrix[21]|datamatrix[22]|datamatrix[23];
if(datamatrix[16]==0x01)
{
sendcom(knum);//k1键解码成功!
}else
if(datamatrix[16]==0x81)
{
sendcom(knum);//k2
}else
if(datamatrix[16]==0x41)
{
sendcom(knum);//k3键解码成功!
}else
if(datamatrix[16]==0xC1)
{
sendcom(knum);//k4
}else
if(datamatrix[16]==0x21)
{
sendcom(knum);//k5
}else
if(datamatrix[16]==0xA1)
{
sendcom(knum);//k6
}else
if(datamatrix[16]==0x61)
{
sendcom(knum);//k7键解码成功!
}else
if(datamatrix[16]==0xE1)
{
sendcom(knum);//k8
}else
if(datamatrix[16]==0x11)
{
sendcom(knum);//k9
}else
if(datamatrix[16]==0x91)
{
sendcom(knum);//k10键解码成功!
}else
if(datamatrix[16]==0x51)
{
sendcom(knum);//k11
}else
if(datamatrix[16]==0xD1)
{
sendcom(knum);//k12
}else
if(datamatrix[16]==0x31)
{
sendcom(knum);//k13键解码成功!
}else
if(datamatrix[16]==0xB1)
{
sendcom(knum);//k14
}else
if(datamatrix[16]==0x71)
{
sendcom(knum);//k15
}else
if(datamatrix[16]==0xF1)
{
sendcom(knum);//k16键解码成功!
}else
if(datamatrix[16]==0x09)
{
sendcom(knum);//k17
}else
if(datamatrix[16]==0x89)
{
sendcom(knum);//k18
}else
if(datamatrix[16]==0x49)
{
sendcom(knum);//k19键解码成功!
}else
if(datamatrix[16]==0xC9)
{
sendcom(knum);//k20
}else
if(datamatrix[16]==0x29)
{
sendcom(knum);//21
}else
if(datamatrix[16]==0xA9)
{
sendcom(knum);//k22
}else
if(datamatrix[16]==0x69)
{
sendcom(knum);//k23键解码成功!
}else
if(datamatrix[16]==0xE9)
{
sendcom(knum);//k24
}else
if(datamatrix[16]==0x19)
{
sendcom(knum);//k25
}else
if(datamatrix[16]==0x99)
{
sendcom(knum);//k26
}else
if(datamatrix[16]==0x59)
{
sendcom(knum);//k27键解码成功!
}else
if(datamatrix[16]==0xD9)
{
sendcom(knum);//k28
}else
if(datamatrix[16]==0x39)
{
sendcom(knum);//k29
}else
if(datamatrix[16]==0xB9)
{
sendcom(knum);//k30键解码成功!
}else
if(datamatrix[16]==0x79)
{
sendcom(knum);//k31
}else
if(datamatrix[16]==0xF9)
{
sendcom(knum);//k32
}
}
EA=1; //打开CPU总中断请求
IT0=1; //设定INT0的触发方式为脉冲负边沿触发
EX0=1;
}
void main(void)
{
unsigned char ww;
//
TMOD=0x20;
TL1=0xfd;TH1=0xfd;
SCON=0xd8;PCON=0x00;
TR1=1;
//
while(1)
{
P0_2=1;
knum=0;
for(ww=0;ww<255;ww++)
{}
while(P0_2==1)
{}
P0_0=1;
P0_1=1;
EA=1; //打开CPU总中断请求
IT0=1; //设定INT0的触发方式为脉冲负边沿触发
EX0=1; // 打开INT0中断请求
P1=0;
P2=0;
delay2();
P1=0;
P2=0;
delay2();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -