📄 main.lst
字号:
C51 COMPILER V8.02 MAIN 02/06/2009 16:07:36 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include <reg52.h>
2 #define TIMEH 12 //基于22.1184M时钟晶振,数字越大,时间越长
3 #define TIMEL 50 //基于22.1184M时钟晶振,数字越大,时间越长
4 #define ROW P3 //矩阵按键接口定义
5 #define LINE P2 //矩阵按键接口定义
6
7 extern void timer_init(void);
8 extern void delay(unsigned int);
9 extern unsigned char scan_key(void);
10
11 unsigned char irm_code;
12 sbit QD = P1^0;
13
14 void main()
15 {
16 1 unsigned char tmp;
17 1 irm_code=0xff;
18 1 timer_init();
19 1 while(1) {
20 2 tmp = scan_key();
21 2 if(tmp!=0xff) {
22 3 if(irm_code==0xff) {//一次键值发射完成后会将irm_code置为0xff
23 4 irm_code = tmp; //键值传递
24 4 TR0 = 1; //启动定时器,完成编码发射
25 4 }
26 3 delay(10);//两次编码发射之间需要延时,连续发射会导致解码失败
27 3 }
28 2 }
29 1 }
30
31 void timer_init(void)
32 {
33 1 TMOD = 0x01;
34 1 TH0 = 0xff;
35 1 TL0 = 0xff;
36 1 EA = 1;
37 1 ET0 = 1;
38 1 TR0 = 0;
39 1 }
40
41 /*定时中断,红外编码*/
42 void timer_int(void) interrupt 1
43 {
44 1 static unsigned char i=0,flag=0;
45 1 QD=~QD;
46 1 if(i<10) { //连续发射5个“0”引导码
47 2 TH0 = 255-TIMEH/2;
48 2 TL0 = 255-TIMEL/2;
49 2 i++;
50 2 }
51 1 else if(i<18) { //数据编码
52 2 if((irm_code & 0x80)==0x80) {
53 3 TH0 = 255-TIMEH;
54 3 TL0 = 255-TIMEL;
55 3 irm_code <<= 1;
C51 COMPILER V8.02 MAIN 02/06/2009 16:07:36 PAGE 2
56 3 i++;
57 3 }
58 2 else {
59 3 TH0 = 255-TIMEH/2;
60 3 TL0 = 255-TIMEL/2;
61 3 if(flag) {
62 4 irm_code <<= 1;
63 4 i++;
64 4 }
65 3 flag ^= 0x01;
66 3 }
67 2 }
68 1 else {
69 2 TR0 = 0;
70 2 i=0;
71 2 QD=1;
72 2 irm_code=0xff;
73 2 TH0 = 0xff;
74 2 TL0 = 0xff;
75 2 }
76 1 }
77
78
79 void delay(unsigned int t)
80 {
81 1 unsigned char i;
82 1 while(t--) for(i=0;i<230;i++);
83 1 }
84
85 /*矩阵按键扫描*/
86 unsigned char scan_key(void)
87 {
88 1 unsigned char j,tmp;
89 1 static unsigned char i=0;
90 1 ROW = 255-(1<<i); //列扫描低电平有效,FE,FD,FB,F7
91 1 // tmp = LINE;
92 1 if(LINE!=0xff)
93 1 for(j=0;j<8;j++)
94 1 if(LINE==(255-(1<<j))) return (j+(i<<3));
95 1 i++; i&=0x03;
96 1 return(0xff);
97 1 }
*** WARNING C280 IN LINE 88 OF MAIN.C: 'tmp': unreferenced local variable
98
99
100
101
102
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 250 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 1
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -