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

📄 lcd.lst

📁 压缩包中包括多个常用的汇编
💻 LST
📖 第 1 页 / 共 5 页
字号:
 665          /* 输  入:                                                                 */
 666          /*         col           图型的起始位置0~121                                */
 667          /*         layer         图形的位置(Y坐标)0-下半部分 非0-上半部分           */
 668          /*         ascii_code    所要显示德ASCCII码                                 */
 669          /*         mode          显示模式,0正显,1反显                             */
 670          /*                                                                          */
 671          /* 输  出:无                                                               */
 672          /*                                                                          */
 673          /* 历史记录:                                                               */
 674          /*  spot          2005-06-28     Creat Inital version. (Version 1.0)        */
 675          /****************************************************************************/
C51 COMPILER V7.09   LCD                                                                   10/09/2005 20:45:34 PAGE 12  

 676          void disp_one_ascii(u_char col,u_char layer,u_char ascii_code,u_char mode)
 677          {
 678   1          u_char i,temp;
 679   1          temp = ascii_code;
 680   1          for (i=0; i<16; i++)                /*ASCII码显示占用16个字节*/
 681   1          {
 682   2              if (mode)
 683   2                  dot_buffer[i]=~ascii_tab[(ascii_code-0x20)*16 + i];
 684   2              else
 685   2                  dot_buffer[i]= ascii_tab[(ascii_code-0x20)*16 + i];
 686   2          }
 687   1          draw_bmp(col,layer,8,dot_buffer);
 688   1      }
 689          
 690          /****************************************************************************/
 691          /* 函数名:disp_ram_data                                                    */
 692          /* 功  能:显示小于14位的十进制数字                                         */
 693          /* 作  者:spot                                                             */
 694          /* 输  入:                                                                 */
 695          /*         col           图型的起始位置0~121                                */
 696          /*         layer         图形的位置(Y坐标)0-下半部分 非0-上半部分           */
 697          /*         n             所要显示的十进制数字长度                           */
 698          /*         mode          显示模式,0正显,1反显                             */
 699          /*                                                                          */
 700          /* 输  出:无                                                               */
 701          /*                                                                          */
 702          /* 历史记录:                                                               */
 703          /*  spot          2005-06-28     Creat Inital version. (Version 1.0)        */
 704          /****************************************************************************/
 705          void disp_ram_data(u_char col,u_char layer,u_char n,u_char mode)
 706          {
 707   1          while(n--)
 708   1          {
 709   2              if (mode)
 710   2                  disp_one_ascii(col,layer,disp_buffer[n]+0x30,1);
 711   2              else
 712   2                  disp_one_ascii(col,layer,disp_buffer[n]+0x30,0);
 713   2      
 714   2              col += 8;
 715   2          }
 716   1      }
 717          
 718          /****************************************************************************/
 719          /* 函数名:dprintf                                                          */
 720          /* 功  能:通用混合字串显示                                                 */
 721          /* 作  者:spot                                                             */
 722          /* 输  入:                                                                 */
 723          /*         col     图型的起始位置0~121                                      */
 724          /*         layer   图形的位置(Y坐标)0-下半部分 非0-上半部分                 */
 725          /*         ptr     显示字串指针                                             */
 726          /*         mode    显示模式,0正显,1反显                                   */
 727          /*                                                                          */
 728          /* 输  出:无                                                               */
 729          /*                                                                          */
 730          /* 历史记录:                                                               */
 731          /*  spot          2005-06-28     Creat Inital version. (Version 1.0)        */
 732          /****************************************************************************/
 733          void dprintf(u_char col,u_char layer,u_char *ptr,u_char mode)
 734          {
 735   1          u_char c1,c2;
 736   1          u_char i,j,k;
 737   1          u_char ulen;
C51 COMPILER V7.09   LCD                                                                   10/09/2005 20:45:34 PAGE 13  

 738   1          u_char ucol,ulayer;
 739   1      
 740   1          ulen = 0;
 741   1          ucol = col;
 742   1          ulayer = layer;
 743   1      
 744   1          while (ptr[ulen]!= 0)
 745   1          {
 746   2              ulen++;       /* 探测字串长度 */
 747   2          }
 748   1      
 749   1          i=0;
 750   1          while (i<ulen)
 751   1          {
 752   2              c1 = ptr[i];
 753   2              c2 = ptr[i+1];
 754   2      
 755   2              /* ASCII字符与汉字内码的区别在于128做分界;大于128的为汉字码 */
 756   2              if(c1 <=128)  /* ASCII */
 757   2              {
 758   3                  if (mode)
 759   3                      disp_one_ascii(ucol,ulayer,c1,1);
 760   3                  else
 761   3                      disp_one_ascii(ucol,ulayer,c1,0);
 762   3      
 763   3                  ucol+=8;
 764   3                  i++;      /* ASCII码的处理 */
 765   3              }
 766   2              else          /* 中文 */
 767   2              {
 768   3                  for (j=0; j<sizeof(hz16)/sizeof(hz16[0]); j++)
 769   3                  {         /* 查找定位当前汉字的点阵区 */
 770   4                      if ((c1 == hz16[j].index[0]) && (c2 == hz16[j].index[1]))
 771   4                          break;
 772   4                  }
 773   3      
 774   3                  for (k=0; k<32; k++)
 775   3                  {
 776   4                      if (mode)
 777   4                          dot_buffer[k]=~hz16[j].zimo[k];
 778   4                      else
 779   4                          dot_buffer[k]= hz16[j].zimo[k];
 780   4                  }
 781   3      
 782   3                  draw_bmp(ucol,ulayer,16,dot_buffer);
 783   3                  ucol += 16;
 784   3                  i += 2;   /* 中文的处理 */
 785   3              }
 786   2          }
 787   1      }
 788          
 789          
 790          /****************************************************************************/
 791          /* 函数名:num_to_buff                                                      */
 792          /* 功  能:将数值转换为ASCII序列,保存在全局变量显示缓冲区中,内部使用      */
 793          /* 作  者:spot                                                             */
 794          /* 输  入:num                                                              */
 795          /* 输  出:无                                                               */
 796          /*                                                                          */
 797          /* 历史记录:                                                               */
 798          /*  spot          2005-06-28     Creat Inital version. (Version 1.0)        */
 799          /****************************************************************************/
