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

📄 lcd.lst

📁 万年历系统
💻 LST
字号:
C51 COMPILER V7.06   LCD                                                                   05/14/2009 00:04:43 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN LCD.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE LCD.c COMPACT BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /**********************************************************************
   2            LCD.C file
   3            类型定义
   4            作者:
   5            建立日期:
   6            修改日期:
   7            版本:V1.0
   8            版权所有,盗版必究。
   9            Copyright(C) 
  10            All rights reserved
  11          **********************************************************************/
  12          #include <reg51.h>
  13          #include <lcd.h>
  14          #include <HzCode.h>
  15          #include <intrins.h>
  16          #define uchar unsigned char
  17          #define uint  unsigned int
  18          #define LCD12864DataPort P1
  19          /******************************LCD I/O define*************************/
  20          sbit DI=P2^0;           //data or command select
  21          sbit RW=P2^2;           //read or write select 
  22          sbit EN=P2^1 ;       //enable read or write
  23          sbit CS1=P2^3 ;         // 0  
  24          sbit CS2=P2^4;          // 0
  25          
  26          
  27          /*******************************函数*********************************/
  28          void nop()
  29          {
  30   1       _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
  31   1      }
  32          
  33          /******************************************************************/
  34          void CheckState(void)
  35          {
  36   1      //  uchar dat;
  37   1        DI=0;
  38   1        RW=1;
  39   1        /*do{
  40   1           P1=0xFF;
  41   1               EN=1;
  42   1               dat=P1;
  43   1               EN=0;
  44   1               dat=dat&0x80;  //status read DB7  DB6  DB5  DB4  DB3  DB2  DB1  DB0  DB7=0时表示已经准备好 
  45   1               }while(dat);  */  //           busy 0  on/off  Rest 0    0    0    0
  46   1      }
  47          /******************************************************************/
  48          void WriteByte(uchar dat)
  49          {
  50   1       CheckState();
  51   1       DI=1;
  52   1       RW=0;
  53   1       LCD12864DataPort=dat;
  54   1       EN=1;
  55   1       EN=0;
C51 COMPILER V7.06   LCD                                                                   05/14/2009 00:04:43 PAGE 2   

  56   1      }
  57          /*****************************************************************/
  58          void SendComToLcd(uchar command)
  59          {
  60   1       CheckState();
  61   1       DI=0;
  62   1       RW=0;
  63   1       LCD12864DataPort=command;
  64   1       EN=1;
  65   1       EN=0;
  66   1      }
  67          /****************************************************************/
  68          //设定行地址(页)--X 0-7
  69          void SetLine(uchar line)
  70          {
  71   1       line=line&0x07;
  72   1       line=line|0xB8;
  73   1       SendComToLcd(line);
  74   1      }
  75          //设定列地址--Y 0-63
  76          void SetColumn(uchar column)
  77          {
  78   1       column=column&0x3f;
  79   1       column=column|0x40;
  80   1       SendComToLcd(column);
  81   1      }
  82          //设定显示开始行--XX
  83          void SetStartLine(uchar startline)
  84          {
  85   1       startline=startline|0xC0;
  86   1       SendComToLcd(startline);
  87   1      }
  88          //开关显示
  89          void SetOnOFF(uchar OnOff)
  90          {
  91   1       OnOff=OnOff|0x3E;
  92   1       SendComToLcd(OnOff);
  93   1      }
  94          /*******************************************************************/
  95          //选择屏幕
  96          //0 全屏 1 左屏 2 右屏
  97          void SelectScreen(uchar Screen)
  98          {
  99   1        switch(Screen)
 100   1        {
 101   2         case 0:
 102   2                        CS1=0;
 103   2                        nop();
 104   2                        CS1=0;
 105   2                        nop();
 106   2                        break;
 107   2              case 1:
 108   2                        CS1=1;
 109   2                        nop();
 110   2                        CS2=0;
 111   2                        nop();
 112   2                        break;
 113   2              case 2:
 114   2                    CS1=0;
 115   2                        nop();
 116   2                        CS2=1;
 117   2                        nop();
C51 COMPILER V7.06   LCD                                                                   05/14/2009 00:04:43 PAGE 3   

 118   2                        break;
 119   2              default:
 120   2                        break;
 121   2               
 122   2        }
 123   1      }
 124          /****************************************************************************/
 125          // clear screen
 126          void ClearScreen(uchar screen)
 127          {
 128   1       uchar i,j;
 129   1       SelectScreen(screen);
 130   1       for(i=0;i<8;i++)
 131   1       {   SetLine(i);
 132   2           for(j=0;j<64;j++)
 133   2               {
 134   3                WriteByte(0x00);
 135   3                }
 136   2        }
 137   1      }
 138          /***************************************************************************/
 139          //show 8*8 
 140          //lin(0--7) col(0--127)
 141          //address 字模首地址
 142          void Show8X8(uchar lin,uchar column,uchar *address)
 143          {
 144   1       uchar i;
 145   1       if(column<64)
 146   1       { 
 147   2        SelectScreen(1);
 148   2        SetLine(lin);
 149   2        SetColumn(column);
 150   2        for(i=0;i<8;i++)
 151   2         {
 152   3            if((column+i)<64)
 153   3                {
 154   4                 WriteByte(*(address+i));
 155   4                }
 156   3                else
 157   3                {
 158   4                 SelectScreen(2);
 159   4                 SetLine(lin);
 160   4                 SetColumn(column-64+i);
 161   4                 WriteByte(*(address+i));
 162   4                }
 163   3      
 164   3         }
 165   2        }
 166   1        else
 167   1        {
 168   2         SelectScreen(2);
 169   2         column=column-64;
 170   2         SetLine(lin);
 171   2         SetColumn(column);
 172   2         for(i=0;i<8;i++)
 173   2         {
 174   3          if(i+column<64)
 175   3               {
 176   4                WriteByte(*(address+i));
 177   4               }
 178   3              else
 179   3               {
C51 COMPILER V7.06   LCD                                                                   05/14/2009 00:04:43 PAGE 4   

 180   4                SelectScreen(1);
 181   4                SetLine(lin);
 182   4                SetColumn(column-64+i);
 183   4                WriteByte(*(address+i));
 184   4               }
 185   3         }
 186   2        }
 187   1      }
 188          /*******************************************************************************/
 189          //显示数字8*16
 190          //入口参数:lin 行值;column  列值;num 码表中的位置
 191          void ShowNumber(uchar lin,uchar column,uchar num)
 192          {
 193   1       uchar *address;
 194   1       address=&NumCode[num][0];
 195   1       Show8X8(lin,column,address);
 196   1       Show8X8(lin+1,column,address+8);
 197   1      }
 198          /******************************************************************************/
 199          //显示汉字16*16
 200          //入口参数:lin 行值;column  列值;num 码表中的位置
 201          void ShowChina(uchar lin,uchar column,uchar num) 
 202          {
 203   1       uchar *address;
 204   1       address=&HzCode[num][0];
 205   1       Show8X8(lin,column,address);
 206   1       Show8X8(lin,column+8,address+8);
 207   1       Show8X8(lin+1,column,address+16);
 208   1       Show8X8(lin+1,column+8,address+24);
 209   1      }
 210          
 211          /*****************************************************************************/
 212          void InitLCD()
 213          {
 214   1       uchar i=2000;
 215   1       while(i--);
 216   1       SetOnOFF(1);
 217   1       ClearScreen(1);
 218   1       ClearScreen(2);
 219   1       SetStartLine(0);
 220   1      }
 221          /*************************************************************************/
 222          
 223          void r_show8x8(uchar lin,uchar column,uchar *address)
 224          { 
 225   1              uchar i,r_data;
 226   1              if(column<64)
 227   1              {
 228   2                      SelectScreen(1); //如果列数<64则从第一屏上开始写
 229   2                      SetLine(lin);
 230   2                      SetColumn(column);
 231   2                      for(i=0;i<8;i++)
 232   2                      {
 233   3                              if(column+i<64)
 234   3                              {
 235   4                                      r_data = ~(*(address+i));
 236   4                                      WriteByte(r_data);
 237   4                              }
 238   3                              else
 239   3                              {
 240   4                                      SelectScreen(2);
 241   4                                      SetLine(lin);
C51 COMPILER V7.06   LCD                                                                   05/14/2009 00:04:43 PAGE 5   

 242   4                                      SetColumn(column-64+i);
 243   4                                      r_data = ~(*(address+i));
 244   4                                      WriteByte(r_data);
 245   4                              }
 246   3                      }
 247   2              }
 248   1              else 
 249   1              {
 250   2                      SelectScreen(2); //否则从第二屏上开始写
 251   2                      column-=64; //防止越界
 252   2                      SetLine(lin);
 253   2                      SetColumn(column);
 254   2                      for(i=0;i<8;i++)
 255   2                      {
 256   3                              if(column+i<64)
 257   3                              {
 258   4                                      r_data = ~(*(address+i));
 259   4                                      WriteByte(r_data);
 260   4                              }
 261   3                              else
 262   3                              {
 263   4                                      SelectScreen(1);
 264   4                                      SetLine(lin);
 265   4                                      SetColumn(column-64+i);
 266   4                                      r_data = ~(*(address+i));
 267   4                                      WriteByte(r_data);
 268   4                              }
 269   3                      }
 270   2              }
 271   1      }
 272          
 273          /**************************************************************************/
 274          
 275          void r_ShowNumber(uchar lin,uchar column,uchar num)
 276          {
 277   1              uchar *address;
 278   1              address=&NumCode[num][0];
 279   1              r_show8x8(lin,column,address);
 280   1              r_show8x8(lin+1,column,address+8);
 281   1      }
 282          
 283          void r_ShowChina(uchar lin,uchar column,uchar num) 
 284          {
 285   1       uchar *address;
 286   1       address=&HzCode[num][0];
 287   1       r_show8x8(lin,column,address);
 288   1       r_show8x8(lin,column+8,address+8);
 289   1       r_show8x8(lin+1,column,address+16);
 290   1       r_show8x8(lin+1,column+8,address+24);
 291   1      }


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