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

📄 cs23-2.lst

📁 《手把手教你学单片机的C程序设计》及实验程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 176   1      row=y1>>3;                                              //y1右移3位后赋予row,获得y方向的页地址
 177   1      Rddata();                                                       //读取列(x)地址、页(y)地址处的数据
 178   1      y=y1&0x07;                                              //计算出该页(1字节)内的y轴点位置地址
 179   1      x=0x01;
C51 COMPILER V7.06   CS23_2                                                                02/21/2007 15:26:33 PAGE 4   

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

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

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


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 + -