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

📄 text1.lst

📁 51单片机C语言编写的LCD1602的驱动程序
💻 LST
字号:
C51 COMPILER V7.09   TEXT1                                                                 09/05/2008 10:33:02 PAGE 1   


C51 COMPILER V7.09, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN Text1.OBJ
COMPILER INVOKED BY: R:\electronic\keilc51\C51\BIN\C51.EXE Text1.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <REG51RC2.h>
   2          #include <intrins.h>
   3          unsigned char  COM  ;           //command register
   4          unsigned char  DAT      ;               //data register
   5          
   6          /*unsigned char code CGTAB[64]={        0x08,0x0F,0x12,0x0F,0x0A,0x1F,0x02,0x02,        //"年"代码=00H 
   7                                                              0x0F,0x09,0x0F,0x09,0x0F,0x09,0x11,0x00,            //"月"代码=01H
   8                                                                  0x1F,0x11,0x11,0x1F,0x11,0x11,0x1F,0x00,        //"日"代码=02H
   9                                                                  0x11,0x0A,0x04,0x1F,0x04,0x1F,0x04,0x00,        //"$"代码=03H
  10                                                                  0x0E,0x00,0x1F,0x0A,0x0A,0x0A,0x13,0x00,        //"元"代码=04H
  11                                                                  0x18,0x18,0x07,0x08,0x08,0x08,0x07,0x00,        //"℃"代码=05H
  12                                                                  0x04,0x0A,0x15,0x04,0x04,0x04,0x04,0x00,        //"↑"代码=06H
  13                                                                  0x17,0x15,0x15,0x15,0x15,0x15,0x17,0x00};       //"10"代码=07H*/
  14          unsigned char code sanjiaobo[]={0x00,0x04,0xa0,0x11,0x00,0x00,0x00,0x00,                //第一行
  15                                                                          0x00,0x00,0x00,0x00,0x11,0xa0,0x04,0x00,                //第二行        
  16                                                                          0x00,0x04,0xa0,0x11,0x00,0x00,0x00,0x00,                //第三行
  17                                                                          0x00,0x00,0x00,0x00,0x11,0xa0,0x04,0x00,                //第四行
  18                                                                          0x00,0x04,0xa0,0x11,0x00,0x00,0x00,0x00,                //第五行
  19                                                                          0x00,0x00,0x00,0x00,0x11,0xa0,0x04,0x00,                //第六行
  20                                                                          0x00,0x04,0xa0,0x11,0x00,0x00,0x00,0x00,                //第七行
  21                                                                          0x00,0x00,0x00,0x00,0x11,0xa0,0x04,0x00,                //第八行
  22                                                                          };
  23          
  24          unsigned char code Tab_z[12]={0x42,0x43,0x44,0x41,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};
  25          
  26          sbit    Rs = P3^4;
  27          sbit    RW = P3^5;
  28          sbit    E  = P3^6;
  29          
  30          
  31          void Delay(unsigned int ms)
  32          {
  33   1              unsigned int i;
  34   1              while(ms--)
  35   1              {
  36   2                      for(i = 0; i< 250; i++){
  37   3                              _nop_();
  38   3                              _nop_();
  39   3                              _nop_();
  40   3                              _nop_();
  41   3                      }
  42   2              }
  43   1      }
  44          
  45          unsigned char ReadCommand(void)
  46          {
  47   1              unsigned char iData;
  48   1              Rs=0;
  49   1              RW=1;
  50   1              E=1;                    //延迟一段时间,建立控制信号
  51   1              _nop_();
  52   1              _nop_();
  53   1              _nop_();
  54   1              _nop_();
  55   1              iData=P1;
C51 COMPILER V7.09   TEXT1                                                                 09/05/2008 10:33:02 PAGE 2   

  56   1              return iData;
  57   1      }
  58          
  59          void WriteCommand(unsigned char command)
  60          {
  61   1              unsigned char wCom,rCom;
  62   1      
  63   1              wCom=command;
  64   1              rCom=ReadCommand();
  65   1              rCom=rCom&0x80;
  66   1              while(rCom!=0){                         //it is busy
  67   2                      rCom=ReadCommand();
  68   2                      rCom=rCom&0x80;
  69   2              }
  70   1              //it is not busy
  71   1      
  72   1              P1=wCom;
  73   1              RW=0;
  74   1              Rs=0;
  75   1              E=0;                                    //延迟一段时间,来建立信号
  76   1      
  77   1              _nop_();
  78   1              _nop_();
  79   1              E=1;
  80   1              _nop_();
  81   1              _nop_();
  82   1              _nop_();
  83   1              _nop_();
  84   1              E = 0; 
  85   1      }
  86          
  87          unsigned char ReadData(void)
  88          {
  89   1              unsigned char rData,rCom;
  90   1              rCom=ReadCommand();
  91   1              rCom=rCom&0x80;
  92   1              while(rCom!=0){                         //it is busy
  93   2                      rCom=ReadCommand();
  94   2                      rCom=rCom&0x80;
  95   2              }
  96   1              //it is not busy
  97   1              RW=1;
  98   1              Rs=1;
  99   1              E=1;//延迟一段时间控制时序
 100   1              _nop_();
 101   1              _nop_();
 102   1              _nop_();
 103   1              _nop_();
 104   1              rData=P1;
 105   1              return rData;
 106   1      }
 107          
 108          void WriteData(unsigned char dat)
 109          {
 110   1              unsigned char wData,rCom;
 111   1              wData=dat;
 112   1              rCom=ReadCommand();
 113   1              rCom=rCom&0x80;
 114   1              while(rCom!=0){                         //it is busy
 115   2                      rCom=ReadCommand();
 116   2                      rCom=rCom&0x80;
 117   2              }
C51 COMPILER V7.09   TEXT1                                                                 09/05/2008 10:33:02 PAGE 3   

 118   1              //it is not busy
 119   1      
 120   1              P1=wData;
 121   1              Rs=1;
 122   1              RW=0;
 123   1              E=0;
 124   1      
 125   1              _nop_();
 126   1              _nop_();
 127   1              _nop_();
 128   1              _nop_();
 129   1              E=1;                            //此时建立高电平准备下降沿,写数据
 130   1              _nop_();
 131   1              _nop_();                        //
 132   1              _nop_();
 133   1              _nop_();
 134   1              E = 0;
 135   1      }
 136          void LCDPosition(unsigned int pos)
 137          {
 138   1              WriteCommand(pos | 0x80);
 139   1      }
 140          void InitLCD(void)
 141          {
 142   1              COM=0x01;
 143   1              WriteCommand(COM);
 144   1              Delay(1);
 145   1      
 146   1      
 147   1              COM=0x38;                       //设置工作方式:8位数据接口,两行显示,5*7点阵字符(要显示5*11的数据就要将行显示设置为一行显示
             -)
 148   1              WriteCommand(COM);
 149   1              Delay(1);
 150   1      
 151   1              COM=0x06;                       //设置输入方式:数据读、写操作后,AC自动增一,数据读、写操作,画面不动
 152   1              WriteCommand(COM);
 153   1              Delay(1);
 154   1      
 155   1              COM=0x0c;                       //设置显示方式:显示开,光标开,闪烁开
 156   1              WriteCommand(COM);
 157   1              Delay(1);
 158   1      
 159   1      
 160   1              COM=0x40;
 161   1              WriteCommand(COM);//设置第一次显示地址
 162   1              Delay(1);
 163   1      
 164   1              COM=0x01;                       //清屏
 165   1              WriteCommand(COM);
 166   1              Delay(1);
 167   1      }
 168          
 169          /*void Creat_CGRAM(void)                                //调用自己的字库时如同调用CGROM一样
 170          {
 171                  unsigned char i,j,k,tmp;        
 172          
 173                  tmp=0x40;//设置CGRAM地址的格式字   CGRAM地址格式很复杂  01 000 000  其中01是固定的  左起第一个000是代码的
             -大小,最后的000是个偏移量(存储每个代码数据的偏移量)
 174                  k=0; 
 175                  for(j=0;j<8;j++) { 
 176                  for(i=0;i<8;i++) {  
 177                     WriteCommand(tmp+i); // 设置自定义字符的 CGRAM 地址   
C51 COMPILER V7.09   TEXT1                                                                 09/05/2008 10:33:02 PAGE 4   

 178                     Delay(12);
 179                     WriteData(CGTAB[k]); // 向CGRAM写入自定义字符表的数据 
 180                     k++; 
 181                     Delay(12); 
 182                   } 
 183                  tmp=tmp+8; //写完00H的8个数据后,转入写01H的8个数据  
 184                } 
 185          }
 186          
 187          void Display_input_CGRAM(void)
 188          {
 189                  unsigned char i;
 190          
 191                  COM=0x06;                       //设置输入方式:数据读、写操作后,AC自动增一,数据读、写操作,画面不动
 192                  WriteCommand(COM);
 193          
 194                  COM=0x80;                       //设置DDRAM
 195                  WriteCommand(COM);
 196          
 197                  for(i=0;i<=8;i++){
 198                          DAT=Tab_z[i];
 199                          WriteData(DAT);
 200                          Delay(10);
 201                  }
 202          }
 203          */
 204          void main(void)
 205          {
 206   1      //      unsigned char i;
 207   1              unsigned char i,j,k,tmp;
 208   1              InitLCD();
 209   1      
 210   1              Delay(100);
 211   1      
 212   1      /*      tmp=0x40;//设置CGRAM地址的格式字   CGRAM地址格式很复杂  01 000 000  其中01是固定的  左起第一个000是代码
             -的大小,最后的000是个偏移量(存储每个代码数据的偏移量)
 213   1              k=0; 
 214   1              for(j=0;j<8;j++) { 
 215   1              for(i=0;i<8;i++) {  
 216   1                 WriteCommand(tmp+i); // 设置自定义字符的 CGRAM 地址   
 217   1                 Delay(12);
 218   1                 WriteData(CGTAB[k]); // 向CGRAM写入自定义字符表的数据 
 219   1                 k++; 
 220   1                 Delay(12); 
 221   1               } 
 222   1              tmp=tmp+8; //写完00H的8个数据后,转入写01H的8个数据  
 223   1            } 
 224   1              //Creat_CGRAM();
 225   1              //Display_input_CGRAM();
 226   1              //Delay(1);
 227   1              
 228   1              COM=0x80;                       //设置DDRAM
 229   1              WriteCommand(COM);
 230   1      
 231   1              LCDPosition(0x00);
 232   1      
 233   1              Delay(1);
 234   1      
 235   1              for(i=0;i<10;i++){
 236   1                      DAT=Tab_z[i];
 237   1                      WriteData(DAT);
 238   1              }
C51 COMPILER V7.09   TEXT1                                                                 09/05/2008 10:33:02 PAGE 5   

 239   1              Delay(100);
 240   1      */      
 241   1              tmp=0x40;//设置CGRAM地址的格式字   CGRAM地址格式很复杂  01 000 000  其中01是固定的  左起第一个000是代码的
             -大小,最后的000是个偏移量(存储每个代码数据的偏移量)
 242   1              k=0; 
 243   1              for(j=0;j<8;j++) { 
 244   2              for(i=0;i<8;i++) {  
 245   3                 WriteCommand(tmp+i); // 设置自定义字符的 CGRAM 地址   
 246   3                 Delay(12);
 247   3                 WriteData(sanjiaobo[k]); // 向CGRAM写入自定义字符表的数据 
 248   3                 k++; 
 249   3                 Delay(12); 
 250   3               } 
 251   2              tmp=tmp+8; //写完00H的8个数据后,转入写01H的8个数据  
 252   2            } 
 253   1      
 254   1              COM=0x80;                       //设置DDRAM
 255   1              WriteCommand(COM);
 256   1      
 257   1              LCDPosition(0x00);
 258   1      
 259   1              Delay(1);
 260   1      
 261   1              for(i=0;i<4;i++){
 262   2                      DAT=Tab_z[i];
 263   2                      WriteData(DAT);
 264   2              }
 265   1              
 266   1              LCDPosition(0x40);
 267   1              for(i=4;i<12;i++){
 268   2                      DAT=Tab_z[i];
 269   2                      WriteData(DAT);
 270   2              }
 271   1              Delay(100);
 272   1              while(1);
 273   1      }


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