📄 ht1621.lst
字号:
245 2 WRITE(0x01,time2.hourclock);//hour
246 2 WRITE(0x02,time2.minclock);//min
247 2 TR0=1;
248 2 }
249 1 }
250
251 void ScanKey(void)
252 {if(Switch==0)
253 1 {DelayMS1(65);
254 2 if(Switch==0)
255 2 Count++;
256 2 }
257 1 if(Count!=0)
258 1 ProcessKey();
259 1 }
260
261 void DisplayChange(void)
262 { if(Count==0)
263 1 {Ht1621WrDataCmd(0);
264 2 Ht1621WrByte(Ht1621code[time1.min%10]);
265 2 Ht1621WrDataCmd(2);
266 2 Ht1621WrByte(Ht1621code[time1.min/10]);
267 2 Ht1621WrDataCmd(5);
268 2 Ht1621WrByte(Ht1621code[time1.hour%10]);
269 2 Ht1621WrDataCmd(7);
270 2 if(time1.hour<10)
271 2 Ht1621WrByte(0);
272 2 else
273 2 Ht1621WrByte(Ht1621code[time1.hour/10]);
274 2 Ht1621WrDataCmd(9);
275 2 Ht1621WrByte(0x00);
276 2 }
277 1 else if(Count==1)
278 1 {Ht1621WrDataCmd(0);
279 2 Ht1621WrByte(Ht1621code[time1.min%10]);
280 2 Ht1621WrDataCmd(2);
281 2 Ht1621WrByte(Ht1621code[time1.min/10]);
282 2 Ht1621WrDataCmd(5);
283 2 Ht1621WrByte(Ht1621code[time1.hour%10]);
284 2 Ht1621WrDataCmd(7);
285 2 if(time1.hour<10)
286 2 Ht1621WrByte(0);
287 2 else
288 2 Ht1621WrByte(Ht1621code[time1.hour/10]);
289 2 Ht1621WrDataCmd(9);
290 2 Ht1621WrByte(0x08);
291 2 }
292 1 else if(Count==2)
293 1 {Ht1621WrDataCmd(5);
294 2 Ht1621WrByte(0);
295 2 Ht1621WrDataCmd(7);
296 2 if(ampm==0)
297 2 Ht1621WrByte(Ht1621code[10]);
298 2 else
299 2 Ht1621WrByte(Ht1621code[11]);
300 2 Ht1621WrDataCmd(0);
301 2 Ht1621WrByte(Ht1621code[time1.sec%10]);
302 2 Ht1621WrDataCmd(2);
303 2 Ht1621WrByte(Ht1621code[time1.sec/10]);
C51 COMPILER V7.06 HT1621 05/14/2008 14:59:23 PAGE 6
304 2 Ht1621WrDataCmd(9);
305 2 Ht1621WrByte(0x08);
306 2 }
307 1 else if(Count==3)
308 1 {Ht1621WrDataCmd(9);
309 2 Ht1621WrByte(0x01);
310 2 Ht1621WrDataCmd(0);
311 2 Ht1621WrByte(0);
312 2 Ht1621WrDataCmd(2);
313 2 if(time2.ampmclock==0)
314 2 Ht1621WrByte(Ht1621code[10]);
315 2 else
316 2 Ht1621WrByte(Ht1621code[11]);
317 2 Ht1621WrDataCmd(5);
318 2 Ht1621WrByte(0);
319 2 Ht1621WrDataCmd(7);
320 2 Ht1621WrByte(0);
321 2 }
322 1 else if(Count==4)
323 1 {Ht1621WrDataCmd(9);
324 2 Ht1621WrByte(0x01);
325 2 Ht1621WrDataCmd(0);
326 2 Ht1621WrByte(Ht1621code[time2.minclock%10]);
327 2 Ht1621WrDataCmd(2);
328 2 Ht1621WrByte(Ht1621code[time2.minclock/10]);
329 2 Ht1621WrDataCmd(5);
330 2 Ht1621WrByte(Ht1621code[time2.hourclock%10]);
331 2 Ht1621WrDataCmd(7);
332 2 if(time2.hourclock<10)
333 2 Ht1621WrByte(0);
334 2 else
335 2 Ht1621WrByte(Ht1621code[time2.hourclock/10]);
336 2 }
337 1 if(Count<3)
338 1 {if(_500msflag==1)
339 2 {Ht1621WrDataCmd(4);
340 3 Ht1621WrByteDot(0x80);
341 3 }
342 2 if(_500msflag==0)
343 2 {Ht1621WrDataCmd(4);
344 3 Ht1621WrByteDot(0x00);
345 3 }
346 2 }
347 1 else
348 1 {Ht1621WrDataCmd(4);
349 2 Ht1621WrByteDot(0x40);
350 2 }
351 1 }
352 void timer0(void) interrupt 1 using 0
353 { TH0=0x7d; //50ms*20 8MHz
354 1 TL0=0xd9;
355 1 sec20++;
356 1 if(sec20<10)
357 1 {_500msflag=1;
358 2 }
359 1 if(sec20>=10)
360 1 {_500msflag=0;
361 2 }
362 1 if(sec20>=20)
363 1 {sec20=0;
364 2 inc_sec();
365 2 }
C51 COMPILER V7.06 HT1621 05/14/2008 14:59:23 PAGE 7
366 1
367 1 }
368 void play(void)
369 {
370 1 if(beep_flag==0)
371 1 return;
372 1 if(counter>0)
373 1 counter--;
374 1 else
375 1 {
376 2 i++;
377 2 if(i==0||i==2||i==4||i==6||i==8)counter=300;
378 2 if(i==1||i==3||i==5||i==7||i==9||i==11)counter=200;
379 2 if(i==10)counter=525;
380 2 }
381 1 if(i==0||i==2||i==4||i==6||i==8||i==10)
382 1 {
383 2 P3_3=1;
384 2 }
385 1 else if(i==1||i==3||i==5||i==7||i==9||i==11)
386 1 P3_3=0;
387 1 else
388 1 {
389 2 i=0;
390 2 beep_flag=0;
391 2 }
392 1 }
393 void timer1(void) interrupt 3 using 1
394 { TH1=0xfa; //2ms 8MHz
395 1 TL1=0xd9;
396 1 if(ampm==time2.ampmclock&&time1.hour==time2.hourclock&&time1.min==time2.minclock&&time1.sec==00)beep_fla
-g=1;
397 1 play();
398 1 if(time1.min==00||beep_flag==1)
399 1 {
400 2 Light_flag++;
401 2 if(Light_flag==250)
402 2 {Light_flag=0;
403 3 light();
404 3 }
405 2 }
406 1 else P1=0x00;
407 1 }
408
409 void inc_hour(void)
410 {
411 1 time1.hour++;
412 1 if(time1.hour >12)
413 1 {
414 2 time1.hour = 1;
415 2 ampm=!ampm;
416 2 }
417 1 }
418
419 void inc_min(void)
420 {
421 1 time1.min++;
422 1 if(time1.min > 59)
423 1 {
424 2 time1.min = 0;
425 2 inc_hour();
426 2 }
C51 COMPILER V7.06 HT1621 05/14/2008 14:59:23 PAGE 8
427 1 }
428
429 void inc_sec(void)
430 {
431 1 time1.sec++;
432 1 if(time1.sec > 59)
433 1 {
434 2 time1.sec = 0;
435 2 inc_min();
436 2 }
437 1 }
438
439 void light(void)
440 {if(Ledloop<4)
441 1 {P1=Led[Ledloop];
442 2 Ledloop++;
443 2 if(Ledloop>=4)
444 2 Ledloop=0;
445 2 }
446 1 }
447
448 void delayms(uint i) //毫秒延时子程序
449 { while(--i); //采用while(--a) 不要采用while(a--); 各位可编译一下看看汇编结果就知道了!
450 1 }
451
452 void main(void)
453 {
454 1 TMOD = 0x11; // 定时器0, 1 工作模式1, 16 位定时方式
455 1 IE = 0x8a; // 使能timer0,1 中断
456 1 TH0=0x7d; //50ms
457 1 TL0=0xd9;
458 1 TH1=0xfa; //2ms
459 1 TL1=0xd9;
460 1 TR0 = 1; TR1 = 1;
461 1 P1=0x00; P2=0xff; P3_3=0;
462 1 Ht1621_Init(); //上电初始化LCD
463 1 if(READ(0x04)!=12)
464 1 {WRITE(0x01,time2.hourclock);//hour
465 2 WRITE(0x02,time2.minclock);//min
466 2 WRITE(0x03,time2.ampmclock);//ampm
467 2 WRITE(0x04,12);
468 2 }
469 1 else
470 1 {time2.ampmclock=READ(0x03);
471 2 time2.hourclock=READ(0x01);
472 2 time2.minclock=READ(0x02);
473 2 }
474 1 while(1)
475 1 {DisplayChange();
476 2 ScanKey();
477 2 }
478 1 }
479
480
481
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1881 ----
CONSTANT SIZE = 16 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
C51 COMPILER V7.06 HT1621 05/14/2008 14:59:23 PAGE 9
DATA SIZE = 17 6
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 + -