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

📄 display.lst

📁 该程序完成了在3566驱动下液晶显示的功能 (REG764单片机)
💻 LST
字号:
C51 COMPILER V7.50   DISPLAY                                                               07/07/2007 16:38:12 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE DISPLAY
OBJECT MODULE PLACED IN display.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE display.c OPTIMIZE(0,SPEED) DEBUG OBJECTEXTEND

line level    source

   1          
   2          
   3          #include<reg764.h>
   4          #include<intrins.h>
   5          #define dissda P1_7
   6          #define disscl P1_6
   7          unsigned char str_table[10]={0x5F,0x06,0x3D,0x2F,0x66,0x6B,0x7B,0x0E,0x7F,0x6F};
   8          
   9          unsigned char  error;
  10          unsigned char  turn;
  11          unsigned char  x1_4;
  12          //unsigned char  timer0=107;
  13          unsigned char  cell;
  14          unsigned char  hour;
  15          unsigned char  min;
  16          unsigned char  sec;
  17          unsigned char  timer1=200;
  18          
  19          struct store
  20          {
  21             unsigned char power_gross[8];
  22             unsigned char year_month_date[8];
  23             unsigned char ammeter_number[8];    
  24          }ddsd22j={"00700903","20060928","19830904"};
  25          
  26          void delay5()
  27          {
  28   1      _nop_();
  29   1      _nop_();
  30   1      _nop_();
  31   1      _nop_();
  32   1      _nop_();
  33   1      }
  34          
  35          void stop3566()
  36          {
  37   1              disscl=1;
  38   1              delay5();
  39   1              dissda=1;
  40   1              delay5();
  41   1              disscl=0;
  42   1              delay5();
  43   1      }
  44          void start3566()
  45          {
  46   1          disscl=1;
  47   1          delay5();
  48   1          dissda=1;
  49   1              delay5();
  50   1              dissda=0;
  51   1              delay5();
  52   1              disscl=0;
  53   1              delay5();
  54   1      }
  55          
