📄 1.lst
字号:
C51 COMPILER V8.02 1 06/10/2007 20:32:47 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE 1
OBJECT MODULE PLACED IN 1.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 1.c BROWSE DEBUG OBJECTEXTEND SRC(.\1.SRC)
line level source
1 #include<REG52.H>
2 #define uchar unsigned char
3 #define uint unsigned int
4 sbit sendport=P3^0;
5 uchar bdata address;
6 sbit ad7=address^7;
7 uchar bdata datafan;
8 sbit datafan7=datafan^7;
9 uchar bdata datayuan;
10 sbit datayuan7=datayuan^7;
11 uchar key=0x00;
12 bit m=0;
13
14
15 /*=========关显示==========*/
16
17 void undisplay()
18 {
19 1 P2=0x00;
20 1 P3=0x00;
21 1 }
22
23
24 /*=========延时函数==========*/
25
26 void delay(uint i)
27 {
28 1 while(--i);
29 1 }
30
31
32 /*=========键盘扫描函数1==========*/
33
34 uchar kbscan1()
35 {
36 1 uchar l=0;
37 1 P1=0xff;
38 1 if(P1==0xff) //没有键按下
39 1 while(1)
40 1 {
41 2 if(P1!=0xff)
42 2 break;
43 2 }
44 1
45 1 if(P1!=0xff) //有键按下
46 1 {
47 2 delay(0x04e1); //延时10毫秒
48 2 if(P1!=0xff) //确有键按下
49 2 {
50 3 switch(P1)
51 3 {
52 4 case 0xfe:l=0x06;break;
53 4 case 0xfd:l=0x5b;break;
54 4 case 0xfb:l=0x4f;break;
55 4 case 0xf7:l=0x66;break;
C51 COMPILER V8.02 1 06/10/2007 20:32:47 PAGE 2
56 4 case 0xef:l=0x6d;break;
57 4 case 0xdf:l=0x7d;break;
58 4 case 0xbf:l=0x07;break;
59 4 case 0x7f:l=0x01;break;
60 4 default: break; //读键值
61 4 }
62 3 }
63 2 }
64 1 return l;
65 1 }
66
67 /*=========键盘扫描函数2==========*/
68
69
70
71 uchar kbscan2()
72 {
73 1 uchar l=0;
74 1 P1=0xff;
75 1 if(P1==0xff) //没有键按下
76 1 while(1)
77 1 {
78 2 if(P1!=0xff)
79 2 break;
80 2 }
81 1 if(P1!=0xff) //有键按下
82 1 {
83 2 delay(0x04e1); //延时10毫秒
84 2 if(P1!=0xff) //确有键按下
85 2 {
86 3 switch(P1)
87 3 {
88 4 case 0xfe:l=0x7f;break;
89 4 case 0xfd:l=0x6f;break;
90 4 case 0xfb:l=0x77;break;
91 4 case 0xf7:l=0x7c;break;
92 4 case 0xef:l=0x39;break;
93 4 case 0xdf:l=0x5e;break;
94 4 case 0xbf:l=0x79;break;
95 4 case 0x7f:l=0x02;break;
96 4 default: break; //读键值
97 4 }
98 3 }
99 2 }
100 1 return l;
101 1 }
102
103 /*=========显示函数==========*/
104 void display(uchar n)
105 {
106 1 P2=n;
107 1 }
108
109 /*=========发射调制后的高电平函数==========*/
110 void sendh(uchar n)
111 {
112 1 uchar e;
113 1 sendport=1;
114 1 for(e=0;e<n;e++)
115 1 {
116 2 #pragma ASM
117 2 NOP
C51 COMPILER V8.02 1 06/10/2007 20:32:47 PAGE 3
118 2 NOP
119 2 NOP
120 2 NOP
121 2 #pragma ENDASM
122 2 sendport=!sendport;
123 2 }
124 1 }
125
126 /*=========发射函数==========*/
127 void send(uchar qq)
128 {
129 1 bit c;
130 1 uchar i;
131 1 datayuan=qq;
132 1 datafan=~qq;
133 1 sendh(0xef); //发送起始位 高电平
134 1 delay(0x007a); //发送起始位 低电平
135 1 address=0x55; //地址码
136 1
137 1 for(i=0;i<8;i++)
138 1 {
139 2 c=ad7;
140 2 if(c==1)
141 2 sendh(0x9f);
142 2 else
143 2 sendh(0x4f);
144 2 delay(0x0082);
145 2 address<<=1;
146 2 } //发送地址位
147 1
148 1 for(i=0;i<8;i++)
149 1 {
150 2 c=datayuan7;
151 2 if(c==1)
152 2 sendh(0x9f);
153 2 else
154 2 sendh(0x4f);
155 2 delay(0x0082); //发送数据位
156 2 datayuan=datayuan<<1;
157 2 }
158 1
159 1 for(i=0;i<8;i++)
160 1 {
161 2 c=datafan7;
162 2 if(c==1)
163 2 sendh(0x9f);
164 2 else
165 2 sendh(0x4f);
166 2 delay(0x0082);
167 2 datafan=datafan<<1;
168 2 } //发送数据反码
169 1 sendh(0x4f);
170 1 sendport=0; //发送结束位
171 1 }
172
173 /*=========初始化==========*/
174
175 void original()
176 {
177 1 undisplay(); //关显示
178 1 }
179
C51 COMPILER V8.02 1 06/10/2007 20:32:47 PAGE 4
180 /*==========键盘扫描函数==========*/
181
182 kbscan()
183 {
184 1 if(m==0)
185 1 {
186 2 key=kbscan1(); //键盘取值函数1
187 2 if(key==0x01)
188 2 {
189 3 m=1;
190 3 key=0x00;
191 3 }
192 2 }
193 1 else
194 1 {
195 2 key=kbscan2(); //键盘取值函数2
196 2 if(key==0x02)
197 2 {
198 3 m=0;
199 3 key=0x00;
200 3 }
201 2 }
202 1 return key;
203 1 }
204
205
206 /*========取发送数据==========*/
207 uchar qudata()
208 {
209 1 uchar y;
210 1 switch(key)
211 1 {
212 2 case 0x06:y=0x01;break;
213 2 case 0x5b:y=0x02;break;
214 2 case 0x4f:y=0x03;break;
215 2 case 0x66:y=0x04;break;
216 2 case 0x6d:y=0x05;break;
217 2 case 0x7d:y=0x06;break;
218 2 case 0x07:y=0x07;break;
219 2 case 0x7f:y=0x08;break;
220 2 case 0x6f:y=0x09;break;
221 2 case 0x77:y=0x0a;break;
222 2 case 0x7c:y=0x0b;break;
223 2 case 0x39:y=0x0c;break;
224 2 case 0x5e:y=0x0d;break;
225 2 case 0x79:y=0x0e;break;
226 2 default: break;
227 2 }
228 1 return y;
229 1 }
230
231 /*=========主程序==========*/
232 void main(void)
233 {
234 1 uchar senddata;
235 1 original(); //初始化
236 1
237 1 while(1)
238 1 {
239 2 kbscan(); //键盘取值函数
240 2
241 2 if(key!=0)
C51 COMPILER V8.02 1 06/10/2007 20:32:47 PAGE 5
242 2 {
243 3 display(key); //显示函数
244 3 senddata=qudata();
245 3 send(senddata); //发射函数
246 3 delay(0x30ce); //延时100ms
247 3 send(senddata); //发射函数
248 3 delay(0xf405); //延时0.5s
249 3 delay(0xf405); //延时0.5s
250 3 undisplay(); //关显示
251 3 key=0x00; //键值清零
252 3 }
253 2 }
254 1 }
255
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 606 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 4 3
IDATA SIZE = ---- ----
BIT SIZE = 1 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -