单片机实现PT2262解码示例代码

本文介绍了如何在单片机上实现PT2262编码器信号的解码过程,提供了详细的示例代码,帮助读者理解解码原理并应用于实际项目中。
摘要由CSDN通过智能技术生成
               
/******************************************************************************************************************************* 文件名: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;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值