No.22325 作者:sifan1157 邮件:xingweijun123@126.com ID:100865 登陆:2次 文章数:18篇 最后登陆IP:222.178.56.73 最后登陆:2008/3/13 22:35:55 注册:2008/2/25 16:57:25 财富:101 发帖时间:2008/2/25 17:08:24 发贴者IP:123.147.0.126 标题:sifan1157:红外接收 程序 摘要:No.22325红外接收 程序 /************************************************************************************ * Copyright (c) 2007,重庆优易特电子 * All rights reserved. * * 文件名称: main.c * 文件标识: none * 适用器件: STC89C51RC * * 摘 要: 红外接收 * * 当前版本:1.0 * 作 者:李芳 * 完成日期:2007年12月10日 * *************************************************************************************/ #include <reg52.h> unsigned char code DUAN_TABLE[]={0X3F, 0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F,0x77,0x7C,0x39,0x5E,0x79,0x71}; unsigned char disp_buff[4]={1,2,3,4}; unsigned int tem[34]={0}; sbit IO_HW=P3^4; //红外检测IO口 sbit d0=P2^3; bit flag=0; //返回:0,表示没有键按下;1,表示有键按下,按下的键码为*dat. unsigned char HW_scan(unsigned int *dat) //红外扫描,接收按键并进行解码 { unsigned char count=0; unsigned long int x=0,y=0; if(IO_HW==0) //判断IO口状态,0表示有数据 { while(IO_HW==0);//等待 while(IO_HW==1); for(count=0;count <32;count++) //接收32个脉冲 { TH1=0;TL1=0; while(IO_HW==0&&x <5000)x++; //等待低电平到,并延时退出,防止死在这里 if(x> 4900)return 0; TR1=1; while(IO_HW==1&&x <10000)x++; //低电平维持时间用定时器1计时,并长时间无响应退出 if(x> 9900)return 0; TR1=0; x=TH1*256+TL1; if(x> 1000) y=y|0x01; //553,> 0.6ms认为宽脉冲,位数据为1. y=y < <1; //先读高位 } y=y> > 1; //最后多余的一位退回去. *dat=y; // if(*dat==0x00ff||*dat==0x807f||*dat==0x40bf||*dat==0x20df||*dat==0xa05f||*dat==0x609f||*dat==0x10ef||*dat==0x906f||*dat==0x50af||*dat==0xb04f||*dat==0xc03f||*dat==0xe01f||*dat==0xd02f||*dat==0x3ad6)return 1; // if(*dat==0xc03f||*dat==0x20df||*dat==0x906f||*dat==0x50af||*dat==0xd02f||*dat==0x2ad6||*dat==0x3ad6||*dat==0x40bf||*dat==0xe01f)return 1; if(*dat==0x40bf||*dat==0xc03f||*dat==0xe01f||*dat==0x50af||*dat==0xd02f||*dat==0x02fd||*dat==0x2ad5||*dat==0xe817||*dat==0x6897||*dat==0x0af5||*dat==0xc837||*dat==0x48b7||*dat==0x32cd||*dat==0xf00f||*dat==0x708f||*dat==0x12ed)return 1; //10个键的编码依次为:1234567890 else return 0; ......
>>返回讨论的主题
|