📄 6416+1302电子钟.lst
字号:
178 6 f=0;
179 6 }
180 5 }
181 4 }
182 3 }
183 2
184 2 Show_word(); //待机显示按三秒间隔分别显示年、月日、星期、时分秒。
185 2
186 2 }
187 1 }
188 /************************************************/
189 void Show_word() //串行输出显示
190 { uchar h;
191 1 for(h=0;h<16;h++)
192 1 {
193 2 if((id==0)&(f==0)|(id==1)) //f为三秒转换显示
194 2 {
195 3 Send_data(&timer[0][0]); //不显示
196 3 if((Flicker==1)&(id==1)) //闪烁标志为1时不亮,为零时亮
197 3 { Show_pass(); //不显示一个字
198 4 Show_pass();
199 4 }
200 3 else
201 3 {
202 4 Send_data(&timer[2][h]); //20年
203 4 Send_data(&timer[0][h]);
204 4 Send_data(&timer[Year/16][h]); //年值
205 4 Send_data(&timer[Year%16][h]);
206 4 }
C51 COMPILER V7.50 6416_1302电子钟 08/18/2008 19:06:56 PAGE 5
207 3 Send_data(&hanzi[h*2+641]); //年字符
208 3 Send_data(&hanzi[h*2+640]);
209 3 Send_data(&timer[0]); //不显示
210 3 }
211 2
212 2 if((id==0)&(f==1)|(id==2)|(id==3))
213 2 {
214 3 if((Flicker==1)&(id==2)) //闪烁标志为1时不亮,为零时亮
215 3 { Show_pass(); //不显示一个字
216 4
217 4 }
218 3 else
219 3 {
220 4 if(Month/16<1)
221 4 Send_data(&timer[0]); //月十位为零时不显示
222 4 else
223 4 Send_data(&timer[Month/16][h]); //月值
224 4 Send_data(&timer[Month%16][h]);
225 4 }
226 3 Send_data(&hanzi[h*2+673]); //月字符
227 3 Send_data(&hanzi[h*2+672]);
228 3 if((Flicker==1)&(id==3)) //闪烁标志为1时不亮,为零时亮
229 3 { Show_pass(); //不显示一个字
230 4
231 4 }
232 3 else
233 3 {
234 4 Send_data(&timer[Day/16][h]); //日值
235 4 Send_data(&timer[Day%16][h]);
236 4 }
237 3 Send_data(&hanzi[h*2+961]); //日字符
238 3 Send_data(&hanzi[h*2+960]);
239 3 }
240 2
241 2 if((id==0)&(f==2)|(id==4)) //f为三秒转换显示
242 2 {
243 3 Send_data(&timer[0]); //不显示
244 3 Send_data(&hanzi[h*2+705]); //星字符
245 3 Send_data(&hanzi[h*2+704]);
246 3 Send_data(&hanzi[h*2+737]); //期字符
247 3 Send_data(&hanzi[h*2+736]);
248 3 if((Flicker==1)&(id==4)) //闪烁标志为1时不亮,为零时亮
249 3 { Show_pass(); //不显示一个字
250 4 }
251 3 else
252 3 {
253 4 Send_data(&hanzi[Week%16*32+h*2+737]); //星期值
254 4 Send_data(&hanzi[Week%16*32+h*2+736]);
255 4 }
256 3 Send_data(&timer[0][0]); //不显示
257 3 }
258 2
259 2 if((id==0)&(f==3)|(id>4)) //f为三秒转换显示
260 2 {
261 3 if((Flicker==1)&(id==5)) //闪烁标志为1时不亮,为零时亮
262 3 {
263 4 Show_pass(); //不显示一个字
264 4 }
265 3 else
266 3 {
267 4 if(Hour/16<1)
268 4 Send_data(&timer[0][0]); //时十位小于1时不显示
C51 COMPILER V7.50 6416_1302电子钟 08/18/2008 19:06:56 PAGE 6
269 4 else
270 4 Send_data(&timer[Hour/16][h]); //时值
271 4 Send_data(&timer[Hour%16][h]);
272 4 }
273 3 Send_data(&timer[10][h]); //两个点
274 3
275 3 if((Flicker==1)&(id==6)) //闪烁标志为1时不亮,为零时亮
276 3 {
277 4 Show_pass(); //不显示一个字
278 4 }
279 3 else
280 3 {
281 4 Send_data(&timer[Cent/16][h]);
282 4 Send_data(&timer[Cent%16][h]); //分值
283 4 }
284 3 Send_data(&timer[10][h]); //两个点
285 3 if((Flicker==1)&(id==7)) //闪烁标志为1时不亮,为零时亮
286 3 {
287 4 Show_pass(); //不显示一个字
288 4 }
289 3 else
290 3 {
291 4 Send_data(&timer[Sec/16][h]); //秒
292 4 Send_data(&timer[Sec%16][h]);
293 4 }
294 3 }
295 2 if(id>7) //id大于7时为对显示转换模式设置
296 2 { if((Flicker==1)&(id==8))
297 3 { Show_pass();
298 4 Show_pass();
299 4 Show_pass();
300 4 Show_pass();
301 4 }
302 3 else if(b==0)
303 3 {
304 4 Send_data(&hanzi[h*2+993]); //显示汉字 “自”
305 4 Send_data(&hanzi[h*2+992]);
306 4 Send_data(&hanzi[h*2+1057]); //显示汉字“动”
307 4 Send_data(&hanzi[h*2+1056]);
308 4 Send_data(&hanzi[h*2+1089]); //显示汉字“模”
309 4 Send_data(&hanzi[h*2+1088]);
310 4 Send_data(&hanzi[h*2+1121]); //显示汉字“式”
311 4 Send_data(&hanzi[h*2+1120]);
312 4 }
313 3 else
314 3 {
315 4 Send_data(&hanzi[h*2+1025]); //显示汉字“手”
316 4 Send_data(&hanzi[h*2+1024]);
317 4 Send_data(&hanzi[h*2+1057]); //显示汉字“动”
318 4 Send_data(&hanzi[h*2+1056]);
319 4 Send_data(&hanzi[h*2+1089]); //显示汉字“模”
320 4 Send_data(&hanzi[h*2+1088]);
321 4 Send_data(&hanzi[h*2+1121]); //显示汉字“式”
322 4 Send_data(&hanzi[h*2+1120]);
323 4 }
324 3 if(id==9)
325 3 {
326 4 if(b==1) //手动模式
327 4 {
328 5 id=0;f=0;
329 5 }
330 4 else
C51 COMPILER V7.50 6416_1302电子钟 08/18/2008 19:06:56 PAGE 7
331 4 {
332 5 Send_data(&hanzi[h*2+993]); //显示汉字“自”
333 5 Send_data(&hanzi[h*2+992]);
334 5 Send_data(&hanzi[h*2+1057]); //显示汉字“动”
335 5 Send_data(&hanzi[h*2+1056]);
336 5 if(Flicker==1)
337 5 {
338 6 Show_pass();
339 6 }
340 5 else
341 5 {
342 6 Send_data(&timer[a/16][h]); //转换时间
343 6 Send_data(&timer[a%16][h]);
344 6 }
345 5 Send_data(&hanzi[h*2+1153]); //显示汉字“秒”
346 5 Send_data(&hanzi[h*2+1152]);
347 5 }
348 4 }
349 3 }
350 2 P2_7=1; //锁存为高,595锁存信号
351 2 P2=sw[h]; //输出行信号
352 2 DelayMs(); //延时,等待一段时间,让这列显示的内容在人眼内产生“视觉暂留”现象。*/
353 2 P2=0x7f; //关闭显示。
354 2 }
355 1 }
356
357
358 void timer_1(void) interrupt 1 //中断入口,闪烁
359 {
360 1 TH0=0x3C; //25ms定时 晶振24M
361 1 TL0=0xB0;
362 1 if(msec++==40) //1000ms
363 1 { msec=0;
364 2 x++;
365 2 if(x>=a)
366 2 { x=0;
367 3 if(b==0) //自动模式
368 3 {if(f++==3)
369 4 f=0; //f显示转换计数器 ,d为用户设置的自动转换时间的值。
370 4 }
371 3 }
372 2 if(h++==4) //5秒后进入正常走时。
373 2 {id=0;h=0;}
374 2 }
375 1 if(msec<20)
376 1 Flicker=0; //闪烁标志反转
377 1 else
378 1 Flicker=1;
379 1
380 1 }
381
382
383 /***********************输出一个字的不显示数据。*****************/
384 void Show_pass()
385 {
386 1 Send_data(&timer[0][0]); //不显示
387 1 Send_data(&timer[0][0]); //不显示
388 1 }
389
390 /**********************************************************/
391 void in_data(void) //调整数据
392 {
C51 COMPILER V7.50 6416_1302电子钟 08/18/2008 19:06:56 PAGE 8
393 1 char s;
394 1 for(s=4;s>=0;s--) //i为向后先择字节计数器,zimuoo为向后先字计数器
395 1 {
396 2 BUFF[2*s+1]=hanzi[zimuo+32*s+2*line]; //把第一个字模的第一个字节放入BUFF0中,第二个字模和第一
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -