📄 clock.lst
字号:
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 + -