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

📄 clock.lst

📁 C51单片机的C语言例程,可实现定时器中断及其时钟功能的源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
  23          void clock_init (void) {
  24   1              scan_flag = 0;
  25   1              alm_flag = 0;
  26   1              dayhsecs = 0L;
  27   1              last_tick = timer0_count ();
  28   1      }
  29          
  30          /* 时钟更新函数 */
  31          void clock_update (void) {
  32   1              static xdata unsigned long last_daysecs;
  33   1              dayhsecs += timer0_elapsed_count (last_tick);
  34   1              last_tick = timer0_count ();
  35   1              while (dayhsecs >= MAX_HSEC_DAY)
  36   1                dayhsecs -= MAX_HSEC_DAY;
  37   1              if ((dayhsecs / 100) == last_daysecs)
  38   1                return;
  39   1              last_daysecs = dayhsecs / 100;
  40   1              if (alm_flag != 0)
  41   1                if ((dayhsecs / (100 * 60)) == almmins)
  42   1              com_putchar ('\x7');
  43   1              if (scan_flag != 0)  {
  44   2                clock_out_time ();
  45   2                cmdb_prompt ();
  46   2              }
  47   1      }
  48          
  49          /* 时钟设置函数 */
  50          void clock_set ( unsigned long sethsec)  {
  51   1              dayhsecs = sethsec;
  52   1              last_tick = timer0_count ();
  53   1              clock_update ();
  54   1      }
  55          
  56          /* 时钟扫描函数 */
  57          void clock_scan (unsigned char flag)  {
  58   1              scan_flag = flag;
  59   1      }
  60          
C51 COMPILER V7.50   CLOCK                                                                 04/01/2006 14:08:05 PAGE 5   

  61          /* 时间输出函数 */
  62          void clock_out_time (void)  {
  63   1              xdata char buf [21];
  64   1              unsigned hsecs,  secs,  mins,  hours;
  65   1              unsigned long t;
  66   1      
  67   1              t = dayhsecs;
  68   1              hsecs = t % 100;
  69   1              t /= 100;
  70   1              secs  = t % 60;
  71   1              t /= 60;
  72   1              mins  = t % 60;
  73   1              t /= 60;
  74   1              hours = t % 24;
  75   1      
  76   1              buf [0]  = (hours / 10) + '0';
  77   1              buf [1]  = (hours % 10) + '0';
  78   1              buf [2]  = ':';
  79   1              buf [3]  = (mins / 10) + '0';
  80   1              buf [4]  = (mins % 10) + '0';
  81   1              buf [5]  = ':';
  82   1              buf [6]  = (secs / 10) + '0';
  83   1              buf [7]  = (secs % 10) + '0';
  84   1              buf [8]  = '.';
  85   1              buf [9]  = (hsecs / 10) + '0';
  86   1              buf [10] = (hsecs % 10) + '0';
  87   1              buf [11] = '\0';
  88   1      
  89   1              #ifdef evalboard    /* 采用硬件目标板时需要使用以下数组 */
  90   1              dg[7]=buf[7];       /* 准备硬件目标板LED 显示数据 */
  91   1              dg[6]=buf[6];
  92   1              dg[4]=buf[4];
  93   1              dg[3]=buf[3];
  94   1              dg[1]=buf[1];
  95   1              dg[0]=buf[0];                        
  96   1              DISPLY(dg);       /* 点亮硬件目标板LED */
  97   1              #endif
  98   1      
  99   1              com_puts ("\r\n");
 100   1              com_puts (buf);
 101   1              com_puts ("\r\n");
 102   1      }
 103          
 104          /* 设置屏幕时间按"HHMMSS"格式显示 */
 105          char strtotm ( unsigned long *t, char *s)  {
 106   1              char *s2;
 107   1              unsigned char tmp;
 108   1              if (strlen (s) != 6)
 109   1                return (-1);
 110   1      
 111   1              for (s2 = s; *s2 != '\0'; s2++)  {
 112   2                if (!isdigit (*s2))
 113   2              return (-1);
 114   2          }
 115   1      
 116   1              tmp = ((s[0] - '0') * 10) + (s[1] - '0');
 117   1              if (tmp >= 24)
 118   1                return (-1);
 119   1              *t = tmp;
 120   1              tmp = ((s[0] - '0') * 10) + (s[1] - '0');
 121   1              if (tmp >= 24)
 122   1                return (-1);
C51 COMPILER V7.50   CLOCK                                                                 04/01/2006 14:08:05 PAGE 6   

 123   1              *t = tmp;
 124   1              tmp = ((s[2] - '0') * 10) + (s[3] - '0');
 125   1              if (tmp >= 60)
 126   1                return (-1);
 127   1              *t = (60 * *t) + tmp;
 128   1              tmp = ((s[4] - '0') * 10) + (s[5] - '0');
 129   1              if (tmp >= 60)
 130   1                return (-1);
 131   1              *t = (60 * *t) + tmp;
 132   1              return (0);
 133   1      }
 134          
 135          /* 闹钟设置函数 */
 136          void alarm_set (unsigned setmins) {
 137   1              almmins = setmins;
 138   1              alm_flag = 1;
 139   1      }
 140          
 141          /* 闹钟清零函数 */
 142          void alarm_clr (void) {
 143   1              alm_flag = 0;
 144   1      }
 145          
 146          /* 闹钟时间输出函数 */
 147          void alarm_out_time (void) {
 148   1              xdata char buf [21];
 149   1              unsigned mins;
 150   1              unsigned hours;
 151   1              unsigned t;
 152   1      
 153   1              if (alm_flag == 0)   {
 154   2                com_puts ("\r\nNone\r\n");
 155   2                return;
 156   2          }
 157   1              t = almmins;
 158   1              mins  = t % 60;
 159   1              t /= 60;
 160   1              hours = t % 24;
 161   1      
 162   1              buf [0] = (hours / 10) + '0';
 163   1              buf [1] = (hours % 10) + '0';
 164   1              buf [2] = ':';
 165   1              buf [3] = (mins / 10) + '0';
 166   1              buf [4] = (mins % 10) + '0';
 167   1              buf [5] = '\0';
 168   1              
 169   1              com_puts ("\r\n");
 170   1              com_puts (buf);
 171   1              com_puts ("\r\n");
 172   1      }
