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

📄 lcd12864.lst

📁 基于MSP430F14X单片机的LCD12864的显示驱动程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 185          
 186          
 187          /*****************************************************************************************************
 188          * 函 数 名:     ClearDDRAM
 189          * 功能描述: 本函数为清DDRAM子函数
 190          * 全局变量: 无
 191          * 入口参数:     无
 192          * 出口参数:     无
 193          * 调用模块: WriteData(),SetPos()
 194          * 作   者:     王康
 195          * 日   期:     2008.8.6
 196          * 修 改 人:     王康
 197          * 日   期:
 198          * 版    本:     KEIL uV2
 199          ******************************************************************************************************/
 200          void ClearDDRAM(void)
 201          {
 202   1              uchar   i;                                                                                              //i表示页地址
 203   1              uchar   j;                                                                                              //j表示列地址
 204   1              for(i = 0; i < 8; i++)                                                                  //清右半屏
 205   1              {
 206   2                      //此处注意,起始行地址受到页地址的限制
 207   2                      SetPos(0, i, 0);                                                                        //设置起始行为第0行,起始页为第0页,起始列为第0列
 208   2                      for(j = 0; j < 64; j++)                                                         //将右半屏DRAM的64个字节全部清零
 209   2                      {
 210   3                              WriteData(0);
 211   3                      }
 212   2              }
 213   1              for(i = 0; i < 8; i++)                                                                  //清左半屏
 214   1              {
 215   2                      SetPos(0, i, 64);                                                                       //设置起始行为第0行,起始页为第0页,起始列为第64列
 216   2                      for(j = 0; j < 64; j++)                                                         //将左半屏DRAM的64个字节全部清零
 217   2                      {
 218   3                              WriteData(0);
 219   3                      }
 220   2              }
 221   1      }
 222          
 223          
 224          /*****************************************************************************************************
 225          * 函 数 名:     WriteWord
 226          * 功能描述: 本函数为在液晶屏的任意位置写单个汉字的子函数
 227          * 全局变量: 无
 228          * 入口参数:     st_line,显示的起始行,0--63
 229          *                       x_add,显示的页地址,0--7 
 230          *                       y_add,显示的列地址,0--63
 231          *                       Index[2],字符串数组,用来存储汉字
 232          * 出口参数:     无
 233          * 调用模块: WriteData(),SetPos()
 234          * 作   者:     王康
 235          * 日   期:     2008.8.6
 236          * 修 改 人:     王康
 237          * 日   期:
 238          * 版    本:     KEIL uV2
 239          ******************************************************************************************************/
 240          void WriteWord(uchar st_line, uchar x_add, uchar y_add, uchar Index[2])
 241          {
C51 COMPILER V7.50   LCD12864                                                              08/08/2008 00:58:17 PAGE 5   

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

 304          
 305          /*****************************************************************************************************
 306          * 函 数 名:     WriteSentence
 307          * 功能描述: 本函数为在液晶屏上写句子的子函数,按照0到31的顺序写入句子
 308          *                       从第0个字的位置开始写入汉字,写完一个之后字指针加1,继续写下一个汉字
 309          * 全局变量: 无
 310          * 入口参数:     sentence[],待写入汉字,组成字符串
 311          * 出口参数:     无
 312          * 调用模块: WriteWord(),strlen()
 313          * 作   者:     王康
 314          * 日   期:     2008.8.6
 315          * 修 改 人:     王康
 316          * 日   期:
 317          * 版    本:     KEIL uV2
 318          ******************************************************************************************************/
 319          void WriteSentence(uchar sentence[255])
 320          {
 321   1              uchar   i;
 322   1              uchar   j = 0;
 323   1              for(i = 0; i < strlen(sentence) / 2; i++)                               //strlen()为调用"string.h"中的函数,求字符串的长度
 324   1              {
 325   2                      //从sentence中两个两个的取字符串即汉字 注意不要弄半角的字符或标点符号,否则后面的汉字将找不到 
 326   2                      word_buf[i].word[0] = sentence[i * 2];
 327   2                      word_buf[i].word[1] = sentence[i * 2 + 1];
 328   2                      WriteFixWord(j++, word_buf[i].word);
 329   2              }
 330   1      }
 331          
 332          
 333          /*****************************************************************************************************
 334          * 函 数 名:     ScrolDisplay(调试未通过)
 335          * 功能描述: 本函数为在液晶屏上滚动显示句子的子函数
 336          *                       所谓滚动显示,即需要建立一个显示缓冲区
 337          * 全局变量: 无
 338          * 入口参数:     sentence[],待写入汉字,组成字符串
 339          * 出口参数:     无
 340          * 调用模块: WriteWord()
 341          * 作   者:     王康
 342          * 日   期:     2008.8.6
 343          * 修 改 人:     王康
 344          * 日   期:     
 345          * 版    本:     KEIL uV2
 346          ******************************************************************************************************/
 347          void ScrolDisplay(uchar sentence[255])
 348          {
 349   1              uchar   i = 0;
 350   1              uchar   j = 0;
 351   1              for(i = 0; i < strlen(sentence) / 2; i++)
 352   1              {
 353   2                      for(j = 0; j <= i; j++)
 354   2                      {
 355   3                              word_buf[i].word[0] = sentence[i * 2];
 356   3                              word_buf[i].word[1] = sentence[i * 2 + 1];
 357   3                              WriteFixWord(i,word_buf[i].word);
 358   3                      }
 359   2              }
 360   1      }
 361          
 362          


MODULE INFORMATION:   STATIC OVERLAYABLE
C51 COMPILER V7.50   LCD12864                                                              08/08/2008 00:58:17 PAGE 7   

   CODE SIZE        =    654    ----
   CONSTANT SIZE    =    986    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     64      20
   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 + -