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

📄 main.lst

📁 KEIL下编的SST89E58单片机万年历(定时器)程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   MAIN                                                                  10/24/2008 01:48:45 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*
   2           *      Copyright (C) 2007, 华中科技大学电气与电子科技创新中心
   3           *      All Rights Reserved.
   4           *      
   5           *      文件名:         main.c
   6           *      文件描述:   万年历主程序
   7           *                      
   8           *      当前版本:       1.0
   9           *      作者:           Zuowenping(fmku007@163.com)
  10           *      完成日期:       2007年12月17日
  11           *      
  12          */
  13          #include "reg51.h"
  14          #include "intrins.h"
  15          #include "lcd1602.h"
  16          
  17          
  18          typedef unsigned char u8;
  19          typedef unsigned int u16;
  20          
  21          #define MAIN_COUN 49  
  22          
  23          #define KEY1 0xfe
  24          #define KEY2 0xfd
  25          #define KEY3 0xfb
  26          #define KEY4 0xf7
  27          
  28          #define START 0x01
  29          #define PAUSE 0x02
  30          #define STPAU 0x03
  31          #define STOP  0x00
  32          
  33          #define UP    0x01
  34          #define DOWN  0x02
  35          
  36          
  37          u8 int_coun=0,sec=40,sec_pre=0;
  38          u8 wink_mode=0; 
  39          u8 key_temp=0;
  40          u8 key_coun=0;
  41          u8 sys_mode=1;
  42          bit key_flag=0;
  43          bit adj_flag=0;
  44          
  45          u8 hour=23,min=59,month,day;
  46          u16 m_day=365,year=2001;
  47          
  48          
  49          void Sys_Init();
  50          void calc_time();
  51          unsigned char calc_day(u16 year);
  52          void display();
  53          void calc_month_day();
  54          void wink_set(u8 wink);
  55          void delay(u16 timeinms);
C51 COMPILER V7.06   MAIN                                                                  10/24/2008 01:48:45 PAGE 2   

  56          void key_scan();
  57          void key_proc();
  58          void stopwatch_ctrl(u8 ctrl);
  59          void time_adj(u8 ctrl);
  60          
  61          
  62          
  63          static u8 code non_leap_table[]={31,28,31,30,31,30,31,31,30,31,30,31,31,29,31,30,31,30,31,31,30,31,30,31};
             -  //0-11:non_leap  12-23  leap year month table
  64          
  65          
  66          
  67          void int_svr() interrupt 3
  68          {       
  69   1              TH1=184;
  70   1              TL1=0;
  71   1                      if(int_coun<MAIN_COUN)
  72   1                              int_coun+=1;
  73   1                      else 
  74   1                      {       int_coun=0;
  75   2                              if(sec<59)
  76   2                                      sec+=1;
  77   2                              else
  78   2                                      sec=0;
  79   2                      }
  80   1                      if(int_coun==MAIN_COUN/2)
  81   1                      {/*put_char(13,1,32);*/wink_set(wink_mode);}
  82   1              else if(int_coun==0)
  83   1                      put_char(13,1,':');
  84   1      
  85   1      }
  86          
  87          
  88          void main()
  89          {  
  90   1              Sys_Init();
  91   1              while(1)
  92   1              {
  93   2              if(sec_pre!=sec)
  94   2                      {
  95   3                              calc_time();
  96   3                              display();
  97   3                              sec_pre=sec;
  98   3                      }
  99   2              key_scan();
 100   2              key_proc();
 101   2              }       
 102   1      }
 103          
 104          void Sys_Init()
 105          {
 106   1              lcd_init();
 107   1              TMOD=0x10;
 108   1              TH1=184;
 109   1              TL1=0;
 110   1              EA=1;
 111   1              ET1=1;
 112   1              TR1=1;
 113   1      }
 114          
 115          
 116          void calc_time()
C51 COMPILER V7.06   MAIN                                                                  10/24/2008 01:48:45 PAGE 3   

 117          {
 118   1              if(adj_flag)
 119   1                      {
 120   2                      calc_month_day();
 121   2                      return;
 122   2                      }
 123   1              if(sec_pre==59)
 124   1                      {
 125   2                      if(min<59)
 126   2                              min+=1;
 127   2                      else 
 128   2                              {
 129   3                              min=0;
 130   3                              if(hour<23)
 131   3                                      hour+=1;
 132   3                              else
 133   3                                      {
 134   4                                      hour=0;
 135   4                                      if(m_day<(365+calc_day(year)))
 136   4                                              m_day+=1;
 137   4                                      else
 138   4                                              {
 139   5                                              m_day=1;
 140   5                                              year+=1;
 141   5                                              }
 142   4                                      }
 143   3                               }
 144   2                       }
 145   1              calc_month_day();
 146   1      
 147   1      }
 148          
 149          unsigned char calc_day(u16 year)
 150          {
 151   1              if((year%4==0&&year%100!=0)||year%400==0)
 152   1                      return 1;
 153   1              else
 154   1                      return 0;
 155   1      }
 156          
 157          
 158          void calc_month_day()
 159          {       
 160   1              u8 leap_flag,i;
 161   1              u16 day_sum=0;
 162   1              if(calc_day(year))
 163   1                      leap_flag=12;
 164   1              else
 165   1                      leap_flag=0;
 166   1      //      leap_flag=12;
 167   1              for(i=1;i<13;i++)
 168   1                              {
 169   2                              day_sum+=non_leap_table[leap_flag+i-1];
 170   2                              if(day_sum>=m_day)
 171   2                                      {       
 172   3                                      month=i;
 173   3                                      day=m_day+non_leap_table[leap_flag+i-1]-day_sum;
 174   3                                      break;
 175   3                                      }               
 176   2                               }
 177   1      }
 178          
C51 COMPILER V7.06   MAIN                                                                  10/24/2008 01:48:45 PAGE 4   

 179          void display()
 180          {
 181   1      
 182   1                                      put_char(0,0,year/1000+48);
 183   1                                      put_char(1,0,(year%1000)/100+48);
 184   1                                      put_char(2,0,year%1000%100/10+48);
 185   1                                      put_char(3,0,year%1000%100%10+48);
 186   1      
 187   1      
 188   1                                      put_char(5,0,month/10+48);
 189   1                                      put_char(6,0,month%10+48);
 190   1      
 191   1      
 192   1                                      put_char(8,0,day/10+48);        
 193   1                                      put_char(9,0,day%10+48);
 194   1      
 195   1                                      put_char(8,1,hour/10+48);
 196   1                                      put_char(9,1,hour%10+48);
 197   1      
 198   1                                      put_char(11,1,min/10+48);
 199   1                                      put_char(12,1,min%10+48);
 200   1      
 201   1                                      put_char(14,1,sec/10+48);
 202   1                                      put_char(15,1,sec%10+48);
 203   1              
 204   1                                      put_char(4,0,'-');
 205   1                                      put_char(7,0,'-');
 206   1                                      put_char(10,1,':');     
 207   1      }
 208          
 209          
 210          void wink_set(u8 wink)

⌨️ 快捷键说明

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