C51 COMPILER V7.50   CLOCK                                                                 04/01/2006 14:08:05 PAGE 7   

NAME                                    CLASS   MSPACE  TYPE    OFFSET  SIZE
====                                    =====   ======  ====    ======  ====


_strtotm . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  t?549. . . . . . . . . . . . . . . .  AUTO     DATA   PTR      0000H  3
  s?550. . . . . . . . . . . . . . . .  AUTO     DATA   PTR      0003H  3
  s2?551 . . . . . . . . . . . . . . .  AUTO     DATA   PTR      0006H  3
  tmp?552. . . . . . . . . . . . . . .  AUTO     DATA   U_CHAR   0009H  1
_timer0_elapsed_count. . . . . . . . .  EXTERN   CODE   PROC     -----  -----
size_t . . . . . . . . . . . . . . . .  TYPEDEF  -----  U_INT    -----  2
_clock_set . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  sethsec?241. . . . . . . . . . . . .  * REG *  DATA   U_LONG   0004H  4
_alarm_set . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  setmins?653. . . . . . . . . . . . .  * REG *  DATA   U_INT    0006H  2
cmdb_prompt. . . . . . . . . . . . . .  EXTERN   CODE   PROC     -----  -----
scan_flag. . . . . . . . . . . . . . .  STATIC   XDATA  U_CHAR   0004H  1
clock_init . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
alarm_clr. . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
_DISPLY. . . . . . . . . . . . . . . .  EXTERN   CODE   PROC     -----  -----
alm_flag . . . . . . . . . . . . . . .  STATIC   XDATA  U_CHAR   0005H  1
last_tick. . . . . . . . . . . . . . .  STATIC   XDATA  U_INT    0006H  2
dg . . . . . . . . . . . . . . . . . .  STATIC   DATA   ARRAY    0000H  8
_com_puts. . . . . . . . . . . . . . .  EXTERN   CODE   PROC     -----  -----
_isdigit . . . . . . . . . . . . . . .  EXTERN   CODE   PROC     -----  -----
dayhsecs . . . . . . . . . . . . . . .  STATIC   XDATA  U_LONG   0008H  4
clock_out_time . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  buf?443. . . . . . . . . . . . . . .  AUTO     XDATA  ARRAY    0000H  21
  hsecs?444. . . . . . . . . . . . . .  AUTO     DATA   U_INT    0000H  2
  secs?445 . . . . . . . . . . . . . .  AUTO     DATA   U_INT    0002H  2
  mins?446 . . . . . . . . . . . . . .  AUTO     DATA   U_INT    0004H  2
  hours?447. . . . . . . . . . . . . .  * REG *  DATA   U_INT    0002H  2
  t?448. . . . . . . . . . . . . . . .  AUTO     DATA   U_LONG   0006H  4
alarm_out_time . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  buf?854. . . . . . . . . . . . . . .  AUTO     XDATA  ARRAY    0000H  21
  mins?855 . . . . . . . . . . . . . .  AUTO     DATA   U_INT    0000H  2
  hours?856. . . . . . . . . . . . . .  * REG *  DATA   U_INT    0002H  2
  t?857. . . . . . . . . . . . . . . .  * REG *  DATA   U_INT    0002H  2
timer0_count . . . . . . . . . . . . .  EXTERN   CODE   PROC     -----  -----
almmins. . . . . . . . . . . . . . . .  STATIC   XDATA  U_INT    000CH  2
_clock_scan. . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  flag?342 . . . . . . . . . . . . . .  * REG *  DATA   U_CHAR   0007H  1
clock_update . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  last_daysecs?140 . . . . . . . . . .  STATIC   XDATA  U_LONG   0000H  4
_strlen. . . . . . . . . . . . . . . .  EXTERN   CODE   PROC     -----  -----
_com_putchar . . . . . . . . . . . . .  EXTERN   CODE   PROC     -----  -----


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1243    ----
   CONSTANT SIZE    =     12    ----
   XDATA SIZE       =     14      42
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      8      22
   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 + -