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

📄 x5045.lst

📁 C51 LCD 显示程序非常具有参考价值
💻 LST
字号:
C51 COMPILER V7.20   X5045                                                                 02/24/2005 17:41:00 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE X5045
OBJECT MODULE PLACED IN .\x5045.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE E:\BAK\V型机LCD程序2004-12-09\x5045.c OPTIMIZE(9,SPEED) BROWSE DEBUG OBJECT
                    -EXTEND PRINT(.\x5045.lst) TABS(8) OBJECT(.\x5045.obj)

line level    source

   1          /*-------------------------------------------------------
   2          X5045源程序
   3          
   4          --------------------------------------------------------*/
   5          #include "regx52.h"
   6          #include "x5045.h" 
   7          
   8          sbit SO=P2^5;
   9          sbit SI=P2^4;
  10          sbit SCK=P2^3;
  11          
  12          //片选择信号定义
  13          #define         RAMCS           0x00
  14          #define         LCDCS1          0x01
  15          #define         LCDCS2          0x02
  16          #define         LCDCS3          0x03
  17          #define         EEPCS           0x04//DOGCS
  18          #define         ROMCS           0x05
  19          #define         KEYCS           0x06
  20          #define         NOSET           0x07
  21          
  22          //25045可编程看门狗监控EEPROM指令集
  23          #define WREN 0x06 //00000110 //设置写使能锁存器(允许写操作)
  24          #define WRDI 0x04 //00000100 //复位写使能锁存器(禁止写操作)
  25          #define RDSR 0x05 //00000101 //读状态寄存器
  26          #define WRSR 0x01 //00000001 //写状态寄存器(块锁定)
  27          #define READ 0x03 //00000011 //从开始于所选地址的存储器列阵中读出数据
  28          #define WRTE 0x02 //00000010 //把数据写入开始于所选地址的存储器阵列中,1至4字节
  29          #define uchar unsigned char
  30          
  31          extern void p1tune(unsigned char temp);
  32          extern unsigned char idata disdata[32];
  33          
  34          //写使能子程序
  35          void wren_dog(void)
  36          {      
  37   1              
  38   1              SCK=0;//
  39   1              p1tune(EEPCS);//CS=0
  40   1              Write8(WREN);//
  41   1              SCK=0;//for debug
  42   1              p1tune(RAMCS);//CS=1
  43   1      }
  44          /*
  45          //写禁止子程序
  46          void wrdi_dog(void)
  47          {
  48                  unsigned char data i;
  49                  SCK=0;
  50                  p1tune(EEPCS);
  51                  i++;
  52                  Write8(WRDI);
  53                  SCK=0;
  54                  p1tune(RAMCS);
C51 COMPILER V7.20   X5045                                                                 02/24/2005 17:41:00 PAGE 2   

  55          
  56          }
  57          */
  58          //写状态寄存器
  59          void wrsr_dog(unsigned char status_reg)
  60          {
  61   1              
  62   1              while(rdsr_dog()&0x01==1) ;
  63   1              wren_dog();//使能“写”
  64   1              
  65   1              p1tune(EEPCS);
  66   1              
  67   1              Write8(WRSR);
  68   1              Write8(status_reg);
  69   1              
  70   1              p1tune(RAMCS);
  71   1              wip_poll();
  72   1      }
  73          
  74          
  75          //读状态寄存器
  76          unsigned char rdsr_dog(void)
  77          {
  78   1              // unsigned char com=0x05;//RDSR;
  79   1              unsigned char data cTemp;
  80   1      
  81   1              SCK=0;
  82   1              p1tune(EEPCS);
  83   1              Write8(RDSR);
  84   1              cTemp=Read8();
  85   1              
  86   1              SCK=0;
  87   1              p1tune(RAMCS);
  88   1              return(cTemp);
  89   1      }
  90          
  91          //字节读
  92          unsigned char byte_read(bit HiHalf,unsigned char Addr)
  93          {
  94   1              unsigned char data EepromData,ReadInstruct=0x00;
  95   1              //while(rdsr_dog()&0x01==1) {}
  96   1              EA=0;
  97   1              wren_dog();
  98   1                      
  99   1              SCK=0;
 100   1              p1tune(EEPCS);
 101   1              SO=1;
 102   1              SI=1;
 103   1              if(HiHalf)
 104   1                      ReadInstruct=0x08;
 105   1              //
 106   1              ReadInstruct|=READ;//READ;
 107   1              Write8(ReadInstruct);
 108   1              Write8(Addr);
 109   1              EepromData=Read8();
 110   1              SCK=0;
 111   1              EA=1;
 112   1              p1tune(RAMCS);
 113   1      
 114   1              return(EepromData);
 115   1              
 116   1      }
