4541|3

4

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

急救!!!!哪位大大帮看看我的HS9148红外解码程序哪儿除了问题? [复制链接]

这是源代码。
//使用12M晶振 适用于HS9148芯片
#include<reg52.h>
#include<stdio.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit led=P1^1;
sbit in=P3^2;//红外接口标志
uchar const tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
                             0x77,0x7c,0x39,0x5e,0x79,0x71,0x3f,0x40,0x80}; //1~f 0 - .
uint send_data=0;  //接收数据的全局变量

/*************************************************************************/
//延时程序
void delay1(void)
{
TMOD |= 0x01; //定时器0,工作在模式1
TF0 = 0;   //清溢出标志位,软清零
TH0 = 0xfc;    //延时844us
TL0 = 0xb4;
TR0 = 1; //启动定时器0
while(TF0==0){;} //定时器无溢出,循环等待
TR0 = 0; //关闭定时器0
}
void delay2(void)
{
TMOD |= 0x10; //定时器1,工作在模式1
TF1 = 0;   //清溢出标志位,软清零
TH1 = 0xfe;    //延时500us
TL1 = 0x0c;
TR1 = 1; //启动定时器1
while(TF1==0){;} //定时器无溢出,循环等待
TR1 = 0; //关闭定时器1
}
/*************************************************************/
void jieshou() interrupt 0 using 0//外部中断0服务函数
 {
  uchar a;
  uint num=0;
  EX0 = 0; //处理数据是禁止中断
  for(a=12;a>0;a--)
   {
    while(!in);
delay1();   //0.844ms
num=num<<1;
if(!in)
{
 num=num|0x01;
 delay2();  //0.5ms+0.844ms刚好跳过最长的高电平
}
   }
  send_data=num;
  EX0 =1; //处理数据完成后开中断
 }

/******************************************************************/

  void work(void)//红外键值散转程序
  {
       switch(send_data)
      {
case 0x0f20:P0=tab[1];break;//1 显示相应的按键值
case 0x0f10:P0=tab[2];break;//2
case 0x0f08:P0=tab[3];break;//3
case 0x0f04:P0=tab[4];break;//4
case 0x0f02:P0=tab[5];break;//5
case 0x0f01:P0=tab[6];break;//6
case 0x0ea0:P0=tab[7];break;//7
case 0x0e90:P0=tab[8];break;//8
case 0x0e88:P0=tab[9];break;//9
case 0x0e84:P0=tab[10];break;//a
case 0x0e82:P0=tab[11];break;//b
case 0x0e81:P0=tab[12];break;//c
case 0x0e60:P0=tab[13];break;//d
case 0x0e50:P0=tab[14];break;//e
case 0x0e48:P0=tab[15];break;//f
case 0x0e44:P0=tab[16];break;//0
case 0x0e42:P0=tab[17];break;//-
case 0x0e41:P0=tab[18];break;//.
default:led=0;break;
 }
  }
/***************************************************************/
void main(void)
{
 IT0 = 1;   
 EX0 = 1;   
 EA = 1;
 P2=0x00;//1位数码管全部显示
 while(1)//主循环
  {
   work(); 
  }
}
此帖出自51单片机论坛

最新回复

google上资料很多,自己动手丰衣足食  详情 回复 发表于 2011-5-31 14:11
点赞 关注
 

回复
举报

2130

帖子

0

TA的资源

五彩晶圆(中级)

沙发
 
你用什么解码?晶振漂移多少?解码出来离散型多大
???你全用定值散转,考虑过上述问题么?
此帖出自51单片机论坛
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

板凳
 

回复 沙发 leang521 的帖子

这个倒没有考虑过呢~~因为不是很了解~~版主能给些参考么?
此帖出自51单片机论坛
 
 
 

回复

2130

帖子

0

TA的资源

五彩晶圆(中级)

4
 
google上资料很多,自己动手丰衣足食
此帖出自51单片机论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表