📄 pt2262_decode.lst
字号:
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 + -