万年历汇编程序

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

单片机报告任务:实现年、月、日、时间、星期的显示,通过单键转换实现日期与时间的调换调整,同时可通过按键来调整日期与时间。硬件:STC89C52型单片机、一片频率为11.0592MHz的晶振片、三片74HC573锁存器、6块共阴极数码管、8个发光二极管、4个按键、一个压电式蜂鸣器等。硬件参数:(1)发光二极管采用共阳极排列方式,一般普通发光二极管的工作电压为1.6~2.1V,工作电流为5~20mA。在这个单片机系统上,发光二极管的工作电压约为1.8V,工作电流约为4.5mA。(2)74HC573为8输入8输出锁存器,工作电压为5伏,OE为片选端,LE为锁存允许端。OE为低电平,LE为高电平时锁存数据;当LE变为低电平时不允许新数据输入,输出不变;当OE为高电平时,不选中此芯片。(3)压电式蜂鸣器是以压电陶瓷的压电效应,来带动金属片的振动而发声的,压电式蜂鸣器是以方波来驱动,所以在程序中改变P2.5引脚输出波形的频率,就可以调整控制蜂鸣器音调,产生各种不同音色、音调的声音。另外,改变输出电平的高低电平占空比,则可以控制蜂鸣器的声音大小。(4)LED数码管中各段发光二极管的伏安特性和普通二极管类似,只是正向压降较大,正向电阻也较大。在一定范围内,其正向电流与发光亮度成正比。由于常规的数码管起辉电流只有1~2mA,最大极限电流也只有10~30mA,所以它的输入端在5V电源的电路信号相接时,一定要串加限流电阻,以免损坏器件。此板用的是共阴7段数码管,由公共端控制位。操作说明:上电后6个数码管显示为时间12.00.00,8个数码管显示为星期一。按下按键2不动,数码管转而显示日期00.01.01,前两位表示年份,中间两位表示月份,后面两位表示日,松开按键2回到时间显示;按下按键3不动,数码管转而显示设置闹钟的时间00.00.0,前两位为闹钟的小时,中间为闹钟的分,后面一位为是否开启闹铃的标志,“0”表示关闹钟,“1”表示开闹钟,松开按键3回到时间显示;按键4供用户调整时间,按下按键4大约1秒钟,当听到“嘀”的一声说明已进入时间调整程序,此时按键1用来调整小时,按一下小时加1,按键2用来调整分钟,按一下分钟加1,按键3用来调整星期,按一下星期加1;继续按一下按键4,则进入调整日期程序,此时按键1用来调整年份,按键2用来调整月份,按键3用来调整日,按下其中一个按键相应的位加1;继续按一下按键4,则进入设置闹钟程序,按键1用来调整闹钟的小时,按键2用来调整闹钟的分钟,按键3用来开启或是关闭闹钟,按下其中一个按键相应的位加1;再按一下按键4,则跳出调整时间程序,在此情况下如果时间到达设定的闹铃时间,闹铃响起,要想关掉闹铃可按一下按键1即可停止闹铃。硬件图:总程序流程图如下:本组总程序如下:SECONDEQU30HMINITEEQU31HHOUREQU32HDAYEQU33HMOONEQU34HYEAR_LEQU35HYEAR_HEQU36HMINCLKEQU37HHOURCLKEQU38HXQEQU39HTZK1BITP3.4;位P3.4为按键1TZK2BITP3.5;位P3.5为按键2TZK3BITP3.6;位P3.6为按键3SWITCHBITP3.7;位P3.7为按键4DISPBUF1EQU40HDISPBITEQU48HT2SCNTAEQU49HT2SCNTBEQU4AHDISPBUF2EQU50HDISPBUF3EQU60HdulaBITP2.6walaBITP2.7ORG0000HLJMPMAINORG000BHLJMPINT_T0START:MOVSECOND,#0;设置初始时间值MOVMINITE,#0MOVHOUR,#12MOVDAY,#1MOVMOON,#1MOVYEAR_L,#00HMOVYEAR_H,#20HMOVHOURCLK,#0MOVMINCLK,#0MOVDISPBIT,#6MOVT2SCNTA,#0MOVT2SCNTB,#0MOV60H,#0MOV61H,#0LCALLDISPMOVTMOD,#01H;定时器0工作在方式1MOVTH0,#0F7H;定时器初值设置MOVTL0,#0AHSETBTR0;开启定时器SETBET0SETBEAMOVXQ,#0CLRF0;显示标志位MAIN:JBTZK1,CHANGE1LCALLDELY10MSJBTZK1,CHANGE1SETBP2.3;按键1按下停止响铃CHANGE1:JBTZK2,CHANGE2;年月日切换LCALLDELY10MSJBTZK2,CHANGE2MOV60H,#1JNBTZK2,$MOV60H,#0CHANGE2:JBTZK3,ADJUST;闹钟切换LCALLDELY10MSJBTZK3,ADJUSTMOV60H,#2JNBTZK3,$MOV60H,#0ADJUST:JBSWITCH,MAINLCALLDELAY1SJBSWITCH,MAIN;按键4按下1秒确定要调整时间CLRP2.3;发出提示音可开始调整时间ACALLDELY10MSSETBP2.3ACALLADJUST_1ACALLADJUST_2ACALLADJUST_3AJMPMAIN;返回主程序;.......小时、分、星期键盘调整程序............ADJUST_1:JNBSWITCH,$;小时调整JBTZK1,NK4LCALLDELY10MSJBTZK1,NK4;按键1按下INCHOUR;小时寄存器加1MOVA,HOURCJNEA,#24,NH24MOVHOUR,#0;小时寄存器满24变为0NH24:LCALLDISP;调用时间变更子程序JNBTZK1,$NK4:JBTZK2,NK5;分调整LCALLDELY10MSJBTZK2,NK5;按键2按下INCMINITE;分钟寄存器加1MOVA,MINITECJNEA,#60,NM60MOVMINITE,#0;分钟满60变为0NM60:LCALLDISP;调用时间变更子程序JNBTZK2,$NK5:JBTZK3,NK6;星期调整LCALLDELY10MSJBTZK3,NK6;按键3按下INCXQ;星期寄存器加1MOVA,XQCJNEA,#7,NXQ7MOVXQ,#0;星期寄存器满7变为0NXQ7:LCALLDISP;调用时间变更子程序JNBTZK3,$NK6:JBSWITCH,ADJUST_1LCALLDELY10MSJBSWITCH,ADJUST_1;退出小时、分、星期调整程序INC60H;显示标志寄存器加1RET;.......年、月、日键盘调整程序..........ADJUST_2:JNBSWITCH,$;年低两位调整JBTZK1,NK1LCALLDELY10MSJBTZK1,NK1;按键1按下INCYEAR_L;年低位加1MOVA,YEAR_LCJNEA,#64H,NY100MOVYEAR_L,#00H;年低位到100变为0NY100:LCALLDISP;调用时间变更子程序JNBTZK1,$NK1:JBTZK2,NK2;月调整LCALLDELY10MSJBTZK2,NK2;按键2按下INCMOON;月寄存器加1MOVA,MOONCJNEA,#13,NM12MOVMOON,#01H;月寄存器满13变为0NM12:LCALLDISPJNBTZK2,$NK2:JBTZK3,NK3;日调整LCALLDELY10MSJBTZK3,NK3;按键3按下INCDAY;日寄存器加1MOVA,MOONCJNEA,#2,N1LCALLJUDGE_Y1;2月则调用润、平年判断子程序AJMPNSN1:LCALLJUDGE_M1;不是2月则调用月判断子程序NS:LCALLDISP;调用时间变更子程序JNBTZK3,$NK3:JBSWITCH,ADJUST_2LCALLDELY10MSJBSWITCH,ADJUST_2;退出年、月、日调整程序INC60H;显示标志寄存器加1RET;........闹钟小时、分钟调整程序........ADJUST_3:JNBSWITCH,$;设置闹钟小时JBTZK1,NK7LCALLDELY10MSJBTZK1,NK7;按键1按下INCHOURCLK;闹钟小时寄存器加1MOVA,HOURCLKCJNEA,#24,NHC24MOVHOURCLK,#0;闹钟小时寄存器满24清0NHC24:LCALLDISPJNBTZK1,$NK7:JBTZK2,NK8;设置闹钟分钟LCALLDELY10MSJBTZK2,NK8;按键2按下INCMINCLK;闹钟分钟寄存器加1MOVA,MINCLKCJNEA,#60,NMC60MOVMINCLK,#0;闹钟分钟寄存器满60清0NMC60:LCALLDISPJNBTZK2,$NK8:JBTZK3,NK9;设置是否开启闹钟,1表示开,0表示关LCALLDELY10MSJBTZK3,NK9;按键3按下JBF0,CLOSESETBF0;闹钟标志位置1MOV61H,#1;闹钟开启显示1LCALLDISP;调用时间变更子程序JNBTZK3,$AJMPNK9CLOSE:CLRF0MOV61H,#0LCALLDISPJNBTZK3,$NK9:JBSWITCH,ADJUST_3LCALLDELY10MSJBSWITCH,ADJUST_3MOV60H,#0RET;.......键盘抖动10毫秒延时子程序程序...........DELY10MS:MOVR6,#10D1:MOVR7,#248DJNZR7,$DJNZR6,D1RET;.......延时1秒子程序..............DELAY1S:MOVR5,#30D2:MOVR4,#100D3:MOVR3,#248DJNZR3,$DJNZR4,D3DJNZR5,D2RET;.......时间变更子程序...........DISP:MOVA,#DISPBUF1;小时、分、秒的顺序存储ADDA,#6MOVR1,AMOVA,HOURMOVB,#10DIVABMOV@R1,A;小时高位数据存到46HDECR1MOVA,BORLA,#10HMOV@R1,A;小时低位数据存到45HDECR1MOVA,MINITEMOVB,#10DIVABMOV@R1,A;分钟高位数据存到44HDECR1MOVA,BORLA,#10HMOV@R1,A;分钟低位数据存到43HDECR1MOVA,SECONDMOVB,#10DIVABMOV@R1,A;秒高位数据存到42HDECR1MOVA,BMOV@R1,A;秒低位数据存到41HMOVA,#DISPBUF2;年月日的顺序存储ADDA,#6MOVR1,AMOVA,YEAR_LMOVB,#10DIVABMOV@R1,A;年份高位数据存到56HDECR1MOVA,BORLA,#10HMOV@R1,A;年份低位数据存到55HDECR1MOVA,MOONMOVB,#10DIVABMOV@R1,A;月份高位数据存到54HDECR1MOVA,BORLA,#10HMOV@R1,A;月份低位数据存到53HDECR1MOVA,DAYMOVB,#10DIVABMOV@R1,A;日高位数据存到52HDECR1MOVA,BMOV@R1,A;日低位数据存到51HMOVA,#DISPBUF3;闹钟小时、分的顺序存储ADDA,#6MOVR1,AMOVA,HOURCLKMOVB,#10DIVABMOV@R1,A;闹钟小时高位存到66HDECR1MOVA,BORLA,#10HMOV@R1,A;闹钟小时低位存到65HDECR1MOVA,MINCLKMOVB,#10DIVABMOV@R1,A;闹钟分钟高位存到64HDECR1MOVA,BMOV@R1,A;闹钟分钟低位存到63HRET;.......中断程序............INT_T0:MOVTH0,#0F7H;重新设置初值MOVTL0,#0AHINCT2SCNTAMOVA,T2SCNTACJNEA,#40,DISPLAYMOVT2SCNTA,#00HINCT2SCNTBMOVA,T2SCNTBCJNEA,#

1 / 19
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功