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

📄 shizhong.lst

📁 基于89S52的1602LCD时钟显示
💻 LST
字号:
C51 COMPILER V8.08   SHIZHONG                                                              09/16/2008 11:47:09 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE SHIZHONG
OBJECT MODULE PLACED IN shizhong.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE shizhong.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include "reg51.h"
   2          #define uchar unsigned char
   3          sbit RW=P3^1;
   4          sbit RS=P3^0;
   5          sbit E=P3^2;
   6          bit at=0;
   7          //sbit busy_bit=P1^7;
   8          uchar code shen[]={"CLOCK!"};
   9          uchar code word[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x20};
  10          uchar dispbuf[8],h,m,s,counter;
  11          
  12           
  13          
  14          void delay()
  15          {
  16   1        uchar i;
  17   1       for(i=0;i<255;i++);
  18   1      }
  19          
  20           
  21          
  22          /*******写命令**********/
  23          void lcd_wmc(uchar i)
  24          {
  25   1      
  26   1        P0=i;
  27   1        RS=0;
  28   1        RW=0;
  29   1        E=0;
  30   1        delay();
  31   1        E=1;
  32   1      }
  33          
  34           
  35          
  36          /*******写数据***********/
  37          
  38          void lcd_wmd(uchar i)
  39          {
  40   1      
  41   1        P0=i;
  42   1        RS=1;
  43   1        RW=0;
  44   1        E=0;
  45   1        delay();
  46   1        E=1;
  47   1      }
  48          
  49           
  50          
  51          
  52          /*******初始化液晶*******/
  53          void lcd_init()
  54          {
  55   1        uchar i;
C51 COMPILER V8.08   SHIZHONG                                                              09/16/2008 11:47:09 PAGE 2   

  56   1        lcd_wmc(0x01);
  57   1        lcd_wmc(0x38);
  58   1        lcd_wmc(0x0c);
  59   1        lcd_wmc(0x06);
  60   1        lcd_wmc(0xc9);
  61   1        for(i=0;i<6;i++)
  62   1        lcd_wmd(shen[i]);
  63   1        lcd_wmc(0xc0);
  64   1      }
  65          
  66           
  67          
  68           
  69          
  70          /*******更新缓冲区子程序*******/
  71          void newbuf()
  72          {
  73   1       dispbuf[0]=s%10;
  74   1       dispbuf[1]=s/10;
  75   1       dispbuf[3]=m%10;
  76   1       dispbuf[4]=m/10;
  77   1       dispbuf[6]=h%10;
  78   1       dispbuf[7]=h/10;
  79   1      }
  80          
  81           
  82          
  83          /*******显示子程序**********/
  84          void disp(uchar dispadd)
  85          {
  86   1         uchar tmp;
  87   1         lcd_wmc(dispadd);
  88   1         tmp=dispbuf[7];
  89   1         tmp=word[tmp];
  90   1         lcd_wmd(tmp);
  91   1         tmp=dispbuf[6];
  92   1         tmp=word[tmp];
  93   1         lcd_wmd(tmp);
  94   1         tmp=dispbuf[5];
  95   1         tmp=word[tmp];
  96   1         lcd_wmd(tmp);
  97   1         tmp=dispbuf[4];
  98   1         tmp=word[tmp];
  99   1         lcd_wmd(tmp);
 100   1         tmp=dispbuf[3];
 101   1         tmp=word[tmp];
 102   1         lcd_wmd(tmp);
 103   1         tmp=dispbuf[2];
 104   1         tmp=word[tmp];
 105   1         lcd_wmd(tmp);
 106   1         tmp=dispbuf[1];
 107   1         tmp=word[tmp];
 108   1         lcd_wmd(tmp);
 109   1         tmp=dispbuf[0];
 110   1         tmp=word[tmp];
 111   1         lcd_wmd(tmp); 
 112   1      }
 113          
 114           
 115          
 116           
 117          
