/******************************************************************************************************************************* 文件名:Decode.c******* 描 述:用一个外部中断IO脚配合定时器0实现对2262系列编码信号进行软解码, PT2262的输出信号经LM358整形放大后 由单片机P3.2口输入,作为单片机的外部中断源。******* 编 码:A0 -- A11 中的每bit用2bit表示:0码:00 ;1码:11******* 硬 件:PT2262发射模块、LM358+R25.接收模块、STC89C52RC单片机******* 晶 振:11.0592MHz******* 日 期:2014-05-21 (zqjun@HK)******* 说 明: 1、PT2262输出编码包括8位地址码、4位数据码、1位同步码,共13位, 顺序:A0 A1 -- A10 A11 + 同步码 + A0 A1 -- A10 A11 + 同步码,连续发四次。 2、四个振荡周期为1个编码计时单位,记作T,除同步码外,编码中只有2种类别的组合脉冲取名长脉冲和短脉冲, 其中:长脉冲由3T高电平、1T低电平组成;短脉冲由1T高电平、3T低电平组成。 3、同步码,由1T高电平31T低电平组合(实际测试同步码低电平宽度基本在10ms以上)。 4、只需测量低电平或者高电平长短,即可知是长还是短脉冲,超过12T时间没有脉冲变化就有可能是同步码。************************************************************************************************************************/#include <reg52.h> //8051系列单片机头文件#include <stdio.h>#include <stdlib.h>#include <string.h>#include "Decode.h" //各种宏定义、全局变量、全局结构体声明/*********************************************************** 功能:利用定时器1实现1ms延时 **************************************************************/void T1_timer(void) interrupt 3 using 1{ TH1 = (65536 - DELAY)/256; TL1 = (65536 - DELAY)%256; //922:1ms 450:1us count++; //LED1 = ~LED1;//改变P1.1状态}/******************************************************************* 功能:xms延时 *********************************************************************/void delayms(uint xms){ uint i, j; for(i = xms; i > 0; i--) //延时xms { for(j = 110; j > 0; j--); }}#if 0/**************************************************************** 功能:数码管显示0 ~ F之间的值 *****************************************************************//*void display(uint arry_index){ dula = 1; //开段选 P0 = table[ arry_index ]; //送段选数据 dula = 0; //关段选 P0 = 0xFF; //消影 delayms(Display_DELAY); //延时}*//**************************************************************** ************ 功能: 把十六进制数据转换为十进制数据 ************* ************ 返回值:转换之后结果,即十进制数据 ************* ***************************************************************//*uint Hex2Decimal(unsigned long num){ uint ret = 0; if( (0 <= num) && (num <= 15) ) //0 ~ F { ret = ( (num & 0x8) * 8 ) + ( (num & 0x4) * 4 ) + ( (num & 0x2) * 2 ) + ( (num & 0x1) * 1 ); return ret; } return 0;}*//************************************************************************** 功能:解析接收到的解码后的数据,送8段数码管显示解码结果 **************************************************************************//*void Parse_DecData(unsigned long decdata){ unsigned long temp = 0; temp = decdata & 0xF00000; //编码最高4位 wela = 1; P0 = 0xFE; //第1位数码管 wela = 0; //display( Hex2Decimal(temp >> 20) ); display( temp >> 20 ); temp = decdata & 0x0F0000; wela = 1; P0 = 0xFD; //第2位数码管 wela = 0; //display( Hex2Decimal(temp >> 16) ); display( temp >> 16 ); temp = decdata & 0x00F000; wela = 1; P0 = 0xFB; //第3位数码管 wela = 0; //display( Hex2Decimal(temp >> 12) ); display( temp >> 12 ); temp = decdata & 0x000F00; wela = 1; P0 = 0xF7; //第4位数码管 wela = 0; //display( Hex2Decimal(temp >> 8) ); display( temp >> 8 ); temp = decdata & 0x0000F0; wela = 1; P0 = 0xEF; //第5位数码管 wela = 0; //display( Hex2Decimal(temp >> 4) ); display( temp >> 4 ); temp = decdata & 0x00000F; //编码最低4位 wela = 1;
单片机实现PT2262解码示例代码
最新推荐文章于 2024-07-07 14:22:07 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)