/*********************************************
1.功能: 本程序针对M50463AP红外键盘的单片机解码驱动程序
2.I/O脚使用
1个
3.调试环境:12M晶振(51系列12时钟模式)
3.程序大小(ROM估计):
4.数据大小(RAM估计):
5.运行时间(与调用函数有关):
***********************************************/
//
//#define __HWJP_M50462AP_DEBUG__
#ifdef __HWJP_M50462AP_DEBUG__
#include<wywcomm.h>
#include<reg52.H>
sbit io_HONGWAI = P2^1; // 串行数据,单向通信(输出)
//此模块调用其它模块的外部变量和函数的声明(此程序无)
#else
#include "system.h" //所有的项目用相同的系统头文件,但存放的路径不同,各自存放在对应的项目文件夹。
#endif
//此模块的宏定义(常数等)
#define DELAY10US_M _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_()
//此模块必要的库函数包含(include)
#include<intrins.h>
#define YONGHUMA 226
uint8 code yima[]={64,0,16,8,24,4,20,12,28,128,144,136,152,80,72,68,196,
204,84,212,220,92,216,208,232,248,228,244,236,76};
//----------------------------------------------------------
//读键并译码输出程序
//----------------------------------------------------------
uint8 u8_HongWaiKye_f(void)
{
uint8 i,j;
uint16 shuju;
if(io_HONGWAI == 1)return 0xff;
for(j=0;j<16;j++)
{i = 0;
while(!io_HONGWAI);
do{
if( io_HONGWAI == 0 ) break;
DELAY10US_M;//延時10毫秒
i++;
if(i>250)break;
}while(1);
if(i > 250)return 0xff;
shuju <<= 1;
if(i > 50) shuju |= 1;
}
i = shuju / 256;
j = shuju % 256;
if(i != YONGHUMA) return 0xff;
for(i=0;i<30;i++)if(yima[i] == j)break;
if(i == 31) i = 0xff;
return i;
}
//------------------------------------------------------------
//松键程序
//------------------------------------------------------------
void v_HongWaiSongJian_f(void)
{
uint8 i;
for(i=0;i<250;i++) //在24毫秒内检测一直为高电平则为松键
{
DELAY10US_M;DELAY10US_M;DELAY10US_M;DELAY10US_M;DELAY10US_M;
DELAY10US_M;DELAY10US_M;DELAY10US_M;DELAY10US_M;DELAY10US_M;
if( io_HONGWAI == 0 ) i=0;
}
}
#ifdef __HWJP_M50462AP_DEBUG__
void main(void)
{
uint8 i;
i = u8_HongWaiKye_f();
v_HongWaiSongJian_f();
}
#endif