C51 COMPILER V8.08   SHIZHONG                                                              09/16/2008 11:47:09 PAGE 3   

 118          /*********************键盘子程序***********************/
 119          
 120          uchar keypro(void)
 121          {
 122   1        uchar scanl,scanh;
 123   1        P1=0xf0;
 124   1        if((P1&0xf0)!=0xf0)
 125   1        {
 126   2          delay();
 127   2          if((P1&0xf0)!=0xf0)
 128   2          {
 129   3            scanl=0xfe;
 130   3            while((scanl&0x10)!=0)
 131   3            {
 132   4              P1=scanl;
 133   4              if((P1&0xf0)!=0xf0)
 134   4              {
 135   5                scanh=(P1&0xf0)|0x0f;
 136   5                return (~scanh)+(~scanl);
 137   5               }
 138   4              else scanl=(scanl<<1)|0x01;
 139   4            }
 140   3          } 
 141   2        } 
 142   1        return 0;
 143   1      }
 144          
 145          
 146          /********************时间调整子程序********************/
 147          void adjustime()
 148          {
 149   1        uchar k;
 150   1        static uchar add;
 151   1        k=keypro();
 152   1        switch(k)
 153   1        {
 154   2         case 0x88: if(!at){add=0xc1;EA=0;lcd_wmc(0xc1);lcd_wmc(0x0f);at=1;}
 155   2                     else {lcd_wmc(0xc0);lcd_wmc(0x0c);at=0;EA=1;} break;
 156   2      
 157   2         case 0x48:  if(at)
 158   2                   {
 159   3             if(add==0xc1){add=0xc7; lcd_wmc(add);}
 160   3                       else {add=add-3;lcd_wmc(add);}
 161   3                     }
 162   2               break;
 163   2        
 164   2        case 0x28:  if(at)
 165   2                   {
 166   3                     if(add==0xc7) {add=0xc1;lcd_wmc(add);}
 167   3                       else {add=add+3;lcd_wmc(add);}
 168   3                 }
 169   2             break;
 170   2      
 171   2         case 0x18: if(at)
 172   2                  {
 173   3                    if(add==0xc1) h++;
 174   3                      if(h==24)
 175   3                h=0;
 176   3                      if(add==0xc4) m++;
 177   3               if(m==60)
 178   3                 m=0;
 179   3                      if(add==0xc7) s++;
C51 COMPILER V8.08   SHIZHONG                                                              09/16/2008 11:47:09 PAGE 4   

 180   3                if(s==60)
 181   3                 s=0;
 182   3                 newbuf();
 183   3            disp(0xc0);
 184   3            lcd_wmc(add);
 185   3                    }
 186   2                     break;
 187   2        default: break;
 188   2        }
 189   1        if(k!=0)
 190   1         {
 191   2        while((P1&0xf0)!=0xf0)
 192   2        P1=0xf0;
 193   2       }
 194   1      
 195   1      }
 196          
 197           
 198          
 199           
 200          
 201           
 202          
 203          /*********************初始化子程序**********************/
 204          void init()
 205          {
 206   1      
 207   1        TMOD=0x01;
 208   1        TH0=0x4c;
 209   1        TL0=0x00;
 210   1        EA=1;
 211   1        ET0=1;
 212   1        TR0=1;
 213   1        counter=0;
 214   1        h=12;m=0;s=0;
 215   1        dispbuf[2]=10;
 216   1        dispbuf[5]=10;
 217   1      }
 218          
 219           
 220          
 221           
 222          
 223           
 224          
 225          /***************************主程序************************/
 226          
 227          void main(void)
 228          { 
 229   1        init();
 230   1        lcd_init();
 231   1      
 232   1        while(1)
 233   1        {
 234   2         adjustime();
 235   2         if(!at)
 236   2       {
 237   3           //闪烁
 238   3            if(counter<10)        
 239   3            {
 240   4             dispbuf[2]=10;
 241   4             dispbuf[5]=10;
C51 COMPILER V8.08   SHIZHONG                                                              09/16/2008 11:47:09 PAGE 5   

 242   4            }
 243   3            else
 244   3            {            
 245   4             dispbuf[2]=11;
 246   4             dispbuf[5]=11;
 247   4            }
 248   3            //更新显示缓冲区及调用显示程序
 249   3            if(counter==0)
 250   3            {
 251   4             newbuf();
 252   4             disp(0xc0);
 253   4             }
 254   3            else if(counter==10)
 255   3            disp(0xc0);  
 256   3          }
 257   2         }
 258   1      }
 259          
 260           
 261          
 262           
 263          
 264           
 265          
 266          
 267          /*************************定时器0的中断**********************/
 268          void Time0() interrupt 1 using 2    //再次强调中断子程序执行时间越短越好
 269          {
 270   1        TH0=(65536-46075)/256;
 271   1        TL0=(65536-46075)%256;
 272   1        counter++;
 273   1        if(counter==20)
 274   1        {
 275   2          s++;
 276   2        counter=0;
 277   2        if(s==60)
 278   2        { 
 279   3          m++;
 280   3          s=0;
 281   3            if(m==60)
 282   3          {
 283   4            h++;
 284   4          m=0;
 285   4          if(h==24)
 286   4           h=0;
 287   4               }
 288   3             }
 289   2      
 290   2        }
 291   1      }
 292          
 293          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    588    ----
   CONSTANT SIZE    =     19    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     13    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
C51 COMPILER V8.08   SHIZHONG                                                              09/16/2008 11:47:09 PAGE 6   

END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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