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

📄 shizhong.lst

📁 RZ-51V20 实例程序
💻 LST
字号:
C51 COMPILER V8.02   SHIZHONG                                                              07/23/2009 11:18:19 PAGE 1   


C51 COMPILER V8.02, 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          //按4X4键盘的F键 进入设定状态
   2          //E D 键是前后移动键
   3          //C按键是调整数值按键
   4          #include "reg52.h"
   5          #define uchar unsigned char
   6          sbit RW=P2^1;
   7          sbit RS=P2^0;
   8          sbit E=P2^2;
   9          bit at=0;
  10          uchar code shen[]={"CLOCK!"};
  11          uchar code word[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x20};
  12          uchar dispbuf[8],h,m,s,counter;
  13          
  14           
  15          
  16          void delay()
  17          {
  18   1        uchar i;
  19   1       for(i=0;i<255;i++);
  20   1      }
  21          
  22           
  23          
  24          /*******写命令**********/
  25          void lcd_wmc(uchar i)
  26          {
  27   1      
  28   1        P0=i;
  29   1        RS=0;
  30   1        RW=0;
  31   1        E=0;
  32   1        delay();
  33   1        E=1;
  34   1      }
  35          
  36           
  37          
  38          /*******写数据***********/
  39          
  40          void lcd_wmd(uchar i)
  41          {
  42   1      
  43   1        P0=i;
  44   1        RS=1;
  45   1        RW=0;
  46   1        E=0;
  47   1        delay();
  48   1        E=1;
  49   1      }
  50          
  51           
  52          
  53          
  54          /*******初始化液晶*******/
  55          void lcd_init()
C51 COMPILER V8.02   SHIZHONG                                                              07/23/2009 11:18:19 PAGE 2   

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

 118           
 119          
 120          /*********************键盘子程序***********************/
 121          
 122          uchar keypro(void)
 123          {
 124   1        uchar scanl,scanh;
 125   1        P1=0x0f;//先将所有行线拉低
 126   1        if((P1&0x0f)!=0x0f) //如果列线有变化
 127   1        {
 128   2          delay();//延迟一段时间。
 129   2          if((P1&0x0f)!=0x0f)//如果此时此刻列线还有变化,说明确实有按键按下
 130   2          {
 131   3            scanl=0xfe;
 132   3            while((scanl&0x10)!=0)
 133   3            {
 134   4              P1=scanl; //给P1口赋扫描码,每次只拉低一行
 135   4              if((P1&0xf0)!=0xf0) //如果判断为真,则说明找到了按键按下的行
 136   4              {
 137   5                scanh=(P1&0xf0)|0x0f; //计算识别码
 138   5                return (~scanh)+(~scanl);
 139   5               }
 140   4              else scanl=(scanl<<1)|0x01; //否则依次将第二,第三,第四行拉低 
 141   4      
 142   4            }
 143   3          } 
 144   2        } 
 145   1        return 0;//没有按键  按下 返回0
 146   1      }
 147          
 148          
 149          /********************时间调整子程序********************/
 150          void adjustime()
 151          {
 152   1        uchar k;
 153   1        static uchar add;
 154   1        k=keypro();
 155   1        switch(k)
 156   1        {
 157   2         case 0x88: if(!at){add=0xc1;EA=0;lcd_wmc(0xc1);lcd_wmc(0x0f);at=1;}
 158   2                     else {lcd_wmc(0xc0);lcd_wmc(0x0c);at=0;EA=1;} break;
 159   2      
 160   2         case 0x48:  if(at)
 161   2                   {
 162   3             if(add==0xc1){add=0xc7; lcd_wmc(add);}
 163   3                       else {add=add-3;lcd_wmc(add);}
 164   3                     }
 165   2               break;
 166   2        
 167   2        case 0x28:  if(at)
 168   2                   {
 169   3                     if(add==0xc7) {add=0xc1;lcd_wmc(add);}
 170   3                       else {add=add+3;lcd_wmc(add);}
 171   3                 }
 172   2             break;
 173   2      
 174   2         case 0x18: if(at)
 175   2                  {
 176   3                    if(add==0xc1) h++;
 177   3                      if(h==24)
 178   3                h=0;
 179   3                      if(add==0xc4) m++;
C51 COMPILER V8.02   SHIZHONG                                                              07/23/2009 11:18:19 PAGE 4   

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

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


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    588    ----
   CONSTANT SIZE    =     19    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     13    ----
   IDATA SIZE       =   ----    ----
C51 COMPILER V8.02   SHIZHONG                                                              07/23/2009 11:18:19 PAGE 6   

   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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