⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 串口+8个键盘程序.lst

📁 用stc89c51,单片机
💻 LST
📖 第 1 页 / 共 3 页
字号:
 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 + -