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

📄 ex10.lst

📁 基于51的lcd1602数字时钟 可调解时间 自动调节星期
💻 LST
字号:
C51 COMPILER V8.09   EX10                                                                  02/22/2008 19:36:15 PAGE 1   


C51 COMPILER V8.09, COMPILATION OF MODULE EX10
OBJECT MODULE PLACED IN ex10.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ex10.c BROWSE DEBUG OBJECTEXTEND TABS(5)

line level    source

   1          /*用定时器0,1602液晶,设计一个数字时钟,可以由三个按钮控制调节时间*/
   2          #include<reg52.h>
   3          #include"lcd1602.h"
   4          #include"18b20.h"
   5          #define TIMER0_COUNT 0xEE00
   6          sbit mode=P3^0;
   7          sbit plus=P3^1;
   8          sbit dec=P3^2;
   9          sbit rd=P3^7;
  10          sbit fm=P2^3;
  11          uchar count,s1num,timer0_tick,count=0;
  12          typedef struct{
  13                              char hour;
  14                              char minute;
  15                              char second;
  16                        }time;
  17          
  18          typedef struct{
  19                              uint year;
  20                              uchar month;
  21                              char day;
  22                        }date;
  23          time now={0,0,0};
  24          date today={2008,1,29};
  25          char code dayofmonth[]={31,28,31,30,31,30,31,31,30,31,30,31};
  26          char code weekday[7][4]={"MON","TUE","WED","THU","FRI","SAT","SUN"};
  27          
  28          uchar monthday(uchar year,uchar month)
  29          {
  30   1         if(month==2 && year%4==0)            //润年的2月有29天
  31   1              return(29);
  32   1         else
  33   1              return(dayofmonth[month-1]);    //非闰年时的该月份天数
  34   1      }
  35          
  36          void display_week()  //由年月日计算星期
  37          {
  38   1           char days;
  39   1           days=(today.day+1+2*today.month+3*(today.month+1)/5+today.year+today.year/4-today.year/100+today.year
             -/400)%7;
  40   1           display_string(&weekday[days][0]);   
  41   1      }
  42          
  43           static void timer0_initialize(void)   //timer0 initialize
  44           {
  45   1           EA=0;              //设置不接受所有中断
  46   1           timer0_tick=0;
  47   1           TR0=0;                //关闭Timer0
  48   1           TMOD=0X01;         //设置Timer0为模式2,16位工作模式
  49   1           TL0=(TIMER0_COUNT & 0X00FF);    //设置Timer0低八位数值
  50   1           TH0=(TIMER0_COUNT >> 8);     //设置Timer0高八位数值
  51   1           PT1=1;              //设置Timer0的优先级为最高
  52   1           ET0=1;           //设置接受Timer0的中断
  53   1           TR0=1;             //启动Timer0
  54   1           EA=1;            //设置系统接受中断
C51 COMPILER V8.09   EX10                                                                  02/22/2008 19:36:15 PAGE 2   

  55   1       }
  56          
  57          void write_time(uchar add,uchar number)
  58          {
  59   1           gotoxy(2,add);
  60   1           display_data(number);
  61   1      }
  62          void write_riqi(uchar add,uchar number)
  63          {
  64   1           gotoxy(1,add);
  65   1           display_data(number);
  66   1      }
  67          
  68          void keyscan()
  69          {
  70   1           uchar mode_num;
  71   1           rd=0;
  72   1           if(mode==0)    
  73   1           {
  74   2                delay(5);
  75   2                if(mode==0)
  76   2                {    mode_num++;
  77   3                     while(!mode);
  78   3                     TR0=0;
  79   3                     write_com(0x0f);
  80   3                 }
  81   2                     if(mode_num==1) gotoxy(1,4);
  82   2                     if(mode_num==2) gotoxy(1,7);
  83   2                     if(mode_num==3) gotoxy(1,10);
  84   2                     if(mode_num==4) gotoxy(2,2);
  85   2                     if(mode_num==5) gotoxy(2,5);
  86   2                     if(mode_num==6) gotoxy(2,8);
  87   2                     if(mode_num==7)
  88   2                     {
  89   3                          mode_num=0;
  90   3                          write_com(0x0c);
  91   3                          TR0=1;
  92   3                     }
  93   2            }
  94   1           if(mode_num!=0)
  95   1           {
  96   2                if(plus==0)
  97   2                {
  98   3                     delay(5);
  99   3                     if(plus==0)
 100   3                     {
 101   4                          while(!plus);
 102   4                          if(mode_num==1)
 103   4                          {
 104   5                               today.year++;
 105   5                               write_riqi(1,today.year/100);
 106   5                               write_riqi(3,today.year%100);
 107   5                               gotoxy(1,12);
 108   5                               display_week();
 109   5                               gotoxy(1,4);
 110   5                          }
 111   4                          if(mode_num==2)
 112   4                          {
 113   5                               today.month++;
 114   5                               if(today.month==13) today.month=1;
 115   5                               write_riqi(6,today.month);
 116   5                               gotoxy(1,12);
C51 COMPILER V8.09   EX10                                                                  02/22/2008 19:36:15 PAGE 3   

 117   5                               display_week();
 118   5                               gotoxy(1,7);
 119   5                          }
 120   4                          if(mode_num==3)
 121   4                          {
 122   5                               today.day++;
 123   5                               if(today.day>monthday(today.year,today.month))
 124   5                               today.day=1;
 125   5                               write_riqi(9,today.day);
 126   5                               gotoxy(1,12);
 127   5                               display_week();
 128   5                               gotoxy(1,10);
 129   5                          }
 130   4                          if(mode_num==4)
 131   4                          {
 132   5                               now.hour++;
 133   5                               if(now.hour==24) now.hour=0;
 134   5                               write_time(1,now.hour);
 135   5                               gotoxy(2,2);
 136   5                          }
 137   4                          if(mode_num==5)
 138   4                          {
 139   5                               now.minute++;
 140   5                               if(now.minute==60) now.minute=0;
 141   5                               write_time(4,now.minute);
 142   5                               gotoxy(2,5);
 143   5                          }
 144   4                          if(mode_num==6)
 145   4                          {
 146   5                               now.second++;
 147   5                               if(now.second==60) now.second=0;
 148   5                               write_time(7,now.second);
 149   5                               gotoxy(2,8);
 150   5                          }
 151   4                     }
 152   3                }
 153   2              if(dec==0)
 154   2                {
 155   3                     delay(5);
 156   3                     if(dec==0)
 157   3                     {
 158   4                          while(!dec);
 159   4                          if(mode_num==1)
 160   4                          {
 161   5                               today.year--;
 162   5                               write_riqi(1,today.year/100);
 163   5                               write_riqi(3,today.year%100);
 164   5                               gotoxy(1,12);
 165   5                               display_week();
 166   5                               gotoxy(1,4);
 167   5                          }
 168   4                          if(mode_num==2)
 169   4                          {
 170   5                               today.month--;
 171   5                               if(today.month==0) today.month=12;
 172   5                               write_riqi(6,today.month);
 173   5                               gotoxy(1,12);
 174   5                               display_week();
 175   5                               gotoxy(1,7);
 176   5                          }
 177   4                          if(mode_num==3)
 178   4                          {
C51 COMPILER V8.09   EX10                                                                  02/22/2008 19:36:15 PAGE 4   

 179   5                               today.day--;
 180   5                               if(today.day==0)
 181   5                               today.day=monthday(today.year,today.month);
 182   5                               write_riqi(9,today.day);
 183   5                               gotoxy(1,12);
 184   5                               display_week();
 185   5                               gotoxy(1,10);
 186   5                          }
 187   4                          if(mode_num==4)
 188   4                          {
 189   5                               now.hour--;
 190   5                               if(now.hour<0) now.hour=23;
 191   5                               write_time(1,now.hour);
 192   5                               gotoxy(2,2);
 193   5                          }
 194   4                          if(mode_num==5)
 195   4                          {
 196   5                               now.minute--;
 197   5                               if(now.minute<0) now.minute=59;
 198   5                               write_time(4,now.minute);
 199   5                               gotoxy(2,5);
 200   5                          }
 201   4                          if(mode_num==6)
 202   4                          {
 203   5                               now.second--;
 204   5                               if(now.second<0) now.second=59;
 205   5                               write_time(7,now.second);
 206   5                               gotoxy(2,8);
 207   5                          }
 208   4                     }
 209   3                }
 210   2           }
 211   1       }
 212          
 213          void display_temp()
 214          {
 215   1        uint wendu;
 216   1        uchar A1,A2;
 217   1        tmpchange(); 
 218   1        wendu=tmp();
 219   1         A1=wendu/10;
 220   1         A2=wendu%10;
 221   1        gotoxy(2,10);
 222   1        display_data(A1);
 223   1        display_string(".");
 224   1        write_date(int_to_char[A2]);    
 225   1      }
 226          
 227          void timer0(void) interrupt 1
 228          {
 229   1           TR0=0;
 230   1           TL0=(TIMER0_COUNT & 0X00FF);//设置Timer0低八位数值
 231   1           TH0=(TIMER0_COUNT >> 8);//设置Timer0高八位数值
 232   1           TR0=1;
 233   1           count++;
 234   1           if(count==40) display_temp();
 235   1           if(count==200)
 236   1                {
 237   2                     count=0;
 238   2                     now.second++;
 239   2                     if(now.second==60)
 240   2                     {
C51 COMPILER V8.09   EX10                                                                  02/22/2008 19:36:15 PAGE 5   

 241   3                          now.second=0;
 242   3                          now.minute++;
 243   3                          if(now.minute==60)
 244   3                          {
 245   4                               now.minute=0;
 246   4                               now.hour++;
 247   4                               if(now.hour==24)
 248   4                               {
 249   5                                    now.hour=0;
 250   5                                    today.day++;
 251   5                                    if(today.day>monthday(today.year,today.month))
 252   5                                    {
 253   6                                         today.day=1;
 254   6                                         today.month++;
 255   6                                         if(today.month==13)
 256   6                                         {
 257   7                                              today.month=1;
 258   7                                              today.year++;
 259   7                                         }
 260   6                                         write_riqi(6,today.month);
 261   6                                    }
 262   5                                    write_riqi(9,today.day);
 263   5                                    gotoxy(1,12);
 264   5                                    display_week();
 265   5                               }
 266   4                               write_time(1,now.hour);
 267   4                          }
 268   3                          write_time(4,now.minute);
 269   3                     }
 270   2                     write_time(7,now.second);          
 271   2                }    
 272   1      }
 273          
 274          void main()
 275          {
 276   1           init_lcd();
 277   1           rd=0;
 278   1           timer0_initialize();
 279   1           gotoxy(1,1);
 280   1           display_string("2008/01/29 ");
 281   1           display_week();
 282   1           gotoxy(2,1);
 283   1           display_string("00:00:00");
 284   1           gotoxy(2,10);
 285   1           display_string("00.0C");
 286   1           while(1) keyscan();
 287   1      
 288   1      }
 289          
 290          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1489    ----
   CONSTANT SIZE    =     80    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     10       7
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       2
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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