急救!!!!哪位大大帮看看我的HS9148红外解码程序哪儿除了问题?

2019-03-24 19:56发布

这是源代码。//使用12M晶振 适用于HS9148芯片#include<reg52.h>#include<stdio.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned intsbit 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();   }} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。