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

📄 cs23-2.lst

📁 LCD 128*64 的驱动软件 和适合学习的人 带全部解释
💻 LST
📖 第 1 页 / 共 2 页
字号:
 174   1      x=0x01;
 175   1      x=x<<y;                                                 //移入所画点
 176   1      Wrdata(cbyte|x);                                        //画上屏幕
 177   1      col=x1;                                                 //恢复x、y座标
 178   1      row=y1;
 179   1      }                                                               //画点子函数结束
C51 COMPILER V8.02   CS23_2                                                                09/15/2008 16:50:43 PAGE 4   

 180          /***************全屏幕清屏子函数**********************/
 181          void Lcmcls(void)                               //函数名为Lcmcls的全屏幕清屏子函数
 182          {                                                       //函数开始
 183   1       for(row=0;row<8;row++)
 184   1              {for(col=0;col<LCMLIMIT;col++)
 185   2              Wrdata(0);}                             //将数据0写到屏幕
 186   1      }                                                       //函数结束
 187          
 188          /**********************全屏幕置黑子函数**********************/
 189          void Lcmclsxx(void)                     //函数名为Lcmclsxx的全屏幕置黑子函数
 190          {                                                       //函数开始
 191   1       for(row=0;row<8;row++)
 192   1      for(col=0;col<LCMLIMIT;col++)
 193   1      Wrdata(255);                                    //将8位数据全1(255)写到屏幕
 194   1      }                                                       //函数结束
 195          /*************读取液晶x列、y页座标处的数据至全局变量cbyte中************/   
 196          void Rddata(void)               //函数名为Rddata的子函数                                                      
             -     
 197          {                                                       //函数开始
 198   1      Locatexy();                                     //座标定位
 199   1      DataPort=0xff;                                  //LCM口置全1
 200   1      RS=1;                                           //选择数据寄存器
 201   1      RW=1;                                   //选择读
 202   1      EN=1;                                           //使能
 203   1      cbyte=DataPort;                         //虚读一次
 204   1      EN=0;                                           //禁能
 205   1      Locatexy();                                     //座标定位
 206   1      DataPort=0xff;                                  //LCM口置全1
 207   1      RS=1;                                           //选择数据寄存器
 208   1      RW=1;                                   //选择读
 209   1      EN=1;                                           //使能
 210   1      cbyte=DataPort;                         //读取数据(真读)
 211   1      EN=0;                                           //禁能
 212   1      }                                                               //函数结束
 213          /**************将数据X写入液晶x列、y页座标处***********/
 214          void Wrdata(uchar X)   //函数名为Wrdata 的子函数,定义X为无符号字符型变量                                 
             -                      
 215          {                                                       //函数开始
 216   1      Locatexy();                                     //座标定位
 217   1      RS=1;                                           //选择数据寄存器
 218   1      RW=0;                                   //选择写
 219   1      DataPort=X;                                     //将数据X写入LCM口
 220   1      EN=1;                                           //使能
 221   1      EN=0;                                           //禁能
 222   1      }                                                       //函数结束
 223          /******************写命令至左区********************/
 224          void WrcmdL(uchar X)    //函数名为WrcmdL 的子函数,定义X为无符号字符型变量
 225          {                                                       //函数开始
 226   1      lcdbusyL();                                     //调用左区判忙子函数
 227   1      RS=0;                                           //选择指令寄存器
 228   1      RW=0;                                   //选择写
 229   1      DataPort=X;                                     //数据输出至数据口
 230   1      EN=1;EN=0;                              //使能,禁能
 231   1      }                                                       //函数结束
 232          
 233          /********************写命令至中区************************/
 234          void WrcmdM(uchar X)    //函数名为WrcmdM的子函数,定义X为无符号字符型变量
 235          {                                                       //函数开始
 236   1      lcdbusyM();                                     //调用中区判忙子函数
 237   1      RS=0;                                           //选择指令寄存器
 238   1      RW=0;                                   //选择写
 239   1      DataPort=X;                                     //数据输出至数据口
C51 COMPILER V8.02   CS23_2                                                                09/15/2008 16:50:43 PAGE 5   

 240   1      EN=1;EN=0;                              //使能,禁能
 241   1      }                                                       //函数结束
 242          /**************写命令至右区****************
 243          void WrcmdR(uchar X) //函数名为WrcmdR的子函数,定义X为无符号字符型变量
 244          {                                                       //函数开始
 245          lcdbusyR();                                     //调用右区判忙子函数
 246          RS=0;                                           //选择指令寄存器
 247          RW=0;                                   //选择写
 248          DataPort=X;                                     //数据输出至数据口
 249          EN=1;EN=0;                              //使能,禁能
 250          }                                                       //函数结束
 251          ***********************左区判忙子函数***********************/
 252          void lcdbusyL(void)             //函数名为lcdbusyL 的左区判忙子函数
 253          {                                               //函数开始
 254   1      CS1=1;CS2=0;    //选中左区
 255   1      wtcom();                                        //调用判忙等待子函数
 256   1      }                                               //函数结束
 257          
 258          void lcdbusyM(void)             //函数名为lcdbusyM的中区判忙子函数
 259          {                                               //函数开始
 260   1      CS1=0;CS2=1;    //选中中区
 261   1      wtcom();                                        //调用判忙等待子函数
 262   1      }                                               //函数结束
 263          
 264          /*void lcdbusyR(void)           //函数名为lcdbusyR的右区判忙子函数(这里不用)
 265          {                                               //函数开始
 266          CS1=?;CS2=?;    //根据所用LCM器件决定取值
 267          wtcom();                                        //调用判忙等待子函数
 268          }*/                                             //函数结束
 269          /***********公用判忙等待子函数********************/
 270          void wtcom(void)                        //函数名为wtcom 的公用判忙等待子函数
 271          {                                               //函数开始
 272   1      RS=0;                                   //选择指令寄存器
 273   1      RW=1;                           //选择读
 274   1      DataPort=0xff;                          //数据0xff输出至数据口
 275   1      EN=1;                                   //使能
 276   1      while(DataPort&Lcdbusy);//      若LCM忙则等待
 277   1      EN=0;                                   //禁能
 278   1      }                                               //函数结束
 279          /************根据设定的col、row座标数据,定位LCM下一个操作单元************/
 280          void Locatexy(void)             //函数名为Locatexy 的子函数
 281          {                                               //函数开始
 282   1      uchar x,y;                                      //定义x,y为无符号字符型变量
 283   1      switch(col&0xc0)                        //限定x列最大值为192
 284   1      {
 285   2      case 0:{lcdbusyL();break;}      //判左区忙
 286   2      case 0x40:{lcdbusyM();break;}   //判中区忙
 287   2      //case 0x80:{lcdbusyR();break;} //判右区忙(这里不用)
 288   2      }
 289   1      
 290   1      x=col&0x3f|SETX;                        //获得x列(0~63)地址
 291   1      y=row&0x07|SETY;                //获得y页(0~7)地址
 292   1      
 293   1      wtcom();                                                //调用判忙等待子函数
 294   1      RS=0;                                           //选择指令寄存器
 295   1      RW=0;                                   //选择写
 296   1      DataPort=y;                                     //y页地址传送至LCM口
 297   1      EN=1;EN=0;                              //使能,禁能
 298   1      wtcom();                                                //调用判忙等待子函数
 299   1      RS=0;                                           //选择指令寄存器
 300   1      RW=0;                                   //选择写
 301   1      DataPort=x;                                     //x列地址传送至LCM口
C51 COMPILER V8.02   CS23_2                                                                09/15/2008 16:50:43 PAGE 6   

 302   1      EN=1;EN=0;                              //使能,禁能
 303   1      }                                                       //函数结束
 304          /*******************液晶屏初始化******************************/
 305          void Lcminit(void)                      //函数名为Lcminit的液晶屏初始化子函数
 306          {                                                       //函数开始
 307   1      reset();                                        //调用复位子函数
 308   1      cbyte=DISPFIRST;                                //定义起始行为0行
 309   1      WrcmdL(cbyte);                          //写命令至左区
 310   1      WrcmdM(cbyte);                          //写命令至中区
 311   1      //WrcmdR(cbyte);                                //写命令至右区(这里不用)
 312   1      cbyte=DISPOFF;                          //关闭显示屏
 313   1      WrcmdL(cbyte);                          //写命令至左区
 314   1      WrcmdM(cbyte);                          //写命令至中区
 315   1      //WrcmdR(cbyte);                                //写命令至右区(这里不用)
 316   1      cbyte=DISPON;                           //打开显示屏
 317   1      WrcmdL(cbyte);                          //写命令至左区
 318   1      WrcmdM(cbyte);                          //写命令至中区
 319   1      //WrcmdR(cbyte);                                //写命令至右区(这里不用)
 320   1      Lcmcls();                                               //清屏
 321   1      Delay(10000);                                   //延时一会
 322   1      Lcmclsxx();                                     //全屏置黑
 323   1      Delay(10000);                                   //延时一会
 324   1      Lcmcls();                                               //清屏
 325   1      Delay(30000);                                   //延时一会
 326   1      col=0;                                          //定位x方向为0列
 327   1      row=0;                                          //定位y方向为0页
 328   1      Locatexy();                                     //定位0列、0页为LCM下一个操作单元
 329   1      }                                                       //函数结束
 330          /*********************延时子函数**********************/
 331          void Delay(unsigned long MS)    
 332          {                                               
 333   1      while(MS!=0)MS--;               
 334   1      }                                               
 335          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    877    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      3      20
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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