C51 COMPILER V7.20   X5045                                                                 02/24/2005 17:41:00 PAGE 3   

 117          //字节写
 118          
 119          void byte_write(bit HiHalf,unsigned char Addr,unsigned char Data)
 120          {
 121   1              unsigned char data WriteInstuct=0x00;
 122   1              //while(rdsr_dog()&0x01==1) {}
 123   1              
 124   1              wren_dog();
 125   1              SCK=0;
 126   1              p1tune(EEPCS);
 127   1              //SO=1;
 128   1              //SI=1;
 129   1              if(HiHalf)
 130   1                      WriteInstuct=0x08;
 131   1              WriteInstuct|=WRTE;//WRTE;
 132   1              Write8(WriteInstuct);
 133   1              Write8(Addr);
 134   1              Write8(Data);
 135   1              p1tune(RAMCS);
 136   1              wip_poll();
 137   1              
 138   1      }
 139          
 140          //检验写操作是否结束。
 141          unsigned char wip_poll(void)
 142          {
 143   1              unsigned int i;
 144   1              unsigned char wip;
 145   1              for(i=0x1ff;i>0;i--) 
 146   1              {
 147   2                      wip=rdsr_dog();
 148   2                      wip&=0x01;
 149   2                      if(wip==0) break;
 150   2              }
 151   1              return(wip);
 152   1      
 153   1      }
 154          
 155          //单字节指令或数据写入X25045
 156          //在SI线上输入的数据在SCK的上升沿被锁存。
 157          void Write8(unsigned char byt)
 158          {
 159   1              unsigned char data i;
 160   1                         
 161   1              for(i=0;i<8;i++)
 162   1              {       if((byt&0x80)==0)//
 163   2                              SI=0;//
 164   2                      else//
 165   2                              SI=1;// //
 166   2                      SCK=0; 
 167   2                      SCK=1;
 168   2                      byt=byt<<1; 
 169   2              }
 170   1              
 171   1      }
 172          //单字节数据从X25045读到单片机
 173          //数据由SCK的下降沿输出到SO线上。
 174          unsigned char Read8(void)
 175          {
 176   1              unsigned char i,j;
 177   1              unsigned char byt;
 178   1              bit bTemp;
C51 COMPILER V7.20   X5045                                                                 02/24/2005 17:41:00 PAGE 4   

 179   1              
 180   1              for(i=0;i<8;i++)
 181   1              {
 182   2                      SCK=1;
 183   2                      j++;
 184   2                      SCK=0;
 185   2      
 186   2                      bTemp=SO; 
 187   2                                      
 188   2                      if(bTemp)
 189   2                              byt|=0x01;
 190   2                      if(i<7)
 191   2                              byt=byt<<1; 
 192   2              
 193   2              }
 194   1      
 195   1              return (byt);
 196   1      }
 197          
 198          void page_write(uchar Addr,uchar idata *DataAddr,uchar DataLen)
 199          { //地址最高地址与最低地址A8位必须相同
 200   1              unsigned char data WriteInstuct=0x00;
 201   1              unsigned char data i,j;
 202   1              EA=0;
 203   1              /*
 204   1              //while(rdsr_dog()&0x01==1) {}
 205   1              wren_dog();
 206   1              SCK=0;
 207   1              p1tune(EEPCS);
 208   1      
 209   1              //SO=1;
 210   1              //SI=1;
 211   1              if(Addr>=256)
 212   1                      WriteInstuct=0x08;
 213   1              WriteInstuct|=WRTE;//WRTE;
 214   1              Write8(WriteInstuct);
 215   1              Write8(Addr);
 216   1              for(i=0;i<DataLen;i++)
 217   1              {
 218   1                      j=*DataAddr;
 219   1                      Write8(j);
 220   1                      SCK=0;
 221   1      
 222   1              }
 223   1              p1tune(RAMCS);
 224   1              wip_poll();
 225   1              */
 226   1              for(i=0;i<DataLen;i++,DataAddr++,Addr++)
 227   1              {       
 228   2                      j=*DataAddr;
 229   2                      wrsr_dog(0x30); //写使能
 230   2                      byte_write(0,Addr,j);
 231   2                      wrsr_dog(0x3e);//写保护
 232   2              }
 233   1              EA=1;
 234   1      
 235   1      }
 236          
 237          void page_read(uchar Addr,uchar idata *DataAddr,uchar DataLen) 
 238          {
 239   1              unsigned char data ReadInstruct=0x00;
 240   1              //while(rdsr_dog()&0x01==1) {}
C51 COMPILER V7.20   X5045                                                                 02/24/2005 17:41:00 PAGE 5   

 241   1              
 242   1              uchar i;
 243   1              EA=0;
 244   1              /*
 245   1              wren_dog();
 246   1                      
 247   1              SCK=0;
 248   1              p1tune(EEPCS);
 249   1              SO=1;
 250   1              SI=1;
 251   1              if(Addr>=256)
 252   1                      ReadInstruct=0x08;
 253   1              //
 254   1              ReadInstruct|=READ;//READ;
 255   1              Write8(ReadInstruct);
 256   1              
 257   1              Write8(Addr);
 258   1      
 259   1              SCK=0;
 260   1              
 261   1              for(i=0;i<DataLen;i++)
 262   1              {
 263   1                      
 264   1                      *DataAddr=Read8();                      
 265   1              
 266   1              }
 267   1              */
 268   1              for(i=0;i<DataLen;i++,DataAddr++,Addr++)
 269   1              {
 270   2                      *DataAddr=byte_read(0,Addr);
 271   2              
 272   2              }
 273   1              EA=1;
 274   1              
 275   1      }
 276          
 277          
 278          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    379    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      23
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       3
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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