C51 COMPILER V7.50   DISPLAY                                                               07/07/2007 16:38:12 PAGE 2   

  56          void write3566(unsigned char disdata)
  57          {
  58   1         unsigned char i;
  59   1         unsigned char disdata0;
  60   1         for (i=0;i<8;i++)
  61   1         {    
  62   2              disdata0=disdata; 
  63   2                      dissda=0;
  64   2                      if((disdata0&0x80)!=0)
  65   2                      dissda=1;
  66   2                      delay5();
  67   2                      disscl=1;
  68   2                      delay5();
  69   2                      disscl=0;
  70   2                      delay5();
  71   2                      disdata=disdata<<1;
  72   2          }
  73   1                  disscl=1;
  74   1                  delay5();
  75   1                  disscl=0;
  76   1                  delay5();
  77   1       }
  78          
  79          
  80          void dis_inter() interrupt 3
  81           {
  82   1          timer1=timer1-1;
  83   1              if(timer1>=1)
  84   1                {
  85   2             ;
  86   2                }
  87   1              else
  88   1            {
  89   2       //      turn=turn+1;
  90   2      //         if(turn>=0x05)
  91   2      //           turn=0x00;
  92   2                 sec=sec+1;
  93   2                 timer1=200;
  94   2                }
  95   1              TH1=0x3C;
  96   1              TL1=0xB0;
  97   1       }
  98          
  99          
 100          void latent(unsigned char null)
 101          {
 102   1       write3566(null);    
 103   1      }
 104          
 105          void dis_number()
 106          {
 107   1         unsigned char num;
 108   1         if(x1_4 != 0x00)
 109   1           write3566(0x5F | 0x80);//display "0" and "OFF"
 110   1         else 
 111   1               write3566(0x5F);//display "0"
 112   1           num=turn;
 113   1               num=num & 0x0F;
 114   1               if(num>=0x05)
 115   1                write3566(0x5F);
 116   1               else
 117   1                write3566(str_table[num]);
C51 COMPILER V7.50   DISPLAY                                                               07/07/2007 16:38:12 PAGE 3   

 118   1      
 119   1      }
 120          
 121          void dis_power_gross()
 122          {
 123   1         unsigned char k;
 124   1         unsigned char mid1;
 125   1         unsigned char comp=0;
 126   1      
 127   1         dis_number();
 128   1         for(k=0;k<8;k++)
 129   1         {
 130   2           if(ddsd22j.power_gross[k]==0x30 && comp==k)    
 131   2                 {
 132   3                 if((k==0 && x1_4 !=0x00)||(k==7 && cell != 0x00)) //latent the unused "0"
 133   3                         latent(0x00 | 0x80);
 134   3                 else
 135   3                         latent(0x00);
 136   3                         comp=comp+1;
 137   3                 }
 138   2           else 
 139   2                   {
 140   3      
 141   3                 mid1=(ddsd22j.power_gross[k] & 0x0F);//latent the high 4 bits
 142   3                 if((k==0 && x1_4 !=0x00) || k==5 || (k==7 && cell != 0x00))
 143   3                   write3566(str_table[mid1] | 0x80);
 144   3                         else
 145   3                           write3566(str_table[mid1]);
 146   3                       }
 147   2              }    
 148   1      }
 149          void dis_year_month_date()
 150          { 
 151   1          unsigned char mid1;
 152   1          unsigned char k;
 153   1      
 154   1         dis_number(); 
 155   1         for(k=0;k<8;k++)
 156   1         {
 157   2               mid1=ddsd22j.year_month_date[k] & 0x0F;//latent the high 4 bits
 158   2                       if((k==0 && x1_4 != 0x00) || (k==7 && cell != 0x00))
 159   2                     write3566(str_table[mid1] | 0x80);
 160   2                       else if((k==3) || (k==5))
 161   2                         write3566(str_table[mid1] | 0x80);
 162   2                   else 
 163   2                  write3566(str_table[mid1]);
 164   2              }    
 165   1      }
 166          
 167          void dis_time()
 168          {
 169   1         unsigned char h;
 170   1         unsigned char mid1;
 171   1                if(sec==0x0A || sec==0x1A || sec==0x2A || sec==0x3A || sec==0x4A || sec==0x5A)
 172   1               {
 173   2                 sec=sec & 0xF0;
 174   2                 sec=sec+0x10;
 175   2               }
 176   1             if(sec>=0x60)
 177   1               {
 178   2                 sec=0x00;
 179   2                     min=min+1;
C51 COMPILER V7.50   DISPLAY                                                               07/07/2007 16:38:12 PAGE 4   

 180   2                 if(min==0x0A || min==0x1A || min==0x2A || min==0x3A || min==0x4A || min==0x5A)       
 181   2                       {
 182   3                     min=min & 0xF0;
 183   3                     min=min+0x10;
 184   3                   }
 185   2                     if(min>=0x60)
 186   2                           {
 187   3                        min=0x00;
 188   3                                hour=hour+1;
 189   3                                        if(hour==0x0A || hour==0x1A)
 190   3                                          {
 191   4                            hour=hour & 0xF0;
 192   4                                                hour=hour+0x10;
 193   4                                              }
 194   3                                    if(hour>=0x24)
 195   3                                     hour=0x00;
 196   3                          }
 197   2                   }
 198   1      
 199   1      
 200   1         dis_number();
 201   1         if(x1_4 !=0x00)
 202   1           latent(0x00 | 0x80);
 203   1         else
 204   1               latent(0x00);
 205   1               latent(0x00);
 206   1           mid1=hour;
 207   1               h=hour;
 208   1           mid1=mid1>>4;
 209   1           write3566(str_table[mid1 & 0x0F]);
 210   1               write3566(str_table[h & 0x0F] | 0x80);
 211   1               mid1=min;
 212   1               h=min;
 213   1               mid1=mid1>>4;
 214   1           write3566(str_table[mid1 & 0x0F]);
 215   1               write3566(str_table[(h & 0x0F)]  | 0x80);
 216   1               mid1=sec;
 217   1               h=sec;
 218   1               mid1=mid1>>4;
 219   1           write3566(str_table[mid1 & 0x0F]);
 220   1               if(cell != 0x00)
 221   1                 write3566(str_table[h & 0x0F]  | 0x80 );
 222   1               else
 223   1                 write3566(str_table[h & 0x0F]);
 224   1           
 225   1      }
 226          void dis_ammeter_number()
 227          {
 228   1         unsigned char k;
 229   1         unsigned char mid1;
 230   1      
 231   1         dis_number();
 232   1         for(k=0;k<8;k++)
 233   1         {
 234   2             mid1=(ddsd22j.ammeter_number[k] & 0x0F);//latent the high 4 bits
 235   2                 if((k==0 && x1_4 !=0x00) ||(k==7 && cell !=0x00))
 236   2                  write3566(str_table[mid1] | 0x80);
 237   2                 else
 238   2                  write3566(str_table[mid1]);
 239   2         }
 240   1      
 241   1      }
