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

📄 lcd1602时钟显示.lst

📁 数字时钟显示
💻 LST
字号:
C51 COMPILER V7.50   LCD1602时钟显蔩                                                       06/02/2008 16:40:27 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE LCD1602时钟显蔩
OBJECT MODULE PLACED IN lcd1602时钟显示.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE lcd1602时钟显示.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1           /*  用1602LCD液晶做的一个时钟,包括星期,日期
   2          
   3           ***************************
   4            
   5           s1作为位选,每按一次,就选一位,按第九次屏幕恢复正常
   6          
   7           s2作为加法键 在s1按下的时候才能进行加法
   8          
   9           s3作为减法键 在s1按下的时候才能进行减法     */ 
  10          
  11          #include "reg51.h"
  12           #define uchar unsigned char
  13           #define uint unsigned int
  14           uchar code table[]=" 0000-00-00 000" ;
  15           uchar code table1[]="    00:00:00";
  16           uchar code table2[][3]={"MOD","TUE","WED","THU","FRI","SAT","SUN"};
  17           uint code table3[]={31,31,28,31,30,31,30,31,31,30,31,30,31};
  18           sbit lcden=P1^3;
  19           sbit lcdwrite=P1^1;
  20           sbit lcdrs=P1^2;
  21           sbit s1=P1^4;
  22           sbit s2=P1^5;
  23           sbit s3=P1^6;
  24           sbit s=P1^7;
  25           uchar time;
  26           char hour,min,sec,day,mon,year1,year2,xingqi,num;
  27          //延时程序
  28           void delay(uint z)
  29          {
  30   1         uint x,y;
  31   1       for(x=z;x>0;x--)
  32   1        for(y=110;y>0;y--);
  33   1      }
  34          //lcd的写指令
  35          void write_com(uchar com)
  36          {
  37   1       lcdrs=0;
  38   1       lcden=0;
  39   1       P2=com;
  40   1       delay(5);
  41   1       lcden=1;
  42   1       delay(5);
  43   1       lcden=0;
  44   1      }
  45          //lcd的写数据
  46          void write_data(uchar da)
  47          {
  48   1       lcdrs=1;
  49   1       lcden=0;
  50   1       P2=da;
  51   1       delay(5);
  52   1       lcden=1;
  53   1       delay(5);
  54   1       lcden=0;
  55   1      }
C51 COMPILER V7.50   LCD1602时钟显蔩                                                       06/02/2008 16:40:27 PAGE 2   

  56          //初始化
  57          void init()
  58          {
  59   1       uchar num;
  60   1          lcdwrite=0;
  61   1          lcden=0;
  62   1       write_com(0x38);
  63   1       write_com(0x0c);
  64   1       write_com(0x06);
  65   1       write_com(0x01);
  66   1       for (num=0;num<15;num++)
  67   1       {
  68   2        write_data(table[num]);
  69   2        delay(5);
  70   2       }
  71   1       write_com(0x80+0x40);
  72   1        for (num=0;num<12;num++)
  73   1        {
  74   2         write_data(table1[num]);
  75   2         delay(5);
  76   2        }
  77   1        TMOD=0x01;
  78   1        TL0=(65536-46080)%256;
  79   1          TH0=(65536-46080)/256;
  80   1        EA=1;
  81   1        ET0=1;
  82   1        TR0=1;
  83   1        
  84   1      }
  85          //时间走动的显示
  86          write_hms(uchar add,uchar da)
  87          {
  88   1       uchar shi,ge;
  89   1       shi=da/10;
  90   1       ge=da%10;
  91   1       write_com(0x80+0x40+add);
  92   1       write_data(0x30+shi);
  93   1       write_data(0x30+ge);
  94   1      }
  95          //日期走动的显示
  96          write_ymd(uchar add,uchar da)
  97          {
  98   1       uchar shi,ge;
  99   1       shi=da/10;
 100   1       ge=da%10;
 101   1       write_com(0x80+add);
 102   1       write_data(0x30+shi);
 103   1       write_data(0x30+ge); 
 104   1      }
 105          //星期走动的显示
 106          void write_xingqi(char xingqi)
 107          {
 108   1      char num;
 109   1      write_com(0x80+12);
 110   1      for(num=0;num<3;num++) 
 111   1        write_data(table2[xingqi][num]);
 112   1      
 113   1      }
 114          
 115          //键盘扫描
 116          void keyscan()
 117          {
C51 COMPILER V7.50   LCD1602时钟显蔩                                                       06/02/2008 16:40:27 PAGE 3   

 118   1       s=0;
 119   1       if(s1==0)
 120   1         {
 121   2        delay(5);
 122   2        if(s1==0)
 123   2        {
 124   3         num++;
 125   3         while(!s1);
 126   3         if(num==1)
 127   3         {
 128   4          TR0=0;
 129   4          write_com(0x80+0x40+11);
 130   4          write_com(0x0f);
 131   4         }
 132   3        }  
 133   2        if(num==2)
 134   2        {
 135   3         write_com(0x80+0x40+8);
 136   3        }
 137   2        if(num==3)
 138   2        {
 139   3         write_com(0x80+0x40+5);
 140   3        }
 141   2        if(num==4)
 142   2        {
 143   3         write_com(0x80+12);
 144   3         write_com(0x0f);
 145   3        }
 146   2        if(num==5)
 147   2        {
 148   3         write_com(0x80+10);
 149   3        }
 150   2        if(num==6)
 151   2        {
 152   3         write_com(0x80+7);
 153   3        }
 154   2        if(num==7)
 155   2        {
 156   3         write_com(0x80+4);
 157   3        }
 158   2        if(num==8)
 159   2        {
 160   3         write_com(0x80+2);
 161   3        }
 162   2        if(num==9)
 163   2        {
 164   3         num=0;
 165   3         write_com(0x0c);
 166   3         TR0=1;
 167   3        } 
 168   2       }
 169   1       if(num!=0)
 170   1       {
 171   2        if(s2==0)
 172   2        {
 173   3         delay(5);
 174   3         if(s2==0)
 175   3         {
 176   4          while(!s2);
 177   4          if(num==1)
 178   4          {
 179   5           sec++;
C51 COMPILER V7.50   LCD1602时钟显蔩                                                       06/02/2008 16:40:27 PAGE 4   

 180   5           if(sec==60)
 181   5           sec=0;
 182   5           write_hms(10,sec);
 183   5           write_com(0x80+0x40+11);
 184   5          }
 185   4          if(num==2)
 186   4          {
 187   5           min++;
 188   5           if(min==60)
 189   5            min=0;
 190   5            write_hms(7,min);
 191   5            write_com(0x80+0x40+8);
 192   5          }
 193   4          if(num==3)
 194   4          {
 195   5           hour++;
 196   5           if(hour==24)
 197   5            hour=0;
 198   5            write_hms(4,hour);
 199   5            write_com(0x80+0x40+5);
 200   5          }
 201   4          if(num==4)
 202   4          {
 203   5           xingqi++;
 204   5           if(xingqi==7)
 205   5           xingqi=0;
 206   5           write_xingqi(xingqi);
 207   5           write_com(0x80+14);
 208   5          }
 209   4          if(num==5)
 210   4          {
 211   5           day++;
 212   5           if(day==table3[mon]+1)
 213   5            day=1;
 214   5            write_ymd(9,day);
 215   5            write_com(0x80+10);
 216   5          }
 217   4          if(num==6)
 218   4          {
 219   5           mon++;
 220   5           if(mon==13)
 221   5            mon=1;
 222   5            write_ymd(6,mon);
 223   5            write_com(0x80+7);
 224   5          }
 225   4          if(num==7)
 226   4          {
 227   5           year1++;
 228   5           if(year1==100)
 229   5            year1=0;
 230   5            write_ymd(3,year1);
 231   5            write_com(0x80+4);
 232   5          }
 233   4          if(num==8)
 234   4          {
 235   5           year2++;
 236   5           if(year2==100)
 237   5            year2=0;
 238   5            write_ymd(1,year2);
 239   5            write_com(0x80+2);
 240   5          }
 241   4         }
C51 COMPILER V7.50   LCD1602时钟显蔩                                                       06/02/2008 16:40:27 PAGE 5   

 242   3        }
 243   2        if(s3==0)
 244   2        {
 245   3         delay(5);
 246   3         if(s3==0)
 247   3         {
 248   4          while(!s3);
 249   4          if(num==1)
 250   4          {
 251   5           sec--;
 252   5           if(sec==-1)
 253   5           sec=59;
 254   5           write_hms(10,sec);
 255   5           write_com(0x80+0x40+11);
 256   5          }
 257   4          if(num==2)
 258   4          {
 259   5           min--;
 260   5           if(min==-1)
 261   5            min=59;
 262   5            write_hms(7,min);
 263   5            write_com(0x80+0x40+8);
 264   5          }
 265   4          if(num==3)
 266   4          {
 267   5           hour--;
 268   5           if(hour==-1)
 269   5            hour=23;
 270   5            write_hms(4,hour);
 271   5            write_com(0x80+0x40+5);
 272   5          }
 273   4          if(num==4)
 274   4          {
 275   5           xingqi--;
 276   5           if(xingqi==-1)
 277   5            xingqi=6;
 278   5            write_xingqi(xingqi);
 279   5            write_com(0x80+14);
 280   5          }
 281   4          if(num==5)
 282   4          {
 283   5           day--;
 284   5           if(day==0)
 285   5            day=table3[mon];
 286   5            write_ymd(9,day);
 287   5            write_com(0x80+10);
 288   5          }
 289   4          if(num==6)
 290   4          {
 291   5           mon--;
 292   5           if(mon==0)
 293   5            mon=12;
 294   5            write_ymd(6,mon);
 295   5            write_com(0x80+7);
 296   5          }
 297   4          if(num==7)
 298   4          {
 299   5           year1--;
 300   5           if(year1==-1)
 301   5            year1=0;
 302   5            write_ymd(3,year1);
 303   5            write_com(0x80+4);
C51 COMPILER V7.50   LCD1602时钟显蔩                                                       06/02/2008 16:40:27 PAGE 6   

 304   5          }
 305   4          if(num==8)
 306   4          {
 307   5           year2--;
 308   5           if(year2==-1)
 309   5            year2=0;
 310   5            write_ymd(1,year2);
 311   5            write_com(0x80+2);
 312   5          }
 313   4         }
 314   3        }
 315   2       }
 316   1      }
 317          
 318          //主函数
 319          void main ()
 320          {
 321   1       init();
 322   1        while(1)
 323   1        {
 324   2        keyscan();
 325   2        }
 326   1      }
 327          //中断定时
 328          void timer0() interrupt 1
 329          {
 330   1         TL0=(65536-46080)%256;
 331   1         TH0=(65536-46080)/256;
 332   1         time++;
 333   1       if(time==20)
 334   1         {
 335   2        time=0;
 336   2        sec++;
 337   2        if(sec==60)
 338   2        {
 339   3         sec=0;
 340   3         min++;
 341   3         if(min==60)
 342   3         {
 343   4          min=0;
 344   4          hour++;
 345   4          if(hour==24)
 346   4          {
 347   5           hour=0;
 348   5           day++;
 349   5              xingqi++;
 350   5              if(day==table3[mon]+1)
 351   5              {
 352   6                 day=1;
 353   6                 mon++;
 354   6                 if(mon==13)
 355   6               {
 356   7                mon=1;
 357   7                year1++;
 358   7                if(year1==100)
 359   7                {
 360   8                   year1=0;
 361   8                   year2++;
 362   8                   if(year2==100)
 363   8                   {
 364   9                     year2=0;
 365   9                   }
C51 COMPILER V7.50   LCD1602时钟显蔩                                                       06/02/2008 16:40:27 PAGE 7   

 366   8              write_ymd(1,year2);
 367   8             }
 368   7             write_ymd(3,year1);
 369   7            }
 370   6            write_ymd(6,mon);
 371   6           }
 372   5           write_ymd(9,day);
 373   5           if(xingqi==7)
 374   5           xingqi=0;
 375   5           write_xingqi(xingqi);
 376   5          }
 377   4          write_hms(4,hour);
 378   4         }
 379   3         write_hms(7,min);
 380   3        }
 381   2        write_hms(10,sec);
 382   2       } 
 383   1      }
 384          


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