蒸汽刷厂家
免费服务热线

Free service

hotline

010-00000000
蒸汽刷厂家
热门搜索:
行业资讯
当前位置:首页 > 行业资讯

带有时间设置和秒显示的数字闹钟

发布时间:2020-07-21 18:20:33 阅读: 来源:蒸汽刷厂家

;********************************************************* ;带有时间设置和秒显示的数字闹钟 ;Date:2006.3.1312MHZ晶振 ;Createby:尘封往事逸飞 ;P3.2设置键P3.3小时调整键P3.5分钟调整键P1.7定时输出指示 ;************************************************************** ;********************************************************* ;变量地址分配 ;********************************************************* SwDelayequ2;设置按键时去抖动时间 DisplayBufferequ30h;设置显示缓冲区的地址为30h-35h共6个字节 BeepValequ36h;蜂鸣时间长短存储器地址 OneSecondCounterequ39h;设置1秒计数器的地址,1秒计数器是用来计数1秒内计时器的中断次数 Hourequ3ah;设置小时计数器的地址 Minuteequ3bh;设置分钟计数器的地址 Secondequ3ch;设置秒计数器的地址 P1Valequ3dh;设置数码管位驱动值的地址 ClockModeequ20h.0;模式(正常走时/闹时)设置寄存器地址,值为0时正常走时,为1时闹时设定 AlarmOnOffequ20h.1;闹钟开启/关闭标志,为0关闭,为1开启 AlarmTimeOnequ20h.2;此位为1时表示闹时时间到 DispHourequ21h;设置小时显示寄存器的地址 DispMinuteequ22h;设置分钟显示寄存器的地址 DispSecondequ23h;设置秒显示寄存器的地址 AlarmHourequ2eh;设置闹时小时计数器的地址 AlarmMinuteequ2fh;设置闹时分钟计数器的地址 AlarmSetKeybitP3.2;闹钟设置键 MinuteKeybitP3.5;定义分设置键 HourKeybitP3.3;定义小时设置键 RelayOutequP1.7;定义输出引脚 ;********************************************************************** ;程序开始 ;********************************************************************** org00h ajmpReset;程序开始 org0bh;Timer0中断向量地址 ajmpTimeInt;跳到中断处理程序 org0020h Reset:;以下为初始化程序,为各个变量赋初值 movsp,#70h; setbRelayOut movOneSecondCounter,#125 ; movHour,#12; movMinute,#00; movSecond,#00;设置上电时时钟显示的初值 ; movAlarmHour,#06; movAlarmMinute,#00;设置上电时闹时时间的初值 ; clrAlarmOnOff;上点复位后闹时功能处于关闭状态 clrClockMode;正常走时模式 clrAlarmTimeOn; setbRelayOut;清闹时输出 ;************************************ ;UseTimer0Mode1 ;400usinterrupt ;************************************ movtmod,#00000001b; movth0,#0E3h; movtl0,#39h; movie,#82h;开全局中断 setbtr0;开定时中断 ;***************************************** ;以下为主程序 ;***************************************** MainLoop: jbAlarmSetKey,CheckMinuteKey;闹时设置键按下了吗?没有则转去检测秒设置键 ; callDelay; jbAlarmSetKey,CheckMinuteKey;按下的时间超过500ms吗? setbClockMode;置为闹时设置模式 callAlarmSet; CheckMinuteKey: jbMinuteKey,CheckHourKey;分设置键按下了吗?没有则转去检测小时设置键 ;如按下调用蜂鸣器发音程序 mova,Minute adda,#1;如果按下则将分钟加一十进制调整 movMinute,a; cjnea,#3ch,NotOver1;到60分钟了吗? movMinute,#0;到60分钟则将分钟清0 NotOver1:;以下等待按键释放及防抖动 jnbMinuteKey,$ CheckHourKey: jbHourKey,CheckAlarm;小时设置键按下了吗?没有则转去闹时状态检测 ;如按下调用蜂鸣器发音程序 mova,Hour adda,#1;如果按下则将小时加1 movHour,a cjnea,#18h,NotOver2 movHour,#0;到24小时则将小时清0 NotOver2:;以下等待按键释放及防抖动 jnbHourKey,$ CheckAlarm:; jnbAlarmTimeOn,ToReturn callAlarmProcess ToReturn: ajmpMainLoop ;********************************************** ;定时器Timer0中断服务程序(此程序每8ms执行一次) ;********************************************** {{分页}}TimeInt: movth0,#0E3h;重新加载定时参数 movtl0,#39h; pushacc pushpsw;保护累加器及程序状态字的内容 setbrs0;选择工作寄存器组1, clrrs1;这样可保护原工作寄存器组(0组)的内容 djnzOneSecondCounter,NotoneSecond;中断了125次了吗?即够1秒了吗? movOneSecondCounter,#125;如够1秒则重新设置"OneSecondCounter"计数器 callClock;调用将时钟内容加1秒的子程序 callConvertoBuffer;调用将时钟内容转换到显示缓冲区子程序 NotoneSecond: callScanDisplay;调用扫描显示子程序 poppsw popacc;恢复累加器及程序状态字的内容 reti;中断返回 ;********************************************* ;扫描显示子程序 ;********************************************* ScanDisplay: MOVR1,#DisplayBuffer;指向显示数据首址 MOVR4,#11111011b;扫描控制字初值 PLAY:MOVA,R4;扫描字放入A MOVP2,A;从P2口输出 MOVA,@R1;取显示数据到A MOVDPTR,#TAB;取段码表地址 MOVCA,@A+DPTR;查显示数据对应段码 MOVP0,A;段码放入P1口 LCALLDelay INCR1;指向下一地址 MOVA,R4;扫描控制字放入A JNBACC.7,ENDOUT;扫到第六位时结束 RLA;A中数据循环左移 MOVR4,A;放回R5内 AJMPPLAY;跳回PLAY循环 ENDOUT:SETBP2.7;一次显示结束,P2口复位 MOVP0,#0FFH;P0口复位 RET;子程序返回 TAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,7FH,0B7H,0FFH ;共阳段码表"0""1""2""3""4""5""6""7""8""9"".""=""不亮" ;**************************************************** ;时钟内容加1秒的子程序 ;**************************************************** Clock: mova,Second;将原秒值送入a adda,#1;加1秒 movSecond,a cjnea,#3cH,NotOverFlow;够60秒了吗? movSecond,#0;够了则将秒值清0 ; mova,Minute adda,#1 movMinute,a;分钟加1 cjnea,#3cH,NotOverFlow;够60分了吗? &n尘埃粒子计数器相关文章:尘埃粒子计数器原理蜂鸣器相关文章:蜂鸣器原理

福州磨骨价格

昆明植发

杭州双眼皮医院

哈尔滨牙齿矫正