📄 串口+8个键盘程序.lst
字号:
263 1 }
264 //----------------------------------------
265 //
266 // 刷新菜单功能函数
267 // 函数原形:void DIS12864M (void);
268 // 没有参数,没有返回值
269 // 调用方式:void DIS12864M (void);
270 //
271 //----------------------------------------
272
273 void DIS12864M (void)
274 {
275 1 unsigned char i,LineMete = Level[sOption[SelectIndex].KeyLevel][2]; //循环量,显示行数
276 1 SentAIns(0x30); //进入液晶普通指令模式
277 1 SentAIns(0x01); //清屏
278 1 do //分别显示各行菜单项
279 1 {//必须先显示汉字再反显,否则屏幕上是乱码
280 2 SentAIns(0x80);//------------------------ 行1
281 2 for(i=0;i<sOption[FirstLineDisIndex].WordMete;i++)//传达多少个字符 每显示4行FirstLineDisIndex+1
282 2 SentAData(sOption[FirstLineDisIndex].KeyWord[i]);//字符串数组首地址
283 2 if(--LineMete == 0) break;//行--
284 2 SentAIns(0x90); //------------------------ 行2
285 2 for(i=0;i<sOption[FirstLineDisIndex+1].WordMete;i++)
286 2 SentAData(sOption[FirstLineDisIndex+1].KeyWord[i]);
287 2 if(--LineMete == 0) break;
288 2 SentAIns(0x88); //------------------------ 行3
289 2 for(i=0;i<sOption[FirstLineDisIndex+2].WordMete;i++)
290 2 SentAData(sOption[FirstLineDisIndex+2].KeyWord[i]);
291 2 if(--LineMete == 0) break;
292 2 SentAIns(0x98); //------------------------ 行4
293 2 for(i=0;i<sOption[FirstLineDisIndex+3].WordMete;i++)
294 2 SentAData(sOption[FirstLineDisIndex+3].KeyWord[i]);
295 2 }while(0);
296 1 lat_disp (0x00,0x00);
297 1 SetALineReverse (SelectLine); //填充所需反白
298 1 }
299 //----------------------------------------
300 //
301 // 判断当前索引是否是表单第一项功能函数
302 // 函数原形:bit MenuLevelStart (void);
303 // 没有参数,返回Bit标志,是第一项返回1,不是返回0
C51 COMPILER V7.50 串口_8竉键盘程序 05/04/2007 10:30:05 PAGE 6
304 // 调用方式:bit MenuLevelStart (void);
305 //
306 //----------------------------------------
307 bit MenuLevelStart (void) //判断当前索引是否为当前层第一个选项
308 {
309 1 unsigned char i = MENULEVEL;// MENULEVEL存放的是当前菜单表个数=7;
310 1
311 1 do
312 1 {
313 2 i--;
314 2 if(SelectIndex == Level[i][0]) return 1;// SelectIndex存放的是当前选定行对应的索引号
315 2 }while(i); //为1说明是第一个菜单
316 1 return 0;
317 1 }
318 //----------------------------------------
319 //
320 // 判断当前索引是否是表单最后一项功能函数
321 // 函数原形:bit MenuLevelEnd (void);
322 // 没有参数,返回Bit标志,是最后一项返回1,不是返回0
323 // 调用方式:bit MenuLevelEnd (void);
324 //
325 //----------------------------------------
326 bit MenuLevelEnd (void)
327 {
328 1 unsigned char i = MENULEVEL; // MENULEVEL存放的是当前菜单表个数=7;
329 1 do
330 1 {
331 2 i--;
332 2 if(SelectIndex == Level[i][1]) return 1;
333 2 }while(i);
334 1 return 0;
335 1 }
336 //----------------------------------------
337 //
338 // 菜单上移一项函数
339 // 函数原形:void MenuUpOneOption (void);
340 // 没有参数,没有返回值
341 // 调用方式:void MenuUpOneOption (void);
342 //
343 //----------------------------------------
344 void MenuUpOneOption (void)
345 {
346 1 if(MenuLevelStart ()) //如果当前为表单第一项MenuLevelStart ()==1是第一项
347 1 {//因为128X64最多显示4行,大于等于4个的要分两次以上显示
348 2 if(Level[sOption[SelectIndex].KeyLevel][2]>=4)//表单中选项数目大于等于4个,取Level[n][2]第n行的第三个数据
349 2 {
350 3 FirstLineDisIndex = Level[sOption[SelectIndex].KeyLevel][1]-3; //第一行显示索引号为倒数第四项
351 3 SelectIndex = Level[sOption[SelectIndex].KeyLevel][1]; //选择索引为表单最后一项
352 3 SelectLine = 4; //标记选择行为第四行
353 3 DIS12864M (); //刷新屏幕显示
354 3 }
355 2 else //如果选项数目并不大于四个
356 2 {//因为128X64最多显示4行,小于等于4个的要一次显示
357 3 SelectIndex = Level[sOption[SelectIndex].KeyLevel][1]; //选择索引为当前表单最后一个
358 3 SelectLine = Level[sOption[SelectIndex].KeyLevel][2]; //显示行表单数目(最后一个)
359 3 DIS12864M (); //刷新屏幕显示
360 3 }
361 2 }
362 1 else //如果当前不是开始索引
363 1 {
364 2 if(SelectLine==1) //并且已经在屏幕最上边一行
365 2 {
C51 COMPILER V7.50 串口_8竉键盘程序 05/04/2007 10:30:05 PAGE 7
366 3 FirstLineDisIndex--; //显示索引上移
367 3 SelectIndex--; //选择索引自减
368 3 SelectLine = 1; //选择行还是第一行
369 3 DIS12864M (); //刷新屏幕
370 3 }
371 2 else //如果不是第一行
372 2 {
373 3 SelectLine--; //选择行自减
374 3 SelectIndex--; //选择索引自减
375 3 DIS12864M (); //刷新屏幕显示
376 3 }
377 2 }
378 1 }
379 //----------------------------------------
380 //
381 // 菜单下移一项函数
382 // 函数原形:void MenuDownOneOption (void);
383 // 没有参数,没有返回值
384 // 调用方式:void MenuDownOneOption (void);
385 //
386 //----------------------------------------
387 void MenuDownOneOption (void)
388 {
389 1 if(MenuLevelEnd ()) //如果当前是表单最后一个索引
390 1 {
391 2 FirstLineDisIndex = Level[sOption[SelectIndex].KeyLevel][0]; //第一行显示索引为表单第一个选项9
392 2 SelectIndex = Level[sOption[SelectIndex].KeyLevel][0]; //选择索引为表单第一个选项索引
393 2 SelectLine = 1; //选择行为第一行
394 2 DIS12864M (); //刷新显示
395 2 }
396 1 else //如果不是最后的索引
397 1 {
398 2 if(SelectLine!=4) //如果当前不是屏幕最底行(SelectLine是LCD液晶屏的最后一行)
399 2 {
400 3 SelectIndex++; //选择索引自加
401 3 SelectLine++; //选择行下移
402 3 SetALineReverse (SelectLine); //刷新选择行
403 3 DIS12864M (); //刷新显示
404 3 }
405 2 else //如果是屏幕最低行" 是LCD液晶屏的最后一行"
406 2 {
407 3 FirstLineDisIndex++; //第一行显示下移//将第一个先显示的行移走,换成它的下一行
408 3 SelectIndex++; //选择索引自加
409 3 DIS12864M(); //刷新显示
410 3 }
411 2 }
412 1 }
413 //----------------------------------------
414 //
415 // 某一项功能函数 实际应该改为实际功能函数
416 //
417 //----------------------------------------
418 void ShutDown (void)
419 {
420 1 unsigned char code font[] = {"系统关闭"};
421 1 unsigned char i;
422 1 SentAIns(0x01);
423 1 SentAIns(0x92);
424 1 for(i=0;i<8;i++) SentAData(font[i]);
425 1 }
426
427
C51 COMPILER V7.50 串口_8竉键盘程序 05/04/2007 10:30:05 PAGE 8
428
429 void MenuCancelOption(void);
430
431 void NoThisFunction (void)
432 {
433 1 unsigned char code Font[] = {"没有这个功能"};
434 1 unsigned int i,j;
435 1 SentAIns(0x01);
436 1 SentAIns(0x91);
437 1 for(i=0;i<12;i++) SentAData(Font[i]);
438 1 i = 65535;
439 1 j = 10;
440 1 do
441 1 {
442 2 do
443 2 {
444 3 i--;
445 3 }while(i);
446 2 j--;
447 2 }while(j);
448 1 MenuCancelOption();
449 1 }
450
451
452 void TemperatureShow(void)
453 {
454 1 unsigned char code Font[] = {"测试温度:"};
455 1 unsigned int i,j;
456 1 //TempConvert ();
457 1 SentAIns(0x01);
458 1 SentAIns(0x90);
459 1 for(i=0;i<10;i++) SentAData(Font[i]);
460 1 // for(i=0;i<6;i++) SentAData(TempFont[i]);
461 1 i = 65535;
462 1 j = 10;
463 1 do
464 1 {
465 2 do
466 2 {
467 3 i--;
468 3 }while(i);
469 2 j--;
470 2 }while(j);
471 1 MenuCancelOption();
472 1 }
473 //----------------------------------------
474 //
475 // 具体功能散转函数
476 // 函数原形:void FunctionAction
477 // 没有参数,没有返回值
478 // 调用方式:void FunctionAction (void);
479 //
480 //----------------------------------------
481 void FunctionAction (void)
482 {
483 1 switch (LastIndex) //根据进入前的索引LastIndex判断具体函数
484 1 {
485 2 case 8: ShutDown(); break;
486 2 case 5: TemperatureShow(); break;
487 2 default: NoThisFunction(); break; //如果没有具体操作,显示没有这个功能
488 2 }
489 1 }
C51 COMPILER V7.50 串口_8竉键盘程序 05/04/2007 10:30:05 PAGE 9
490 //----------------------------------------
491 //
492 // 进入某项功能函数
493 // 函数原形:void MenuEnterOption (void);
494 // 没有参数,没有返回值
495 // 调用方式:void MenuEnterOption (void);
496 //
497 //----------------------------------------
498 void MenuEnterOption (void)
499 {
500 1 LastIndex = SelectIndex; //标记进入前的索引号(以便判断具体功能)根据进入前的索引LastIndex判断具体函数
501 1 SelectIndex = sOption[SelectIndex].EnterIndex; //更新选择索引为之前索引号对应进入索引
502 1 if(SelectIndex != OPTIONMETE-1) //如果当前索引不是功能选择索引
503 1 {
504 2 FirstLineDisIndex = Level[sOption[SelectIndex].KeyLevel][0]; //第一行显示为进入表单第一项
505 2 SelectLine = 1; //设定第一行为选择行
506 2 DIS12864M (); //刷新菜单
507 2 }
508 1 else FunctionAction (); //如果是功能选择项,进入功能分支判断函数
509 1 }
510 //----------------------------------------
511 //
512 // 菜单退出功能函数
513 // 函数原形:void MenuCancelOption (void);
514 // 没有参数,没有返回值
515 // 调用方式:void MenuCancelOption (void);
516 //
517 //----------------------------------------
518 void MenuCancelOption (void)
519 {
520 1 if(SelectIndex != OPTIONMETE-1) //如果不是从功能返回
521 1 SelectIndex = sOption[SelectIndex].CancelIndex; //选择索引为选项返回索引
522 1 else //如果是从功能返回
523 1 SelectIndex = LastIndex; //索引等于进入前保存索引
524 1 if(Level[sOption[SelectIndex].KeyLevel][2]>=4) //如果返回表单选项数目大于4个
525 1 {
526 2 if(SelectIndex > Level[sOption[SelectIndex].KeyLevel][1]-3) //根据返回选项确定显示首项
527 2 {
528 3 FirstLineDisIndex = Level[sOption[SelectIndex].KeyLevel][1]-3;
529 3 SelectLine = 4-(Level[sOption[SelectIndex].KeyLevel][1]-SelectIndex);
530 3 DIS12864M (); //刷新显示
531 3 }
532 2 else //一般显示方式
533 2 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -