📄 51.lst
字号:
199 2 else
200 2 continue;
201 2 if(i1==i2)//判断出有按键,查具体位置
202 2 {
203 3 P3_3=0; //检查第一行
204 3 P3_2=1;
205 3 P3_1=1;
206 3 P3_0=1;
207 3 if((P3&0xf0)!=0xf0)
208 3 j=0;
209 3
210 3 P3_3=1; //检查第二行
211 3 P3_2=0;
212 3 P3_1=1;
213 3 P3_0=1;
214 3 if((P3&0xf0)!=0xf0)
215 3 j=1;
216 3
217 3 P3_3=1; //检查第三行
218 3 P3_2=1;
219 3 P3_1=0;
220 3 P3_0=1;
221 3 if((P3&0xf0)!=0xf0)
222 3 j=2;
223 3
224 3 P3_3=1; //检查第四行
225 3 P3_2=1;
226 3 P3_1=1;
227 3 P3_0=0;
228 3 if((P3&0xf0)!=0xf0)
229 3 j=3;
230 3
231 3
232 3
233 3
234 3 do{
235 4 delay(5000);
236 4 P3_3=0;
237 4 P3_2=0;
238 4 P3_1=0;
239 4 P3_0=0;}
240 3 while(P3!=0xf0); //等到按键放开
241 3
C51 COMPILER V8.02 51 08/01/2007 23:05:27 PAGE 5
242 3
243 3
244 3 }
245 2 else
246 2 continue;
247 2
248 2 Key=list[j][i1];
249 2 if(Key==0x0b) //启动频率输出
250 2 {
251 3 start=1;
252 3 freqH=0xfe;
253 3 freqL=0x16;
254 3 // freqH=0xff;
255 3 // freqL=0xdf;
256 3 freq=1;
257 3 i=0;
258 3 TR1=1; //启动timer1
259 3 LCD_cmd(0x01);/*清屏*/
260 3 setxy(1,1);
261 3 LCD_string("Start at:");
262 3 setxy(2,1);
263 3 LCD_string("01kHz");
264 3 }
265 2
266 2 if(Key==0x0c) //停止频率输出
267 2 {
268 3 start=0;
269 3 i=0;
270 3 TR1=0; //停止timer1
271 3 setxy(1,1);
272 3 LCD_cmd(0x01);/*清屏*/
273 3 LCD_string("Stop");
274 3 setxy(2,1);
275 3 LCD_string("Press b to start");
276 3 }
277 2
278 2 if(start==1)
279 2 {
280 3
281 3 if(0x00<=Key&&Key<=0x09) //存储用户选择频率值
282 3 {
283 4 Keycode[i]=Key;
284 4 i++;
285 4 if(i==1)
286 4 {
287 5 setxy(2,0);
288 5 LCD_string(" "); //清第二行
289 5 }
290 4 setxy(2,i);
291 4 Keydata=Key+48;
292 4 LCD_char(Keydata);
293 4
294 4 if(i==2)
295 4 i=0;
296 4 }
297 3
298 3 if(Key==0x0a) //A为确认键
299 3 {
300 4 if(i==1)
301 4 continue;
302 4 i=0;
303 4 freq=Keycode[0]*10+Keycode[1];
C51 COMPILER V8.02 51 08/01/2007 23:05:27 PAGE 6
304 4 if(freq<=20)
305 4 {
306 5 TR1=0; //停止timer1
307 5 Tinit=0x10009-(uint)(500/freq); //12M晶振 10009的值可微调
308 5 // Tinit=0x10009-(uint)(1000/freq); //24M晶振替换上一句
309 5 freqH=(uchar)((Tinit&0xff00)>>8);
310 5 freqL=(uchar)(Tinit&0x00ff); //改变频率
311 5 TR1=1; //启动timer1
312 5 LCD_string("kHz");
313 5 }
314 4 else
315 4 {
316 5 setxy(2,1);
317 5 LCD_string("Out of range!");
318 5 }
319 4 }
320 3 if(Key==0x0d) //频率步进增加,步进0.5kHz
321 3 {
322 4 freq=freq+0.5;
323 4 if(freq>20)
324 4 freq=20; //超出20kHz不再增加
325 4 TR1=0; //停止timer1
326 4 Tinit=0x10009-(uint)(500/freq); //12M晶振 10009的值可微调
327 4 // Tinit=0x10009-(uint)(1000/freq); //24M晶振替换上一句
328 4 freqH=(uchar)((Tinit&0xff00)>>8);
329 4 freqL=(uchar)(Tinit&0x00ff); //改变频率
330 4 TR1=1; //启动timer1
331 4 setxy(2,1);
332 4 Keydata=(uchar)(freq/10); //取十位
333 4 temp1=Keydata;
334 4 LCD_char(Keydata+48);
335 4 Keydata=(uchar)(freq-Keydata*10); //取个位
336 4 LCD_char(Keydata+48);
337 4 if((freq-temp1*10-Keydata)!=0)
338 4 LCD_string(".5kHz");
339 4 else
340 4 LCD_string(".0kHz");
341 4 }
342 3 if(Key==0x0e) //频率步进减小,步进0.5kHz
343 3 {
344 4 freq=freq-0.5;
345 4 if(freq<1)
346 4 freq=1; //小于1kHz不再减小
347 4 TR1=0; //停止timer1
348 4 Tinit=0x10009-(uint)(500/freq); //12M晶振 10009的值可微调
349 4 // Tinit=0x10009-(uint)(1000/freq); //24M晶振 替换上一句
350 4 freqH=(uchar)((Tinit&0xff00)>>8);
351 4 freqL=(uchar)(Tinit&0x00ff); //改变频率
352 4 TR1=1; //启动timer1
353 4 setxy(2,1);
354 4 Keydata=(uchar)(freq/10); //取十位
355 4 temp1=Keydata;
356 4 LCD_char(Keydata+48);
357 4 Keydata=(uchar)(freq-Keydata*10); //取个位
358 4 LCD_char(Keydata+48);
359 4 if((freq-temp1*10-Keydata)!=0)
360 4 LCD_string(".5kHz");
361 4 else
362 4 LCD_string(".0kHz");
363 4 }
364 3 }
365 2 }
C51 COMPILER V8.02 51 08/01/2007 23:05:27 PAGE 7
366 1
367 1 }
368
369 void timer1(void) interrupt 3
370 {
371 1 TH1=freqH;
372 1 TL1=freqL;
373 1 P2_0=~P2_0; //输出方波
374 1 }
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1376 ----
CONSTANT SIZE = 86 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 18 26
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -