📄 lc7461.lst
字号:
C51 COMPILER V7.06 LC7461 04/01/2009 18:43:47 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE LC7461
OBJECT MODULE PLACED IN lc7461.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lc7461.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*
2
3 遥控器使用红外线遥控编码芯片为LC7461
4
5 */
6
7 #include<reg52.h>
8 #include"portdef.h"
9 #include"lcdfun.h"
10 //sbit IRH=P3^2;
11 #define uchar unsigned char
12 //uchar x,y;
13 bit flag; //引导码标志位
14 uchar REM_l;
15 uchar REM_h;
16 uchar num;
17 char num_to_char[20]="0123456789abcdef";
18 char show[3];
19 /**************精确延时程序***************/
20
21 void delay_880us(void) //延时880us
22 {
23 1 unsigned int i;
24 1 for(i=0;i<109;i++);
25 1 }
26
27 void delay_4720us(void) //延时4.7ms
28 {
29 1 unsigned int k;
30 1 for(k=0;k<892;k++);
31 1 }
32
33 void delay_1ms(void) //延时1ms
34 {
35 1 unsigned int m;
36 1 for(m=0;m<124;m++);
37 1 }
38
39 void main()
40 {uchar H,L;
41 1 void Read_Key();
42 1 Init_Lcd();
43 1 while(1)
44 1 {
45 2 while(IRH);
46 2 Read_Key();
47 2
48 2 H=num/16;
49 2 L=num%16;
50 2 show[0]=num_to_char[H];
51 2 show[1]=num_to_char[L];
52 2 //Init_Lcd();
53 2 Characters_Disp(3,0,show);
54 2
55 2
C51 COMPILER V7.06 LC7461 04/01/2009 18:43:47 PAGE 2
56 2 }
57 1 while(1);
58 1 }
59 /*************中断服务程序***********/
60 void Read_Key()//int0() interrupt 0 using 0
61 {
62 1 char i,k,n,temp;
63 1 //EA=0;
64 1 /****以下跳过系统引导码****/
65 1 for(i=0;i<10;i++)
66 1 {
67 2 delay_880us();//延时882微秒后判断P3.2脚是否出现高电平如果有就退出解码程序
68 2 if(IRH==1)
69 2 {
70 3 flag=1;
71 3 break;
72 3 }// 重复10次,目的是检测在8820微秒内如果出现高电平就退出解码程序
73 2 else
74 2 flag=0;
75 2 }
76 1 if(flag==0)
77 1 { //
78 2 while(IRH==0);//等待高电平避开9毫秒低电平引导脉冲
79 2 delay_4720us();//延时4.74毫秒避开4.5毫秒的结果码
80 2 /****忽略26位识别码****/
81 2 for(i=0;i<26;i++)
82 2 {
83 3 while(IRH==0);
84 3 delay_880us();//高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
85 3 if(IRH==0)
86 3 continue;
87 3 else
88 3 delay_1ms();
89 3 }
90 2 /*处理用户操作码及反码*/
91 2 for(n=0;n<2;n++)
92 2 {
93 3 k=0X01;
94 3 for(i=0;i<8;i++)
95 3 {
96 4 while(IRH==0);//等待高电平
97 4 delay_880us();
98 4 if(IRH==0) //检测该位为0或1 并存储到temp
99 4 temp=temp&(~k);
100 4 else
101 4 {
102 5 delay_1ms();
103 5 temp=temp|k;
104 5 }
105 4 k=k<<1;
106 4 }
107 3 if(n==0) REM_h=temp; //n==0时temp为操作码存到REM_h,n==1时为操作反码存到REM_l
108 3 else REM_l=temp;
109 3 }
110 2 if((~REM_h)==REM_l)
111 2 {
112 3 num=REM_h;
113 3
114 3 //P1=REM_h;
115 3 }
116 2 }
117 1 //EA=1;
C51 COMPILER V7.06 LC7461 04/01/2009 18:43:47 PAGE 3
118 1 }
119
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 821 ----
CONSTANT SIZE = 32 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 26 23
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -