按关键词阅读: 89 基于 设计 万年历 单片机 C51
本程序实现实时 。
35、时钟模块 时钟芯片型号: DS1302 ;
ds1302 时钟上升沿输入命令或数据,下降 沿输出数据. ;
/ / ;
本程序使用的数码管为共阳极数码管. ;
显示的时间:分为 05,秒为 00,然后在这 个时间上累加.因数码管有限,只显示分 ;
和秒. T_CLK Bit P2.2 ;
实时时钟时钟线引脚 T_IO Bit P2.1 ;
实时时钟数据线引脚 T_RST Bit P2.0 ;
实时时钟复位线引脚 ;
*40h-46h 存放 秒 分 时 日 月 星期 年 second equ 40h minite equ 41h hour equ 42h org 0000h ajmp main org 003 。
36、0h main: ;
*主程序 设定初值 mov dptr,#tab ;
送入表格地址 mov 40h,#50H ;
秒赋初值 mov 41h,#59H ;
分赋初值 mov 42h,#11H ;
时赋初值 mov 43h,#22H ;
日赋初值 mov 44h,#10H ;
月赋初值 mov 45h,#00H ;
星期赋初值 mov 46h,#06H ;
年赋初值 clr p1.0 ;
闹铃不响 CLR P3.5 ;
红色指示灯灭 , 设置禁 止 ,CLR P3.6 ;
绿色指示灯灭 , 闹铃禁 止 START: lcall set1302 ;
调用初值设定子程序 ;
* loop: lcall get1302 ;
调用时钟子程 。
37、序 ,时钟自动加时 AAA: lcall exchange ;
调用十六进制转 BCD 码子程序 mov r4, #6 ;
刷新次数 tt1: lcall display ;
调用动态扫描子程序 djnz r4,tt1 lcall key_set ;
调键盘扫描 JNB P3.5,tt3 ;
p3.5 为 1 , 绿 灯亮 , 开设置 lcall key1 tt3: JNB P3.6,loop mov a,41h cjne a,#00h,loop cpl p1.0 ;
p3.6 为 1 时,调 用闹铃程序 AJMP loop NOP NOP KEY1:MOV P1,#0FEH KEY_HOUR_ADD:JB P1 。
38、.3,KEY_HOUR_SUB MOV A,42H ;
小时加一 INC a CJNE A,#24H,HADD MOV A,#00h HADD:MOV 42H,A LJMP START KEY_HOUR_SUB:JB P1.4,KEY_MINI_ADD MOV A,42H ;
小时减一 dec a CJNE A,#00H,HSUB MOV A,#24H HSUB:MOV 42H,A LJMP START KEY_MINI_ADD:JB P1.5,KEY_MINI_SUB MOV A,41H ;
分加一 INC a CJNE A,#60H,MADD MOV A,#00H MADD:MOV 41H,A。
39、LJMP START KEY_MINI_SUB:JB P1.6,ret_key1 MOV A,41H ;
分减一 dec a CJNE A,#00H,MSUB MOV A,#59H MSUB:MOV 41H,A LJMP START ret_key1: ret NOP ;
*按键处理 KEY_DATE0:lcall delay10ms ;
清抖 JB P1.2,KEY_DATE LJMP KEY_DATE0 KEY_time: LJMP LOOP ret key_set:jnb p1.2,key_date0 jb p1.1 ,ss cpl p3.6 SS:jb p1.7,ret1 cpl p3.5。
40、ret1:RET key_set2:jnb p1.2,key_TIME JB p1.7,ret2 cpl p3.5 ret2:ret KEY_DATE:mov r5,#100 lcall set1302 ;
调用初值设定子程 序 dd0:mov r6,#200 dd1:mov r7,#248 LCALL GET1302 LCALL EXCHANGE LCALL DISPLAY2 LCALL KEY_SET2 JNB P3.5,dd2 lcall key2 dd2:djnz r7,dd2 djnz r6,dd1 djnz r5,dd0 AJMP loop KEY2:MOV P1,#0FEH JB。
41、P1.2, KEY_MONTH_ADD Lcall KEY_TIME KEY_MONTH_ADD:JB P1.3,KEY_MONTH_SUB MOV A,44H ;
月份加一 INC A CJNE A,#13H,MOADD MOV A,#00H MOADD:MOV 44H,A LJMP KEY_DATE KEY_MONTH_SUB:JB P1.4,KEY_DATE_ADD MOV A,44H ;
月份减一 dec a CJNE A,#00H,MOSUB MOV A,#12H MOSUB:MOV 44H,A LJMP KEY_DATE KEY_DATE_ADD:JB P1.5,KEY_DATE_SU 。
42、B MOV A,43H ;
日加一 INC a CJNE A,#31H,DADD MOV A,#00H DADD:MOV 43H,A LJMP KEY_DATE KEY_DATE_SUB:JB P1.6,ret_key2 MOV A,43H ;
日减一 dec a CJNE A,#00H,DSUB MOV A,#30H DSUB:MOV 43H,A LJMP KEY_DATE ret_key2:ret ;
* * 十六进制-BCD 码转换 exchange: mov a,46h mov b,#10H div ab ;
把 40H 高低 4 位分开 mov 36h,a ;
高 4 位存入 31H 单元 m 。
43、ov a,b mov 35h,a ;
低 4 位存入 30H 单元 mov a,44h mov b,#10H div ab ;
把 40H 高低 4 位分开 mov 34h,a ;
高 4 位存入 31H 单元 mov a,b mov 33h,a ;
低 4 位存入 30H 单元 mov a,43h mov b,#10H div ab ;
把 40H 高低 4 位分开 mov 32h,a ;
高 4 位存入 31H 单元 mov a,b mov 31h,a ;
低 4 位存入 30H 单元 ;
mov a,42h mov b,#10H div ab ;
把 41H 高低 4 位分开 mov 30h,a ;
高。
44、4 位存入 33H 单元 mov a,b mov 29h,a ;
低 4 位存入 32H 单元 mov a,41h mov b,#10H div ab ;
把 41H 高低 4 位分开 mov 28h,a ;
高 4 位存入 33H 单元 mov a,b mov 27h,a ;
低 4 位存入 32H 单元 mov a,40h mov b,#10H div ab ;
把 40H 高低 4 位分开 mov 26h,a ;
高 4 位存入 31H 单元 mov a,b mov 25h,a ;
低 4 位存入 30H 单元 ret NOP NOP ;
*;
年月日显 示 , 时分秒显示 , 36h,35h;
34h,33h;
。
45、32h,31h;
30h,29h;
28h,27h;
26h,25h ;
* *时分秒显 示 display: mov r7,#100 ;
动态扫描次数 dis: ;
秒数码管低位 mov a,25h movc a,a+dptr mov p2,a ;
秒低位段选码送 P0 口 clr p0.4;
秒数码管低位开显示 lcall delay100us setb p0.4 ;
秒数码管低位关显示 ;
秒数码管高位 mov a,26h movc a,a+dptr mov p2,a ;
秒高位段选码送 P0 口 clr p0.3 ;
秒数码管高位开显示 lcall delay100us setb p0.3 ;
秒数码管高 。
46、位关显示 ;
分数码管低位 mov a,27h ;
分低位段选码送 P0 口 movc a,a+dptr mov p2,a ;
来源:(未知)
【学习资料】网址:/a/2021/0406/0021864098.html
标题:基于|基于89C51单片机的万年历设计( 五 )