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

📄 lcd12864.lst

📁 本程序为12864点阵型液晶的驱动程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 247          void WriteWord(uchar st_line, uchar x_add, uchar y_add, uchar Index[2])
 248          {
 249   1              uchar   i;
 250   1              uchar   j;
 251   1              if(y_add < 64)
 252   1              {
 253   2                      LEFTSIDE
 254   2                      WriteCmd(y_add + 0x40);
 255   2              }
 256   1              else
 257   1              {
 258   2                      RIGHTSIDE
 259   2                      WriteCmd(y_add);
 260   2              }
 261   1              
 262   1              SetPos(st_line, x_add, y_add);                                                  //设置显示指针的位置            
 263   1      
 264   1              for(i = 0; i < 255; i++)
 265   1              {
 266   2                      //汉字作为双字节字符串处理 采用顺序检索方式查找结构体名
 267   2                      if((GB_16[i].Index[0] == Index[0]) && (GB_16[i].Index[1] == Index[1]))
 268   2                      {
 269   3                              for(j = 0; j < 16; j++)                                                 //先写上半字节
 270   3                              {
 271   4                                      WriteData(GB_16[i].Msk[j]);                             
 272   4                              }
 273   3      
 274   3                              SetPos(st_line, x_add + 1, y_add);                              //页地址加1,准备写下半字节
 275   3      
 276   3                              for(j = 16; j < 32; j++)
 277   3                              {
 278   4                                      WriteData(GB_16[i].Msk[j]);                                     //写下半字节
 279   4                              }
 280   3                              //break语句只能跳出一层循环
 281   3                              break;                                                                                  //break的用处是跳出for循环,以免重复写入
 282   3                      }
 283   2              }       
 284   1      }
 285          
 286          
 287          /*****************************************************************************************************
 288          * 函 数 名:     WriteFixWord
 289          * 功能描述: 本函数为在液晶屏的固定位置写汉字的子函数
 290          *                       因为液晶每行显示8个汉字,一共能显示32个汉字,因此add%32可以得到显示的字为第几个,
 291          *                       x_add只能为0,2,4,6;y_add只能为0,16,32,48,64,80,96,112.从而得到转换公式
 292          * 全局变量: 无
 293          * 入口参数:     add,指定地址范围为0--31,全屏可写32个字(16*16) 
 294          *                       Index[2],字符串数组,用来存储汉字
 295          * 出口参数:     无
 296          * 调用模块: WriteWord()
 297          * 版    本:     KEIL uV2
 298          ******************************************************************************************************/
 299          void WriteFixWord(uchar add, uchar Index[2])
 300          {
 301   1              uchar   st_line = 0;                                                                    //设置起始行为0
 302   1              uchar   x_add = add % 32 / 8 * 2;                                               //转换得到相应的x_add,y_add
 303   1              uchar   y_add = add % 32 % 8 * 16;
C51 COMPILER V7.50   LCD12864                                                              05/05/2009 20:58:41 PAGE 6   

 304   1              WriteWord(st_line, x_add, y_add, Index);                                //调用任意位置写单个汉字的子函数
 305   1      }
 306          
 307          
 308          /*****************************************************************************************************
 309          * 函 数 名:     WriteSentence
 310          * 功能描述: 本函数为在液晶屏上写句子的子函数,按照0到31的顺序写入句子
 311          *                       从第0个字的位置开始写入汉字,写完一个之后字指针加1,继续写下一个汉字
 312          * 全局变量: 无
 313          * 入口参数:     sentence[],待写入汉字,组成字符串
 314          * 出口参数:     无
 315          * 调用模块: WriteWord(),strlen()
 316          * 版    本:     KEIL uV2
 317          ******************************************************************************************************/
 318          void WriteSentence(uchar sentence[255])
 319          {
 320   1              uchar   i;
 321   1              uchar   j = 0;
 322   1              for(i = 0; i < strlen(sentence) / 2; i++)                               //strlen()为调用"string.h"中的函数,求字符串的长度
 323   1              {
 324   2                      //从sentence中两个两个的取字符串即汉字 注意不要弄半角的字符或标点符号,否则后面的汉字将找不到 
 325   2                      word_buf[i].word[0] = sentence[i * 2];
 326   2                      word_buf[i].word[1] = sentence[i * 2 + 1];
 327   2                      WriteFixWord(j++, word_buf[i].word);
 328   2              }
 329   1      }
 330          
 331          
 332          /*****************************************************************************************************
 333          * 函 数 名:     WriteNum
 334          * 功能描述: 本函数为在液晶屏的任意位置显示ASCII表的第几个字符
 335          * 全局变量: 无
 336          * 入口参数:     st_line, x_add, y_add, order
 337          * 出口参数:     无
 338          * 调用模块: SetPos(),WriteData()
 339          * 版    本:     KEIL uV2
 340          ******************************************************************************************************/
 341          void WriteNum(uchar st_line, uchar x_add, uchar y_add, uchar order)
 342          {
 343   1              uchar   i;
 344   1              uint    k;
 345   1              uchar   buf_x, buf_y;
 346   1      
 347   1              buf_x = x_add;
 348   1              buf_y = y_add;
 349   1      
 350   1              k = order * 0x10;                                                                               //因为每16个字节表示一个字符
 351   1                      
 352   1              for(i = 0; i < 8; i++)
 353   1              {
 354   2                      SetPos(st_line, x_add, y_add);                                                  //设置显示指针的位置    
 355   2                      WriteData(num[k]);
 356   2                      k++;
 357   2                      y_add++;
 358   2                      if(y_add > 127)
 359   2                      {
 360   3                              y_add = 0;
 361   3                              x_add++;
 362   3                              x_add++;
 363   3                      }
 364   2              }
 365   1              
C51 COMPILER V7.50   LCD12864                                                              05/05/2009 20:58:41 PAGE 7   

 366   1              x_add = buf_x + 1;
 367   1              y_add = buf_y;
 368   1      
 369   1              for(i = 0;i  < 8; i++)
 370   1              {
 371   2                      SetPos(st_line, x_add, y_add);                                                  //设置显示指针的位置    
 372   2                      WriteData(num[k]);
 373   2                      k++;
 374   2                      y_add++;
 375   2                      if(y_add > 127)
 376   2                      {
 377   3                              y_add = 0;
 378   3                              x_add++;
 379   3                              x_add++;
 380   3                      }               
 381   2              }       
 382   1      }
 383          
 384          
 385          /*****************************************************************************************************
 386          * 函 数 名:     WriteStr
 387          * 功能描述: 本函数为在液晶屏的任意位置显示显示一列数字
 388          * 全局变量: 无
 389          * 入口参数:     st_line, x_add, y_add, str
 390          * 出口参数:     无
 391          * 调用模块: SetPos(),WriteNum()
 392          * 版    本:     KEIL uV2
 393          ******************************************************************************************************/
 394          void WriteStr(uchar st_line, uchar x_add, uchar y_add, uchar *str)
 395          {
 396   1              uchar   i;
 397   1              uchar   j;
 398   1              uchar   k;
 399   1              uchar   n;
 400   1              i = 0;
 401   1      
 402   1              n = strlen(str);                                                                                //no表示数字的个数
 403   1      
 404   1              for(j = 0; j < n; j++)
 405   1              {
 406   2                      k = str[i] - 0x20;                                                                      //ASCII码转化为10进制数
 407   2                      WriteNum(st_line, x_add, y_add, k);                                     //调用显示字符子函数
 408   2                      y_add = y_add + 8;
 409   2                      i++;
 410   2                      if(y_add > 127)
 411   2                      {
 412   3                              y_add = 0;
 413   3                              x_add++;
 414   3                              x_add++;
 415   3                      }
 416   2              }
 417   1      }
 418          
 419          
 420          /*****************************************************************************************************
 421          * 函 数 名:     Printf_Num
 422          * 功能描述: 本函数为在液晶屏的任意位置显示变量中的浮点数
 423          * 全局变量: 无
 424          * 入口参数:     st_line, x_add, y_add, no
 425          * 出口参数:     无
 426          * 调用模块: SetPos(),WriteData()
 427          * 版    本:     KEIL uV2
C51 COMPILER V7.50   LCD12864                                                              05/05/2009 20:58:41 PAGE 8   

 428          ******************************************************************************************************/
 429          /*
 430          void Printf_Num(uchar st_line, uchar x_add, uchar y_add, float no)
 431          {
 432                  uchar   a[8];
 433                  if((no < 1.0) && (no > 0.0))
 434              {
 435                          no *= 1000;
 436                          a[0] = 0;
 437                          a[1] = 0;
 438                          a[2] = no/1000;
 439                          a[3] = 0;
 440                          a[4] = no/100 
 441                          a[5] = no%100/10 + 0x30; 
 442                          a[6] = no%100%10 + 0x30;
 443                          a[7] = 0;
 444                          WriteStr(st_line, x_add, y_add, a);
 445                  }
 446                  else if((no < 1.0) && (no > 0.0))
 447                  {
 448                          
 449                  }
 450          }
 451          */
 452          
 453          
 454          /*****************************************************************************************************
 455          * 函 数 名:     Disp_Init
 456          * 功能描述: 本函数为在液晶屏的显示最初界面
 457          * 全局变量: 无
 458          * 入口参数:     无
 459          * 出口参数:     无
 460          * 调用模块: WriteFixWord(),WriteStr()
 461          * 版    本:     KEIL uV2
 462          ******************************************************************************************************/
 463          void Disp_Init()
 464          {
 465   1                      WriteFixWord(0,"单");
 466   1                      WriteFixWord(1,"价");
 467   1                      WriteStr(0,0,32,":     0.00");
 468   1                      WriteFixWord(7,"元");
 469   1      
 470   1                      WriteFixWord(8,"重");
 471   1                      WriteFixWord(9,"量");
 472   1                      WriteStr(0,2,32,":     0.00");
 473   1                      WriteStr(0,2,112,"kg");
 474   1      
 475   1                      WriteFixWord(16,"金");
 476   1                      WriteFixWord(17,"额");
 477   1                      WriteStr(0,4,32,":     0.00");
 478   1                      WriteFixWord(23,"元");
 479   1      
 480   1                      WriteFixWord(24,"商");
 481   1                      WriteFixWord(25,"品");
 482   1                      WriteFixWord(26,"名");
 483   1                      WriteFixWord(27,"称");
 484   1                      WriteStr(0,6,64,":");
 485   1      }
 486          


MODULE INFORMATION:   STATIC OVERLAYABLE
C51 COMPILER V7.50   LCD12864                                                              05/05/2009 20:58:41 PAGE 9   

   CODE SIZE        =   1004    ----
   CONSTANT SIZE    =   2435    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     64      32
   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 + -