打印
[应用相关]

出现乱码的 怎么解决

[复制链接]
641|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bbapple|  楼主 | 2017-3-24 15:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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;
}
沙发
handleMessage| | 2017-3-24 15:23 | 只看该作者
一直是错的吗?

使用特权

评论回复
板凳
bbapple|  楼主 | 2017-3-24 15:24 | 只看该作者
解码出来的码  有时候貌似是对的,有时候是错的

使用特权

评论回复
地板
bbapple|  楼主 | 2017-3-24 15:24 | 只看该作者
按键会解出几种码来  调了几天都没头绪。。。

使用特权

评论回复
5
zhouhuanの| | 2017-3-24 15:31 | 只看该作者
这是 copy的例程还是 自己写的啊?

使用特权

评论回复
6
wanglaojii| | 2017-3-24 15:32 | 只看该作者
你用定时器中断写的吧。。。

使用特权

评论回复
7
laozhongyi| | 2017-3-24 15:38 | 只看该作者
这个例程还是蛮不错的,出的问题的,看下你的延时。。

使用特权

评论回复
8
Edisons| | 2017-3-24 15:38 | 只看该作者
是不是延时的时间不正确导致解码错误?这个可能我也觉得很大。

使用特权

评论回复
9
_gege| | 2017-3-24 15:48 | 只看该作者
现在用C语言软件延时不是很准。

使用特权

评论回复
10
Mozarts| | 2017-3-24 15:49 | 只看该作者
用定时器的那个函数还读不出Time值。。

使用特权

评论回复
11
febgxu| | 2017-3-24 16:34 | 只看该作者
串口输出是代码吗?

使用特权

评论回复
12
febgxu| | 2017-3-24 16:36 | 只看该作者
你显示用的是字符串还是16进制

使用特权

评论回复
13
一代掌门| | 2017-3-24 21:27 | 只看该作者
红外解码别用延时,不精确,
用定时器就行,
现在好多单片机的串口直接红外解码功能

使用特权

评论回复
14
稳稳の幸福| | 2017-3-25 16:10 | 只看该作者
时钟没同步?

使用特权

评论回复
15
51xlf| | 2017-3-25 22:47 | 只看该作者
出现乱码是发送的问题?

使用特权

评论回复
16
51xlf| | 2017-3-25 22:53 | 只看该作者
显示是乱码就是你设置串口接收的格式不对。

使用特权

评论回复
17
lwsn| | 2017-3-29 21:14 | 只看该作者
解码协议是什么,配置的对吗

使用特权

评论回复
18
Bjorn| | 2017-3-30 20:55 | 只看该作者
可能是延时的时间不正确

使用特权

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

本版积分规则

293

主题

1811

帖子

1

粉丝