📄 红外线发射.lst
字号:
C51 COMPILER V9.00 红蚠线发蒧 07/22/2011 12:24:18 PAGE 1
C51 COMPILER V9.00, COMPILATION OF MODULE 红蚠线发蒧
OBJECT MODULE PLACED IN 红外线发射.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 红外线发射.c BROWSE DEBUG OBJECTEXTEND CODE
line level source
1 /***************************************************************
2 作品:红外线发射
3 单片机:STC89C52RC
4 晶振:12M
5 编译环境:Keil uVision4 V9.00
6 ***************************************************************/
7 //
8 // 发射引脚(接PNP三极管b极)
9 // PNP三极管e极接2Ω电阻,c极接红外发射管
10
11 #include <REG51.h>
12 #include <intrins.h>
13 #define uchar unsigned char
14 #define uint unsigned int
15
16 #define SBM 0x80 //识别码
17
18 #define m9 (65536-9000) //约9mS
19 #define m4_5 (65536-4500) //约4.5mS
20 #define m1_6 (65536-1630) //约1.65mS
21 #define m_65 (65536-580) //约0.65mS
22 #define m_56 (65536-560) //约0.56mS
23 #define m40 (65536-40000) //约40mS
24 #define m56 (65536-56000) //56mS
25 #define m2_25 (65536-2250) //约2.25mS
26
27 sbit IR = P3^6; //定义发射引脚(接PNP三极管基极)
28 sbit LED = P3^7; //发射指示灯
29
30 uchar KEY(void);
31 void SanZhuan(void);
32 void ZZ(uchar x);
33 void Z0(uchar temp);
34 void TT0(bit BT,uint x);
35 void YS(uchar time);
36
37 /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
38 函数功能:主函数
39 ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
40 void main(void)
41 {
42 1
43 1 TMOD = 0x01; //T0 16位工作方式
44 1 IR=1; //发射端口常态为高电平
45 1
46 1 while(1)
47 1 {
48 2 SanZhuan();
49 2 }
50 1 }
51 /***************************************************************
52 函数功能: 4×4矩阵键盘
53 键值
54 P1.0 P1.1 P1.2 P1.3 P1.4 P1.5 P1.6 P1.7
55 │ │ │ │ │ │ │ │ ┃
C51 COMPILER V9.00 红蚠线发蒧 07/22/2011 12:24:18 PAGE 2
56 │ │ │ └────13 14 15 16 ┃
57 │ │ └─────────9 10 11 12 ┃
58 │ └──────────────5 6 7 8 ┃
59 └────────────────────1 2 3 4 ┃
60 ***************************************************************/
61 uchar KEY(void)
62 {
63 1 uchar H,L; //行值,列值
64 1 H=0;
65 1 L=0;
66 1 P1 = 0xf0; //将键盘端口行值设为1,列值设为0
67 1 if(P1!= 0xf0) //检测是否有按键按下,如果有则hangval必不为0x0f
68 1 {
69 2 YS(10); //按键去抖动,延时10毫秒
70 2 if(P1!=0xf0) //确实有按键按下
71 2 {
72 3 H = P1&0xf0; //按键后得到按键的行标志位,将行标志位赋值给hangval
73 3 P1 = 0x0f; //翻转键盘接口输出
74 3 L = P1&0x0f; //得到列标志位
75 3 }
76 2 return (H+L);
77 2 }
78 1 return 0;
79 1 }
80 /***************************************************************
81 函数功能:散转程序
82 入口参数:v
83 //
84 // 13 14 15 16
85 // 9 10 11 12
86 // 5 6 7 8
87 // 1 2 3 4
88 ***************************************************************/
89 void SanZhuan(void)
90 {
91 1 uchar v;
92 1 v = KEY();
93 1
94 1 switch(v)
95 1 {
96 2 case 0x77:ZZ(0x01);v=0;break; //" "
97 2 case 0xb7:ZZ(0x02);v=0;break; //" "
98 2 case 0xd7:ZZ(0x03);v=0;break; //" "
99 2 case 0xe7:ZZ(0x04);v=0;break; //" "
100 2 case 0x7b:ZZ(0x05);v=0;break; //" "
101 2 case 0xbb:ZZ(0x06);v=0;break; //" "
102 2 case 0xdb:ZZ(0x07);v=0;break; //" "
103 2 case 0xeb:ZZ(0x08);v=0;break; //" "
104 2 case 0x7d:ZZ(0x09);v=0;break; //" "
105 2 case 0xbd:ZZ(0x10);v=0;break; //" "
106 2 case 0xdd:ZZ(0x11);v=0;break; //" "
107 2 case 0xed:ZZ(0x12);v=0;break; //" "
108 2 case 0x7e:ZZ(0x13);v=0;break; //" "
109 2 case 0xbe:ZZ(0x14);v=0;break; //" "
110 2 case 0xde:ZZ(0x15);v=0;break; //" "
111 2 case 0xee:ZZ(0x16);v=0;break; //" "
112 2 default:v=0;
113 2 }
114 1 }
115 /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
116 函数功能:发送主程序
117 ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
C51 COMPILER V9.00 红蚠线发蒧 07/22/2011 12:24:18 PAGE 3
118 void ZZ(uchar x)
119 {
120 1 TT0(1,m9); //高电平9mS
121 1 TT0(0,m4_5); //低电平4.5mS
122 1
123 1 /*┈ 发送4帧数据 ┈*/
124 1 Z0(SBM);
125 1 Z0(~SBM);
126 1 Z0(x);
127 1 Z0(~x);
128 1
129 1 /*┈┈ 结束码 ┈┈*/
130 1 TT0(1,m_65);
131 1 TT0(0,m40);
132 1
133 1 /*┈┈ 重复码 ┈┈*/
134 1 while(KEY())
135 1 {
136 2 TT0(1,m9);
137 2 TT0(0,m2_25);
138 2
139 2 TT0(1,m_56);
140 2 TT0(0,m40);
141 2 TT0(0,m56);
142 2
143 2 LED = !LED; //指示灯
144 2 }
145 1
146 1 LED = 1;
147 1
148 1 }
149 /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
150 函数功能:单帧发送程序
151 入口参数:1帧数据
152 ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
153 void Z0(uchar temp)
154 {
155 1 uchar v;
156 1 for (v=0;v<8;v++) //循环8次移位
157 1 {
158 2 TT0(1,m_65); //高电平0.65mS
159 2 if(temp&0x01) TT0(0,m1_6); //发送最低位
160 2 else TT0(0,m_56);
161 2 temp >>= 1; //右移一位
162 2 }
163 1 }
164
165 /*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈
166 函数功能:38KHz脉冲发射 + 延时程序
167 入口参数:(是否发射脉冲,延时约 x (uS))
168 ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
169 void TT0(bit BT,uint x)
170 {
171 1 TH0 = x>>8; //输入T0初始值
172 1 TL0 = x;
173 1 TF0=0; //清0
174 1 TR0=1; //启动定时器0
175 1 if(BT == 0) while(!TF0); //BT=0时不发射38KHz脉冲只延时;BT=1发射38KHz脉冲且延时;
176 1 else while(1) //38KHz脉冲,占空比5:26
177 1 {
178 2 IR = 0;
179 2 if(TF0)break;
C51 COMPILER V9.00 红蚠线发蒧 07/22/2011 12:24:18 PAGE 4
180 2 if(TF0)break;
181 2 IR = 1;
182 2 if(TF0)break;
183 2 if(TF0)break;
184 2 if(TF0)break;
185 2 if(TF0)break;
186 2 if(TF0)break;
187 2 if(TF0)break;
188 2 if(TF0)break;
189 2 if(TF0)break;
190 2 if(TF0)break;
191 2 if(TF0)break;
192 2 }
193 1 TR0=0; //关闭定时器0
194 1 TF0=0; //标志位溢出则清0
195 1
196 1 IR =1; //脉冲停止后,发射端口常态为高电平
197 1 }
198 /***************************************************************
199 函数功能:按键消抖 延时程序
200 入口参数:1ms×time (晶振=12MHz)
201 ***************************************************************/
202 void YS(uchar time)
203 {
204 1 uchar i,j;
205 1 for(i=0; i<time; i++)
206 1 for(j=0; j<247; j++)_nop_();
207 1 }
C51 COMPILER V9.00 红蚠线发蒧 07/22/2011 12:24:18 PAGE 5
ASSEMBLY LISTING OF GENERATED OBJECT CODE
; FUNCTION main (BEGIN)
; SOURCE LINE # 40
; SOURCE LINE # 41
; SOURCE LINE # 43
0000 758901 MOV TMOD,#01H
; SOURCE LINE # 44
0003 D2B6 SETB IR
0005 ?C0001:
; SOURCE LINE # 46
; SOURCE LINE # 47
; SOURCE LINE # 48
0005 120000 R LCALL SanZhuan
; SOURCE LINE # 49
0008 80FB SJMP ?C0001
; FUNCTION main (END)
; FUNCTION KEY (BEGIN)
; SOURCE LINE # 61
; SOURCE LINE # 62
; SOURCE LINE # 64
0000 E4 CLR A
0001 F500 R MOV H,A
; SOURCE LINE # 65
0003 F500 R MOV L,A
; SOURCE LINE # 66
0005 7590F0 MOV P1,#0F0H
; SOURCE LINE # 67
0008 E590 MOV A,P1
000A 64F0 XRL A,#0F0H
000C 6020 JZ ?C0004
; SOURCE LINE # 68
; SOURCE LINE # 69
000E 7F0A MOV R7,#0AH
0010 120000 R LCALL _YS
; SOURCE LINE # 70
0013 E590 MOV A,P1
0015 64F0 XRL A,#0F0H
0017 600F JZ ?C0005
; SOURCE LINE # 71
; SOURCE LINE # 72
0019 E590 MOV A,P1
001B 54F0 ANL A,#0F0H
001D F500 R MOV H,A
; SOURCE LINE # 73
001F 75900F MOV P1,#0FH
; SOURCE LINE # 74
0022 E590 MOV A,P1
0024 540F ANL A,#0FH
0026 F500 R MOV L,A
; SOURCE LINE # 75
0028 ?C0005:
; SOURCE LINE # 76
0028 E500 R MOV A,H
002A 2500 R ADD A,L
002C FF MOV R7,A
002D 22 RET
; SOURCE LINE # 77
002E ?C0004:
; SOURCE LINE # 78
C51 COMPILER V9.00 红蚠线发蒧 07/22/2011 12:24:18 PAGE 6
002E 7F00 MOV R7,#00H
; SOURCE LINE # 79
0030 ?C0006:
0030 22 RET
; FUNCTION KEY (END)
; FUNCTION SanZhuan (BEGIN)
; SOURCE LINE # 89
; SOURCE LINE # 90
; SOURCE LINE # 92
0000 120000 R LCALL KEY
;---- Variable 'v' assigned to Register 'R7' ----
; SOURCE LINE # 94
0003 EF MOV A,R7
0004 120000 E LCALL ?C?CCASE
0007 0000 R DW ?C0008
0009 77 DB 077H
000A 0000 R DW ?C0012
000C 7B DB 07BH
000D 0000 R DW ?C0016
000F 7D DB 07DH
0010 0000 R DW ?C0020
0012 7E DB 07EH
0013 0000 R DW ?C0009
0015 B7 DB 0B7H
0016 0000 R DW ?C0013
0018 BB DB 0BBH
0019 0000 R DW ?C0017
001B BD DB 0BDH
001C 0000 R DW ?C0021
001E BE DB 0BEH
001F 0000 R DW ?C0010
0021 D7 DB 0D7H
0022 0000 R DW ?C0014
0024 DB DB 0DBH
0025 0000 R DW ?C0018
0027 DD DB 0DDH
0028 0000 R DW ?C0022
002A DE DB 0DEH
002B 0000 R DW ?C0011
002D E7 DB 0E7H
002E 0000 R DW ?C0015
0030 EB DB 0EBH
0031 0000 R DW ?C0019
0033 ED DB 0EDH
0034 0000 R DW ?C0023
0036 EE DB 0EEH
0037 0000 DW 00H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -