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

📄 lcddisplay.lst

📁 自己写的LCD驱动源代码
💻 LST
字号:
C51 COMPILER V8.05a   LCDDISPLAY                                                           09/21/2007 13:53:38 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE LCDDISPLAY
OBJECT MODULE PLACED IN LCDDisplay.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE LCDDisplay.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1                          #include <reg52.h>
   2          #include <stdio.h>
   3          #include <intrins.h>
   4          #include <absacc.h>
   5          #define uchar unsigned char
   6          #define uint unsigned int
   7          
   8          
   9          
  10          uchar com;                                                              //命令字
  11          uchar dat;                                                              //数据字
  12          
  13          
  14          sbit CSA = P1^4;                                                //*cs-1*/
  15          sbit CSB = P1^3;                                                //*cs-2*/
  16          sbit RS  = P1^2;                                                //*rs*/
  17          sbit RW  = P1^1;                                                //*r/w*/
  18          sbit EN  = P1^0;                                                //*enable*/
  19          
  20          
  21          void ReadStatus()                       //*判断"忙"状态*/
  22          {
  23   1              uchar busy;
  24   1              uchar temp;
  25   1              RS = 0;                             //*读时序控制1; RS=0表示进行的是指令操作*/
  26   1              RW = 1;                             //*读时序控制2; RW=1表示进行的是读操作*/
  27   1              do
  28   1              {
  29   2                      P0 = 0xff;                                              //*P0作输入*/
  30   2              EN = 1;                         //*读时序控制3; 使能信号置高*/ 
  31   2              busy = P0;                      //*P0代表端口1的内容*/
  32   2              EN = 0;                         //*读时序控制4; 使能信号置低*/
  33   2              temp=busy&0x80;               
  34   2           }while (temp!=0);
  35   1      }
  36          
  37          
  38          void WrLeftCom()                                                //*左屏写命令*/
  39          {
  40   1              CSA = 0;                                                        //选中左屏,0有效;
  41   1          CSB = 1;                                                    //右屏不被选中,1无效;
  42   1          ReadStatus();
  43   1              RS = 0;
  44   1          RW = 0;
  45   1          P0 = com;                                                   //*com表示命令的内容*/
  46   1          EN = 1;
  47   1          EN = 0;     
  48   1      }
  49          
  50          
  51          void WrRightCom()                                               //*写右屏命令*/
  52          {
  53   1              CSA = 1;
  54   1              CSB = 0;
  55   1          ReadStatus();
C51 COMPILER V8.05a   LCDDISPLAY                                                           09/21/2007 13:53:38 PAGE 2   

  56   1              RS = 0;
  57   1          RW = 0;
  58   1          P0 = com;
  59   1          EN = 1;
  60   1          EN = 0;     
  61   1      }
  62          
  63          
  64          void WrLeftData()                                               //*左屏写数据*/
  65          {
  66   1              CSA = 0;
  67   1          CSB = 1;
  68   1          ReadStatus();
  69   1              RS = 1;
  70   1          RW = 0;
  71   1          P0 = dat;                         
  72   1          EN = 1;
  73   1          EN = 0;
  74   1      }
  75          
  76          
  77          uchar RdLeftData()                      //读数据
  78          {
  79   1              uchar dat;
  80   1      
  81   1              CSA = 0;
  82   1          CSB = 1;
  83   1              ReadStatus();
  84   1      
  85   1              RS = 1;                                 //*读时序控制1; RS=1表示进行的是数据操作*/
  86   1              RW = 1;                                 //*读时序控制2; RW=1表示进行的是读操作*/
  87   1      
  88   1              P0 = 0xff;                                                      //*P0作输入*/
  89   1          EN = 1;                             //*读时序控制3; 使能信号置高*/ 
  90   1              dat = P0;
  91   1          EN = 0;                             //*读时序控制4; 使能信号置低*/
  92   1                            
  93   1              return(dat);
  94   1      }
  95          
  96          
  97          void WrRightData()                                              //*右屏写数据*/
  98          {
  99   1              CSA = 1;
 100   1              CSB = 0;
 101   1          ReadStatus();
 102   1              RS = 1;
 103   1          RW = 0;
 104   1          P0 = dat;                          
 105   1          EN = 1;
 106   1          EN = 0;
 107   1      }
 108          
 109          
 110          uchar RdRightData()                     //读数据
 111          {
 112   1              uchar dat;
 113   1      
 114   1              CSA = 1;
 115   1          CSB = 0;
 116   1              ReadStatus();
 117   1      
C51 COMPILER V8.05a   LCDDISPLAY                                                           09/21/2007 13:53:38 PAGE 3   

 118   1              RS = 1;                                 //*读时序控制1; RS=1表示进行的是数据操作*/
 119   1              RW = 1;                                 //*读时序控制2; RW=1表示进行的是读操作*/
 120   1      
 121   1              P0 = 0xff;                                                      //*P0作输入*/
 122   1          EN = 1;                             //*读时序控制3; 使能信号置高*/ 
 123   1              dat = P0;
 124   1          EN = 0;                             //*读时序控制4; 使能信号置低*/
 125   1                            
 126   1              return(dat);
 127   1      }
 128          
 129          
 130          void ClrFullScr()                                               //清全屏
 131          {
 132   1              uchar page=0;
 133   1              uchar column=0;
 134   1      
 135   1              for(page=0;page<8;page++)
 136   1          {
 137   2                      com =(0xb8 + page);                             //页地址设置
 138   2              WrLeftCom();
 139   2                      WrRightCom();
 140   2      
 141   2              com =0x40;                      //列地址设置
 142   2              WrLeftCom();
 143   2                      WrRightCom();
 144   2      
 145   2              for( column=0; column<64; column++)   //RAM清"0"
 146   2              {                              
 147   3                      dat =0x00;                  //由于列地址在操作完后会自动加1,
 148   3                                                                                      //因此只用设置初地址就行了
 149   3                  WrLeftData();
 150   3                  WrRightData();                  //RAM清0就是在所在单元写上数据0
 151   3                      }
 152   2              }
 153   1      }
 154          
 155          
 156          void LCDInit()                          //液晶初始化
 157          {               
 158   1              com =0xc0;                          //显示从第0行开始
 159   1              WrLeftCom();
 160   1              WrRightCom();
 161   1      
 162   1          com =0x3F ;                         //液晶显示开关打开
 163   1              WrLeftCom();
 164   1              WrRightCom();
 165   1      
 166   1              ClrFullScr();                                           //清全屏
 167   1      }
 168          
 169          
 170          void Display88Dot(uchar Row, uchar Col, uchar* Lib, uint Addr)  //Display a 8*8 dot array;                                                                                                      
 171          {                                                                                                       //Row:0~7 Col:0~15
 172   1              uchar OffsetCol = 0;
 173   1      
 174   1              Addr <<= 3;
 175   1              
 176   1              if((Row>7)||(Col>15))                           //防止越界
 177   1                      return;
 178   1              else if(Col>7)
 179   1              {
C51 COMPILER V8.05a   LCDDISPLAY                                                           09/21/2007 13:53:38 PAGE 4   

 180   2                      com = 0xb8 + Row;
 181   2                      WrRightCom();
 182   2                      
 183   2                      Col -= 8;
 184   2                      Col <<= 3;
 185   2                      com = 0x40 + Col;
 186   2                      WrRightCom();
 187   2      
 188   2                      for(OffsetCol=0; OffsetCol<8; OffsetCol++)
 189   2                      {
 190   3                              dat = Lib[OffsetCol + Addr];
 191   3                              WrRightData();
 192   3                      }       
 193   2              }
 194   1              else
 195   1              {
 196   2                      com = 0xb8 + Row;
 197   2                      WrLeftCom();
 198   2                      
 199   2                      Col <<= 3;
 200   2                      com = 0x40 + Col;
 201   2                      WrLeftCom();
 202   2      
 203   2                      for(OffsetCol=0; OffsetCol<8; OffsetCol++)
 204   2                      {
 205   3                              dat = Lib[OffsetCol + Addr];
 206   3                              WrLeftData();
 207   3                      }       
 208   2              }
 209   1      }
 210          
 211          
 212          main()
 213          {
 214   1              LCDInit();
 215   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    337    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2       7
   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 + -