📄 testpromain.lst
字号:
229 2 TI=0;
230 2 }
231 1 EA=1;
232 1
233 1 }
234
235 char key1_flag=0;
236 char key2_flag=0;
237 void ext_int0() interrupt 0 //外部中断0服务程序
238 {
239 1 EA = 0;
C51 COMPILER V7.20 TESTPROMAIN 11/17/2005 10:16:36 PAGE 5
240 1 Delay(4000);
241 1 key1_flag=1;
242 1 EA = 1;
243 1 }
244 void ext_int1() interrupt 2 //外部中断1服务程序
245 {
246 1 EA = 0;
247 1 Delay(4000);
248 1 key2_flag=1;
249 1 EA = 1;
250 1 }
251
252 //中断源编号为4,即串口中断
253 void getch(void) interrupt 4
254 {
255 1
256 1 uchar m;
257 1 EA=0;
258 1 //清除中断标志,硬件置位,软件清零
259 1 RI=0;
260 1 //接受串口缓冲区数据
261 1 m=SBUF;
262 1 if(m==0x80) //向开发板串口发送的数据
263 1 {
264 2
265 2 test_serial();
266 2
267 2 }
268 1 //通过串口缓冲区向外发送数据
269 1 //SBUF=m;
270 1 //判断是否发送结束:TI==1为结束
271 1 //while(TI==0);
272 1 //发送结束标志清零
273 1 //TI=0;
274 1 EA=1;
275 1
276 1 }
277 /*
278 code char num_data[]={"0123456789"};
279 void send_serial_data(char dat)
280 {
281 SBUF=dat;
282 while(TI==0);
283 TI=0;
284 }
285 */
286
287 /*
288 void longdelay(uchar s) //长延时
289 {
290 while(s--)
291 {
292 _delay(60) ;
293 }
294 }
295 */
296 void _delay(uchar ms)
297 { // 延时子程序
298 1 uchar i ;
299 1 while(ms--)
300 1 {
301 2 for(i = 0 ; i<250;i++) ;
C51 COMPILER V7.20 TESTPROMAIN 11/17/2005 10:16:36 PAGE 6
302 2 }
303 1 }
304 /*
305 BOOL lcd_bz()
306 { // 测试LCD忙碌状态
307 BOOL result ;
308 rs = 0 ;
309 rw = 1 ;
310 ep = 1 ;
311 result = (BOOL)(P0 & 0x80) ;
312 ep = 0 ;
313 return result ;
314 }
315 */
316
317 void lcd_wcmd(uchar cmd)
318 { // 写入指令数据到LCD
319 1 //while(lcd_bz()) ;
320 1 _delay(1);
321 1 rs = 0 ;
322 1 rw = 0 ;
323 1 ep = 0 ;
324 1 P0 = cmd ;
325 1 ep = 1 ;
326 1 ep = 0 ;
327 1 }
328
329 void lcd_pos(uchar pos)
330 { //设定显示位置
331 1 lcd_wcmd(pos | 0x80) ;
332 1 }
333
334 void lcd_wdat(uchar dat)
335 { //写入字符显示数据到LCD
336 1 //while(lcd_bz()) ;
337 1 _delay(1);
338 1 rs = 1 ;
339 1 rw = 0 ;
340 1 ep = 0 ;
341 1 P0 = dat ;
342 1 ep = 1 ;
343 1 ep = 0 ;
344 1 }
345
346 void lcd_init()
347 { //LCD初始化设定
348 1 lcd_wcmd(0x38) ; //function set
349 1 _delay(1) ;
350 1 lcd_wcmd(0x38) ; //function set
351 1 _delay(1) ;
352 1 lcd_wcmd(0x08) ; //display on/off
353 1 _delay(1) ;
354 1 lcd_wcmd(0x01) ; //清除LCD的显示内容
355 1 _delay(1) ;
356 1 lcd_wcmd(0x06) ; //entry mode set
357 1 _delay(1) ;
358 1 lcd_wcmd(0x0c) ; //entry mode set
359 1 _delay(1) ;
360 1 }
361
362
363 void display(uchar pos, uchar *q)
C51 COMPILER V7.20 TESTPROMAIN 11/17/2005 10:16:36 PAGE 7
364 {
365 1 uchar i ;
366 1 //lcd_wcmd(0x01) ; //clear
367 1 _delay(10) ;
368 1 lcd_pos(pos) ;
369 1 for(i=0 ;i<16;i++)
370 1 {
371 2 lcd_wdat(*q) ;
372 2 q++ ;
373 2 _delay(60) ;
374 2 }
375 1 }
376
377 void test_lcd(void)
378 {
379 1 CE573=0; //1
380 1 display(0x00,dis1) ;
381 1 display(0x40,dis2) ;
382 1 display(0x14,dis1) ;
383 1 display(0x54,dis2) ;
384 1 P0=0xFF;
385 1 CE573=1; //0
386 1 }
387
388
389 main()
390 {
391 1
392 1 initmpu();
393 1 lcd_init();
394 1 Delay(10000);
395 1
396 1
397 1
398 1 test_led();
399 1 test_digseg();
400 1 test_beep();
401 1 test_lcd();
402 1
403 1 test_serial();
404 1
405 1 while(1)
406 1 {
407 2 if(key1_flag)
408 2 {
409 3 key1_flag=0;
410 3 P0=digseg[1];
411 3 P1=0xFE;
412 3
413 3
414 3
415 3 }
416 2 else if(key2_flag)
417 2 {
418 3 key2_flag=0;
419 3 P0=digseg[2];
420 3 P1=0xFC;
421 3
422 3 }
423 2 else if(check_K3())
424 2 {
425 3 P0=digseg[3];
C51 COMPILER V7.20 TESTPROMAIN 11/17/2005 10:16:36 PAGE 8
426 3 P1=0xF8;
427 3
428 3 }
429 2 else if(check_K4())
430 2 {
431 3 P0=digseg[4];
432 3 P1=0xF0;
433 3 }
434 2 else if(check_K5())
435 2 {
436 3 P0=digseg[5];
437 3 P1=0xE0;
438 3 }
439 2 SEL_D1;
440 2 _delay(600);
441 2 REL_D1;
442 2 _delay(600);
443 2
444 2 }
445 1
446 1
447 1
448 1
449 1
450 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 698 ----
CONSTANT SIZE = 361 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 1
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 + -