C51 COMPILER V7.09   LCD                                                                   10/09/2005 20:45:34 PAGE 14  

 800          void num_to_buff(u_int num)
 801          {
 802   1          u_int i=0;
 803   1          for (i=0; i<14; i++)
 804   1          {
 805   2              disp_buffer[i]=0;
 806   2          }
 807   1      
 808   1          for (i=0; i<10; i++)
 809   1          {
 810   2              disp_buffer[i] = num%10;
 811   2              num = num/10;
 812   2              if (num==0)
 813   2                  break;
 814   2          }
 815   1      }
 816          
 817          /****************************************************************************/
 818          /* 函数名:bcd_to_buff                                                      */
 819          /* 功  能:将BCD码转换为ASCII序列,保存在全局变量显示缓冲区中,内部使用     */
 820          /* 作  者:spot                                                             */
 821          /* 输  入:bcd                                                              */
 822          /* 输  出:无                                                               */
 823          /*                                                                          */
 824          /* 历史记录:                                                               */
 825          /*  spot          2005-08-28     Creat Inital version. (Version 1.0)        */
 826          /****************************************************************************/
 827          void bcd_to_buff(u_char bcd)
 828          {
 829   1          u_int i=0;
 830   1          for (i=0; i<14; i++)
 831   1          {
 832   2              disp_buffer[i]=0;
 833   2          }
 834   1      
 835   1          disp_buffer[0] = (bcd & 0x0f);
 836   1          disp_buffer[1] = ( (bcd & 0xf0) >> 4 );
 837   1      }
 838          
 839          /* 以下函数为固定液晶显示内容函数 */
 840          void show_title(void)
 841          {
 842   1          lcd_clr();
 843   1          dprintf(0,0,"   欢迎使用    ",0);
 844   1          dprintf(0,1,"圣通科技报警器 ",0);
 845   1      }
 846          
 847          void show_setmenu_a(void)
 848          {
 849   1          lcd_clr();
 850   1          dprintf(0,0,"a设置温度阈值  ",1);
 851   1          dprintf(0,1,"a设置模入阈值  ",0);
 852   1      }
 853          
 854          void show_setmenu_b(void)
 855          {
 856   1          lcd_clr();
 857   1          dprintf(0,0,"a设置温度阈值  ",0);
 858   1          dprintf(0,1,"a设置模入阈值  ",1);
 859   1      }
 860          
 861          void show_setmenu_c(void)
C51 COMPILER V7.09   LCD                                                                   10/09/2005 20:45:34 PAGE 15  

 862          {
 863   1          lcd_clr();
 864   1          dprintf(0,0,"a设置模入阈值  ",0);
 865   1          dprintf(0,1,"a设置光强阈值  ",1);
 866   1      
 867   1      }
 868          
 869          void show_setmenu_d(void)
 870          {
 871   1          lcd_clr();
 872   1          dprintf(0,0,"a设置模入阈值  ",1);
 873   1          dprintf(0,1,"a设置光强阈值  ",0);
 874   1      
 875   1      }
 876          
 877          /* 显示温度阈值上限设置 */
 878          void show_temp_limit_high(u_char high_limit, u_char low_limit)
 879          {
 880   1          lcd_clr();
 881   1          dprintf(0,0,"    温度阈值   ",0);
 882   1          dprintf(8,1,"上限",1);
 883   1          num_to_buff(high_limit);
 884   1          disp_ram_data(40,1,2,1);
 885   1      
 886   1          dprintf(71,1,"下限",0);
 887   1          num_to_buff(low_limit);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -