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