C51 COMPILER V7.50   DISPLAY                                                               07/07/2007 16:38:12 PAGE 5   

 242          
 243          void dis_error()
 244          {
 245   1        unsigned char k;
 246   1        unsigned char mid1;
 247   1        unsigned char err1=error;
 248   1        unsigned char err2=error;
 249   1        err1=err1>>4;
 250   1        err1=err1 & 0x0F;
 251   1        err2=err2 & 0x0F;
 252   1        mid1=turn;
 253   1        if(x1_4 != 0x00)
 254   1           write3566(0x5F | 0x80);//display the first NO. and "OFF"
 255   1        else
 256   1           write3566(0x5F);
 257   1           mid1=mid1 & 0x0F;
 258   1           write3566(str_table[mid1] | 0x80);//display the second and NO.
 259   1          for(k=0;k<8;k++)
 260   1              {
 261   2            if((k==0 && x1_4 !=0x00)||(k==2))
 262   2                  latent(0x00 | 0x80);
 263   2                else if(k==6)
 264   2              write3566(str_table[err1]);
 265   2                else if(k==7 && cell!=0x00)
 266   2                  write3566(str_table[err2] | 0x80);
 267   2                else if(k==7 && cell==0x00)
 268   2                  write3566(str_table[err2]);      
 269   2                else
 270   2                  latent(0x00);
 271   2          } 
 272   1      
 273   1      
 274   1      }
 275          
 276          void display()
 277          { 
 278   1      
 279   1                 start3566();    //condition of start
 280   1                 
 281   1                 write3566(0x7C);// address of controller: 01111100
 282   1                 write3566(0xC8);//1:4 duo ji,1/3 pian zhi 11001000
 283   1                 write3566(0x80);//display from s0         10000000
 284   1                 write3566(0xE0);//A2/A1/A0:000            11100000
 285   1                 write3566(0x70);//colse lcd-fre.          01110000
 286   1      
 287   1                 switch(turn)
 288   1                 {
 289   2                    case 00: dis_power_gross();break;
 290   2                        case 01: dis_year_month_date();break;
 291   2                        case 02: dis_time();break;
 292   2                        case 03: dis_ammeter_number();break;
 293   2                        case 04: dis_error();break;
 294   2                default : dis_power_gross();break;
 295   2                 }
 296   1              
 297   1                 stop3566();     //condition of stop
 298   1      }
 299          
 300          
 301          void main()
 302          {
 303   1          TMOD=0x01;
C51 COMPILER V7.50   DISPLAY                                                               07/07/2007 16:38:12 PAGE 6   

 304   1              TH1=0x3c;
 305   1              TL1=0x7b0;
 306   1              IEN0=0x88;
 307   1              TCON=0x40;
 308   1              timer1=200;
 309   1          turn=0x02;
 310   1              error=0x00;
 311   1              x1_4=0x01;
 312   1              cell=0x01;
 313   1              hour=0x23;
 314   1              min =0x59;
 315   1              sec =0x50;
 316   1              while(1)
 317   1               display();    
 318   1      }


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