⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pt2262_decode.lst

📁 pt2262芯片解码,at89c51的,如果要用到产品用,需再增加一些软件滤波来提高其可靠性,供学习用,
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V6.12  PT2262_DECODE                                                          01/23/2007 00:22:16 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE PT2262_DECODE
OBJECT MODULE PLACED IN .\pt2262_decode.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE .\pt2262_decode.c ROM(COMPACT) DEBUG OBJECTEXTEND

stmt level    source

   1          /*********************************************************************************************************
   2          **				                   
   3          **                                   
   4          **
   5          **                                  (c) Copyright 2007-2010, gl
   6          **                                           All Rights Reserved
   7          **
   8          **                                                  V1.00.0
   9          **
  10          **
  11          **--------------文件信息--------------------------------------------------------------------------------
  12          **文   件   名: pt2262_decode.c(keilc51)
  13          **创   建   人: gl
  14          **最后修改日期: 2007年01月15日
  15          **描        述: c51:V6.12 mcu:at89c52,晶振:12.0M,pt2262 IR 解码,振荡电阻为470K
  16          **              在1602上显示解码出来的按键码,1602LCM驱动部分来自JJJ(proteus例子),在此对他表示感谢,
  17          **				解码程序为原创(采用定时中断查询),在硬件上调试ok,
  18          **--------------历史版本信息----------------------------------------------------------------------------
  19          ** 创建人: gl
  20          ** 版  本: V1.00.0
  21          ** 日 期: 2007年01月15日
  22          ** 描 述: 
  23          **
  24          **--------------当前版本修订------------------------------------------------------------------------------
  25          ** 修改人: gl
  26          ** 日 期: 2007年01月21日
  27          ** 描 述: 在硬件上调试ok,
  28          **
  29          **------------------------------------------------------------------------------------------------------
  30          ********************************************************************************************************/
  31          #include <reg51.h>
  32          #include <math.h>
  33          #include <intrins.h>
  34          /*********************************************************/
  35          /*io引脚定义*/
  36          sbit 	IRPIN 	= P0^0;
  37          sfr		FUCTIONOUT_IO	= 0x90;//P0,功能输出io
  38          /*常量定义*/	
  39          #define TASKS		8	//任务数
  40          #define KEYS		10	//按键数
  41          /*
  42          #define _4A			1	//1.6,2.4 4>_4A>=1  
  43          #define _12A		5	//5.6,6.4 6>_12A>4
  44          #define _124A		62	//12.4ms,18.6ms70>124A>50
  45          */
  46          /*红外解码相关常量定义*/ //晶振12M,定时器0中断时间为250us条件下的值
  47          //用示波器观察得出4A的时间为0.6ms,12A的时间为1.4ms
  48          #define _4AMIN		1
  49          #define _4AMAX		3
  50          #define _12AMIN		4
  51          #define _12AMAX		8
  52          #define _124AMIN	50//64
  53          #define _124AMAX	70	
  54          /*********************************************************/
  55          /*标志位定义*/
