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

📄 timeclock.asm

📁 数字钟在日常生活中最常见
💻 ASM
📖 第 1 页 / 共 2 页
字号:
	  ;
          mov a,Year
	  add a,#1
	  mov Year,a
	  cjne a,#11,NotAlarm
	  mov Year,#0
NotOverFlow:
          jnb AlarmOnOff,NotAlarm;          闹钟开启了吗?如没有开启则无需理会是否到闹时时间
          mov a,Second
          jnz NotAlarm;                     秒为零吗?
          mov a,Minute
          cjne a,AlarmMinute,NotAlarm;      时间分钟值和闹时设置分钟值相等吗?
          mov a,Hour
          cjne a,AlarmHour,NotAlarm;        时间小时值和闹时设置小时值相等吗?
          setb AlarmTimeOn;                 到了闹时时间则将“闹时时间到”标志设为1
NotAlarm:
          ret


;**************************************************************************
;            将时钟内容或闹时设置值转换到显示缓冲区子程序
;**************************************************************************
ConvertoBuffer:
          mov r1,#DisplayBuffer
			 jnb dataMode,TimeDisp
			 mov a,Day
			 mov DispSecond,a
			 mov a,Month
			 mov DispMinute,a
			 mov a,Year
			 mov DispHour,a
			 ajmp Convert
TimeDisp: jb ClockMode,DispAlarmSet;        判断时钟模式,以决定是显示实时时间还是闹时时间
          mov a,Second;
          mov DispSecond,a;
          mov a,Minute;
          mov Dispminute,a;
          mov a,Hour;
          mov DispHour,a;                   显示实时时间
          ;
          ajmp Convert
DispAlarmSet:
          jb AlarmOnOff,AlarmOn
          mov DispSecond,#00h
          ajmp Next
AlarmOn:
          mov DispSecond,#11;              显示闹时时间及显示闹钟状态:显示“00”表示关闭闹钟,
Next:                                      ;“11”表示开启闹钟
          mov a,AlarmMinute;
          mov Dispminute,a;
          mov a,AlarmHour;
          mov DispHour,a;
                         ;
Convert:
          mov a,DispSecond;                取秒值
          mov b,#10
          div ab                              
          mov @r1,b;                       
          inc r1;                          缓冲寄存器的地址加1
          mov @r1,a;                       将秒值的十位值存入缓冲区
          ;                                
          inc r1
          mov a,DispMinute
          mov b,#10
          div ab                            
          mov @r1,b;                       
          inc r1;                          缓冲寄存器的地址加1
          mov @r1,a;                       将秒值的十位值存入缓冲区
          ;                                
          inc r1
          mov a,DispHour
          mov b,#10
          div ab                             
          mov @r1,b;                       
          inc r1;                          缓冲寄存器的地址加1
          mov @r1,a;                       将秒值的十位值存入缓冲区                               
          ret;
;*******************************************************
;天数判断,平年,闰年
;******************************************************* 
  Daynum:                mov a,Month
			 mov dptr,#TABL
			 movc a,@a+dptr
			 mov Dnum,a
			 mov a,Year
			 mov b,#4
			 div ab
                         mov a,b
			 cjne a,#0,BB
	                 mov a,Month
                         cjne a,#2,BB
	                 inc Dnum
	BB:              RET
   TABL: DB 31,32,29,32,31,32,31,32,32,31,32,31,32
                      

;**************************************************
;                   闹时设置子程序
;**************************************************
AlarmSet:
          jnb  AlarmSetKey,$
          call Delay;                     等待“AlarmSetKey”键释放
CheckArmMinuteKey:          ;
          jb MinuteKey,CheckArmHourKey;   分设置键按下了吗?没有则转去检测小时设置键
          setb AlarmOnOff
          mov 37h,#0
          mov a,AlarmMinute
          add a,#1;                       如果按下则将分钟加1    十进制调整
          mov AlarmMinute,a;
          cjne a,#3ch,ArmNotOver1;        到60分钟了吗?
          mov AlarmMinute,#0;             到60分钟则将分钟清0
ArmNotOver1:                             ;以下等待按键释放及防抖动
          jnb  MinuteKey,$
CheckArmHourKey:
          jb HourKey,AlarmSetEnd;         小时设置键按下了吗?没有则返回反复检测
          setb AlarmOnOff
          mov a,AlarmHour
          add a,#1;                       如果按下则将小时加1
          mov AlarmHour,a
          cjne a,#18h,ArmNotOver2
          mov AlarmHour,#0;               到24小时则将小时清0
ArmNotOver2:                             ;以下等待按键释放及防抖动
          jnb  HourKey,$
AlarmSetEnd:
          jb AlarmSetKey,AlarmSet;        设置完毕了吗?
          jnb AlarmSetKey,$;
          clr ClockMode;                  从设置模式转为走时模式
          ret
;*********************************************
;           日期调整
;*********************************************
DataSet:
         jnb DataSetKey,$
			call Delay
CheckDataYearKey:
         jb HourKey,CheckDataMonthKey
			mov a,Year
			add a,#1
			mov Year,a
			cjne a,#11,DataNotOver1
			mov Year,#0
DataNotOver1:
         jnb HourKey,$
CheckDataMonthKey:
         jb MinuteKey,CheckDataDayKey
			mov a,Month
			add a,#1
			mov Month,a
			cjne a,#13,DataNotOver2
			mov Month,#1
DataNotOver2:
         jnb MinuteKey,$
CheckDataDayKey:
         jb AlarmSetKey,DataSetEnd
			mov a,day
			add a,#1
			mov Day ,a
         cjne a,Dnum,DataNotOver3
			mov Day,#1
DataNotOver3:
         jnb AlarmSetKey,$
DataSetEnd:
         jb DataSetKey,DataSet
			jnb DataSetKey,$
			clr DataMode
			ret

;**************************************************
;             闹时服务子程序
;**************************************************
AlarmProcess:
          clr RelayOut;
          jb AlarmSetKey,AlarmReturn;    停止闹时键(即闹时设置键)按下了吗?
          clr AlarmOnOff
          jnb AlarmSetKey,$;
          setb  RelayOut;                如停止闹时键按下则停止闹时
          clr AlarmTimeOn;
          mov 37h,#11
			 mov AlarmMinute,#00
			 mov AlarmHour,#00
AlarmReturn:
          ret
;**************************************************
;          延时子程序
;**************************************************
Delay:
          mov r6,#2
Del:
          mov r7,#124
          djnz r7,$
          djnz r6,Del
          ret
DL1s:     mov r3,#4
     dd:  call Delay
			 djnz r3,dd
			 ret
          end


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -