打印
[MCU]

出现乱码怎么解决

[复制链接]
270|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
huangchui|  楼主 | 2020-7-5 15:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

#include <msp430x14x.h>
#include "hs0038ir.h"
unsigned char TN=0;
unsigned char   IR_COM[4]={0,0,0,0};//存放解码出来的数据  
/*******************************************************************************
* Function Name  : void Delay100us(unsigned int dly)
* Description    : 延时100us
* Input          : dly
* Output         : None
* Return         : None
*******************************************************************************/
void Delay100us(unsigned int dly)
{
  unsigned int j,k;
  for(j=dly;j>0;j--)
    for(k=16;k>0;k--);
}
/*******************************************************************************
* Function Name  : void Delay50Us(unsigned char dly)
* Description    : 延时50us
* Input          : dly
* Output         : None
* Return         : None
*******************************************************************************/
void Delay50us(unsigned int dly)
{
  while(dly--);
}
/*******************************************************************************
* Function Name  : void TimeA_Init()
* Description    : 定时器A 初始化配置  捕获模式
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void TimeA_Init()
{
   TACTL |= TASSEL_2 + TACLR +ID_0 + MC_1;//MCLK 0分频 计数器清零
}
/*******************************************************************************
* Function Name  : void IR_Init(void)
* Description    : 管脚配置配置
* Input          : None
* Output         : None
* Return         : None
*******************************************************************************/
void IR_Init(void)
{
  P1DIR |= BIT5;
  P1OUT |= BIT5;
  P1DIR &=~BIT5;   //红外数据输入端
  P1OUT |= BIT5;
//  P6DIR |= BIT7;   //蜂鸣器
//  P6OUT |= BIT7;
  P1IE  |= BIT5;   //使能P1.5中断功能
}
/*******************************************************************************
* Function Name  : unsigned char Get_data(void)
* Description    : 读取IR管脚数据
* Input          : None
* Output         : None
* Return         : 读取到的数据
*******************************************************************************/
unsigned char Get_data(void)
{
  unsigned char stat;
  stat = P1IN & BIT5;
  return (stat);
}
/*******************************************************************************
* Function Name  : unsigned char Get_HighTime(void)
* Description    : 计算高脉冲宽度
* Input          : None
* Output         : None
* Return         : 脉冲宽度
*******************************************************************************/
unsigned char Get_HighTime(void)
{
unsigned int n=0;
// TimeA_Init();                   //连续计数模式
// CCR0=60000;
while(Get_data()==0x20)           //等待低电平
{
    n++;
    Delay50us(10);                 //延时  50us
    if(n==120)return n ;           //最大延时 6ms   
}
// n = TAR;
// TACTL = 0;
return  n;                        //返回脉冲宽度
}
/*******************************************************************************
* Function Name  : unsigned char Get_HighTime(void)
* Description    : 计算低脉冲宽度
* Input          : None
* Output         : None
* Return         : 脉冲宽度
*******************************************************************************/
unsigned char Get_LowTime(void)
{
   unsigned char n=0;
//   TimeA_Init();                  //连续计数模式
//   CCR0=60000;
   while(Get_data()==0)             //等待高电平
   {
      n++;
      Delay50us(10);                //延时 50us
      if(n==250) return n;          //最大延时 12.5ms
   }
//  n = TAR;
//  TACTL = 0;
  return n;                         //返回脉冲宽度
}
/*******************************************************************************
* Function Name  : unsigned int Remote_decode(void)
* Description    : 解码过程1
* Input          : None
* Output         : None
* Return         : 解码出来的数据
*******************************************************************************/
unsigned int *Remote_decode(void)
{
  unsigned char i,j,t=0,rd;
//  unsigned int *pr=0;
  while(Get_data()==0x20);        //等待IR低电平   
// if(Get_data()!=0x20)
// {
  t = Get_LowTime();              //获取低电平时间
  if(t==250) return 0;            //超时 不是有用信号
  if((t<80)||(t>100)) return 0;   //不在8到10ms内 跳出
//  while(Get_data()==0x20);        //跳过4.5ms高信号
  //开始解码   
  for(i=0;i<4;i++)
  {
    for(j=8;j>0;j--)
    {
      IR_COM>>=1;  
      while(Get_data()==0x20);     //等低电平           
      t = Get_LowTime();            //计算低电平时间
//      _NOP();
//      if((t<4)||(t>7))return 0;    //不在0.5~0.6ms内 跳出         
      Delay50us(150);               //延时0.8ms
      if((Get_data()==0x20))        //"1"
      {
        IR_COM |= 0x80;
      }
      else                          //"0"
      {
        IR_COM &= 0x7f;
      }
     }  if(j==0)j=8;
   }
      P6OUT ^= BIT7;
      Delay100us(5);
//  }  
//  *pr = IR_COM[0];
  return 0;
}

使用特权

评论回复

相关帖子

沙发
jiajs| | 2020-7-5 15:57 | 只看该作者
一直是错的?

使用特权

评论回复
板凳
huangchui|  楼主 | 2020-7-5 16:00 | 只看该作者
解码出来的码  有时候貌似是对的,有时候是错的

使用特权

评论回复
地板
huangchui|  楼主 | 2020-7-5 16:04 | 只看该作者
还有一个按键会解出几种码来  调了几天 没头绪为什么啊

使用特权

评论回复
5
zhanghqi| | 2020-7-5 16:09 | 只看该作者
这是 copy的例程还是 自己写的?

使用特权

评论回复
6
huangchui|  楼主 | 2020-7-5 16:18 | 只看该作者
自己写的啊,

使用特权

评论回复
7
zhenykun| | 2020-7-5 16:21 | 只看该作者
你用定时器中断写的。

使用特权

评论回复
8
wyjie| | 2020-7-5 16:26 | 只看该作者
楼主这个例程还是蛮不错的,出的问题的,看下你的延时的

使用特权

评论回复
9
huangchui|  楼主 | 2020-7-5 16:30 | 只看该作者
是不是延时的时间不正确导致解码错误,这个可能我也觉得很大,只是一直没调出来

使用特权

评论回复
10
huangchui|  楼主 | 2020-7-5 16:37 | 只看该作者
现在用C语言软件延时不是很准,用定时器的那个函数还读不出Time值,

使用特权

评论回复
11
jlyuan| | 2020-7-5 16:40 | 只看该作者
定时写没用过。我是用延时写的。没有问题。

使用特权

评论回复
12
zhuww| | 2020-7-5 16:44 | 只看该作者
定时延时会准些

使用特权

评论回复
13
huwr| | 2020-7-5 16:47 | 只看该作者

这个设计不是很复杂的啊

使用特权

评论回复
14
huwr| | 2020-7-5 16:56 | 只看该作者
这个分享的程序的没啥问题的,看下主要是不是线路上有信号干扰的

使用特权

评论回复
15
huangchui|  楼主 | 2020-7-5 17:00 | 只看该作者
嗯,我知道了,多谢哈

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

918

主题

12323

帖子

4

粉丝