C51 COMPILER V6.12  PT2262_DECODE                                                          01/23/2007 00:22:16 PAGE 2   

  56          unsigned char bdata FLAG;
  57          sbit    IRPINOLDFG   	= FLAG^0;		//上次电平的状态标志,ir脚上升沿下降判断时要用到
  58          sbit 	_1SFG 		 	= FLAG^1;		//0.5S时钟标志
  59          sbit 	_synbitokFG 	= FLAG^2;		//检测同步位标志
  60          /*变量定义*/
  61          unsigned char i,keys = 13,have_count;
  62          unsigned char bitcount1,bit0checkcount,bit1checkcount;
  63          unsigned int hightcount,lowcount;
  64          unsigned int hightcountold,lowcountold;
  65          unsigned long int ircode;
  66          unsigned int _03UScount;
  67          unsigned char _1Scount,_1Mcount,_1Hcount;
  68          
  69          const unsigned long int ircodetable[KEYS] = //红外24位码值,高16位为地址码,低8位为数据码(4个数据)	
  70          {
  71          /********************************************************************
  72          **地址码A0接地,其它地址位悬空,数据码共4个键,没有按下时为0,按下后为1
  73          **由于data空间不够,只做了10个键,有个问题不理解
  74          **当是当增大KEY值时,data是以每4个字节增加的
  75          **如果真是这样那么24位解码将占用很大的data
  76          **空间,建议码值改为12位.
  77          ********************************************************************/
  78          0x1555c0,//b'0001 0101 0101 0101 1100 0000		//key0
  79          0x155530,// b'0001 0101 0101 0101 0011 0000		//key1
  80          0x15550c,//b'0001 0101 0101 0101 0000 1100		//key2
  81          0x155503,//b'0001 0101 0101 0101 0000 0011		//key3
  82          //
  83          
  84          0x1555f0,//b'0001 0101 0101 0101 1111 0000		//key0+key1
  85          0x1555cc,//b'0001 0101 0101 0101 1100 1100		//key0+key2
  86          0x1555c3,//b'0001 0101 0101 0101 1100 0011		//key0+key3
  87          0x15553c,//b'0001 0101 0101 0101 0011 1100		//key1+key2
  88          0x155533,//b'0001 0101 0101 0101 0011 0011		//key1+key3
  89          0x15550f,//b'0001 0101 0101 0101 0000 1111		//key2+key3
  90          //
  91          /*
  92          0x1555fc,//b'0001 0101 0101 0101 1111 1100		//key0+key1+key2
  93          0x1555f3,//b'0001 0101 0101 0101 1111 0011		//key0+key1+key3
  94          0x1555ff,//b'0001 0101 0101 0101 1111 1111		//key0+key1+key2+key3
  95          */
  96          };
  97          /*********************************************************************************************************
             -**/
  98          //1602LCM驱动
  99          unsigned long int Count = 0;
 100          ////Port Definitions**********************************************************
 101          sbit LcdRs		= P3^7;
 102          sbit LcdRw		= P3^6;
 103          sbit LcdEn  	= P3^5;
 104          sfr  DBPort 	= 0xA0;		//P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口
 105          
 106          //内部等待函数**************************************************************************
 107          unsigned char LCD_Wait(void)
 108          {
 109   1      	LcdRs=0;
 110   1      	LcdRw=1;	_nop_();
 111   1      	LcdEn=1;	_nop_();
 112   1      	while(DBPort&0x80);//在用Proteus仿真时,注意用屏蔽此语句,在调用GotoXY()时,会进入死循环,
 113   1      						 //可能在写该控制字时,该模块没有返回写入完备命令,即DBPort&0x80==0x80
 114   1      						 //实际硬件时打开此语句
 115   1      	LcdEn=0;
 116   1      	return DBPort;		
C51 COMPILER V6.12  PT2262_DECODE                                                          01/23/2007 00:22:16 PAGE 3   

 117   1      }
 118          //向LCD写入命令或数据************************************************************
 119          #define LCD_COMMAND			0      // Command
 120          #define LCD_DATA			1      // Data
 121          #define LCD_CLEAR_SCREEN	0x01      // 清屏
 122          #define LCD_HOMING  		0x02      // 光标返回原点
 123          void LCD_Write(bit style, unsigned char input)
 124          {
 125   1      	LcdEn=0;
 126   1      	LcdRs=style;
 127   1      	LcdRw=0;		_nop_();
 128   1      	DBPort=input;	_nop_();//注意顺序
 129   1      	LcdEn=1;		_nop_();//注意顺序
 130   1      	LcdEn=0;		_nop_();
 131   1      	LCD_Wait();	
 132   1      }
 133          void Delay1ms(unsigned int count)
 134          {
 135   1      	unsigned int i,j;
 136   1      	for(i=0;i<count;i++)
 137   1      	for(j=0;j<120;j++);
 138   1      }
 139          //设置显示模式************************************************************
 140          #define LCD_SHOW			0x04    //显示开
 141          #define LCD_HIDE			0x00    //显示关	  
 142          
 143          #define LCD_CURSOR			0x02 	//显示光标
 144          #define LCD_NO_CURSOR		0x00    //无光标		     
 145          
 146          #define LCD_FLASH			0x01    //光标闪动
 147          #define LCD_NO_FLASH		0x00    //光标不闪动
 148          
 149          void LCD_SetDisplay(unsigned char DisplayMode)
 150          {
 151   1      	LCD_Write(LCD_COMMAND, 0x08|DisplayMode);	
 152   1      }
 153          
 154          //设置输入模式************************************************************
 155          #define LCD_AC_UP			0x02
 156          #define LCD_AC_DOWN			0x00      // default
 157          
 158          #define LCD_MOVE			0x01      // 画面可平移
 159          #define LCD_NO_MOVE			0x00      //default
 160          
 161          void LCD_SetInput(unsigned char InputMode)
 162          {
 163   1      	LCD_Write(LCD_COMMAND, 0x04|InputMode);
 164   1      }
 165          
 166          //移动光标或屏幕************************************************************
 167          /*
 168          #define LCD_CURSOR		0x02      
 169          #define LCD_SCREEN		0x08
 170          #define LCD_LEFT		0x00
 171          #define LCD_RIGHT		0x04
 172          void LCD_Move(unsigned char object, unsigned char direction)
 173          {
 174          	if(object==LCD_CURSOR)
 175          		LCD_Write(LCD_COMMAND,0x10|direction);
 176          	if(object==LCD_SCREEN)
 177          		LCD_Write(LCD_COMMAND,0x18|direction);
 178          }
C51 COMPILER V6.12  PT2262_DECODE                                                          01/23/2007 00:22:16 PAGE 4   

 179          */
 180          //初始化LCD************************************************************
 181          void LCD_Initial()
 182          {
 183   1      	Delay1ms(1000);
 184   1      	LcdEn=0;
 185   1      	LCD_Write(LCD_COMMAND,0x38);           //8位数据端口,2行显示,5*7点阵
 186   1      	LCD_Write(LCD_COMMAND,0x38);
 187   1      	LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR);    //开启显示, 无光标
 188   1      	LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN);   //清屏
 189   1      	LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE);       //AC递增, 画面不动
 190   1      }
 191          
 192          //************************************************************************
 193          void GotoXY(unsigned char x, unsigned char y)
 194          {
 195   1      	if(y==0)
 196   1      		LCD_Write(LCD_COMMAND,0x80|x);
 197   1      	if(y==1)
 198   1      		LCD_Write(LCD_COMMAND,0x80|(x+0x40));
 199   1      }
 200          void Print(unsigned char *str)
 201          {
 202   1      	while(*str!='\0')
 203   1      	{
 204   2      		LCD_Write(LCD_DATA,*str);
 205   2      		str++;
 206   2      	}
 207   1      }
 208          /*
 209          void LCD_LoadChar(unsigned char user[8], unsigned char place)
 210          {
 211          	unsigned char i;
 212          	LCD_Write(LCD_COMMAND,0x40|(place*8));
 213          	for(i=0; i<8; i++)
 214          		LCD_Write(LCD_DATA,user[i]);
 215          }
 216          */
 217          //************************************************************************
 218          //** 修改人: gl
 219          //** 日 期: 2007年01月21日,由原来的5位改为8位,t改为long
 220          unsigned char TempBuffer[10];
 221          void IntToStr(unsigned long int t, unsigned char *str, unsigned char n) 
 222          {
 223   1      	unsigned char a[8]; char i, j;        
 224   1         	a[0]=(t/10000000)%10;                                      	
 225   1      	a[1]=(t/1000000)%10;                                       	
 226   1      	a[2]=(t/100000)%10;                      	
 227   1      	a[3]=(t/10000)%10;         //取得整数值到数组         	
 228   1      	a[4]=(t/1000)%10;                                     	
 229   1      	a[5]=(t/100)%10;                                      	
 230   1      	a[6]=(t/10)%10;                                       	
 231   1      	a[7]=(t/1)%10;                                        	
 232   1                                                            
 233   1      	for(i=0; i<8; i++)         //转成ASCII码 ;5             	
 234   1      		a[i]=a[i]+'0';                                    	
 235   1      	for(i=0; a[i]=='0' && i<=3; i++);                     	
 236   1      	for(j=8-n; j<i; j++)       //填充空格   ;5-n              	
 237   1      		{ *str=' ';  str++; }                             	
 238   1      	for(; i<8; i++)                 //   ;5                   	
 239   1      		{ *str=a[i]; str++; }  //加入有效的数字           	
 240   1      	*str='\0'; 
C51 COMPILER V6.12  PT2262_DECODE                                                          01/23/2007 00:22:16 PAGE 5   

 241   1      } 
 242          /*********************************************************************************************************
             -**/
 243          
 244          /*********************************************************************************************************
 245          ** 函数名称: init

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -