导航:首页 > 操作系统 > 单片机多功能电子钟

单片机多功能电子钟

发布时间:2022-07-17 14:03:05

A. 单片机电子钟

愿意出钱的找我`~~980100952

B. 以单片机为核心附加外围电路构成多功能电子时钟,具有以下功能:时间设置,闹钟设置,显示年、月、日、星

思路:1. 要有频率稳定的晶振,频率已知
2. 单片机对晶振振荡周期进行计数,再分层次计数,来显示秒,分(60秒),时(60分),日(24时),月(30或31日,29日,这里是比较麻烦的),年(365日),星期(7日),年月日星期都要设置初值,并可以改变(调整)。再设计输出电路(驱动LED数码管),显示年、月、日、星期等。
3. 闹钟,是一个减法,即从设闹时开始到指定闹时间求差,再从设闹时开始进行减数运算,直到减运算结果为零,启闹。从起闹开始计算闹铃时常。当然,还要设计闹钟(音频振荡和扬声器驱动电路)。
4. 设计还是蛮复杂的。为了省事,可以应用现成的“电子时钟芯片”,利用单片机控制这个时钟芯片就可以了。时钟芯片规格很多,按你的要求选一选,配上单片机,就可以偷懒了。
5. 更省事的办法,买带荧光(实际是LED)数码管的“电子时钟芯片”(组件),配个单片机做时间设置和闹钟控制,那就太简单了。

C. 用单片机,ds1302做多功能数字时钟,仿真正确,接好电路后不能工作,求指导。

仿真和实际电路还是有点不同的,protus中有些管脚是省略了的,但实际中一定要有。建议你从以下几个去查找:
1.首先保证单片机最小系统能工作,可以写个最最简单的程序(比如控制P1口的高低电平)来验证
2.数码管的显示驱动电路是否搭建了,实际中单片机不能像protus中那样直接驱动的
3.P0口是否加了上拉电阻
==

D. 用单片机做一个电子时钟

这个很简单啊,两种思路:1,用单片机定时器来做,优点是外围电路简单,只需要一个单片机最小系统,和一个显示模块(1602液晶比较好);缺点是:定时不是很准,跑的时间长了会有误差,而且主要是程序,要写很多,不过程序不是很难。2,用时钟芯片,一般都用ds1302,还需要单片机最小系统和显示模块,优点是:定时准确,误差很小,在有备用电池的情况下,即使单片机掉电,也可以维持很长时间,程序相对简单。缺点是:外围电路比前者相对复杂一点。如果想做个实际的东西拿来用,建议使用第二种方法,如果是想锻炼自己的编程能力的话,选第一种吧。祝成功!

E. 单片机电子钟原理图,帮我大概解释一下这个图的工作原理就可以了,谢谢。带图!5分

本电子钟采用PIC16C55单片机控制,适于温室的定时恒温或自来水的定时定压控制等。PIC16C55单片机工作电压为2.5~6.25V,功耗低、驱动能力强。本电子钟可以控制一路负载在24小时内的3次开/关;一个双限触发的定时输出口,既可接传统的功率保持型继电器,也可接脉冲继电器。本机用四位LED数码管扫描式显示,还有消隐(省电)工作方式,使用起来非常灵活、方便。

一、 电子钟工作原理

电子钟电路见图1。RB7口是定时指示端,在定时开期间输出高电平,驱动V1发光,该口也可经缓冲作定时输出口;RB6是双限触发控制的定时输出口,其工作方式是:在RB7高电平期间,若RB1为高电平,则RB6输出高电平;若RB0为高电平,RB6输出低电平;若RB1、RB0同为低电平,RB6保持原态; 同为高电平时,RB6输出低电平。RB5、RB4用于驱动脉冲继电器,RB6上升沿触发RB5输出高电平开脉冲;在RB6下降沿触发RB4时,RB4端输出高电平关脉冲,开/关脉冲的持续时间均为125ms。

图 1

RB3是消隐控制器,接高电平(即SK1闭合)时,显示屏及秒闪正常;否则,显示消隐。显示消隐时,时钟及各控制逻辑都正常运行,如忽略RB4至RB7各口的驱动电流,则在3V供电时,整机电流不足20μA,即两节5号电池可用数月!RB2选择数码管极性,RB2为低电平,使用共阴LED;RB2为高电平,则用共阳LED。数码管的极性是在上电初始化时,根据 RB2口状态确定的,工作过程中改变RB2的电平则不起作用。

本机设S1~S4四个按键,S1是功能选择键,S2是小时增量调整,S3是分钟增量,S4用于分钟减量调节,其使用方法为:

上电时,RB5至RB7均为低电平,RB4端送出一个关脉冲,使SK1闭合,整机正常显示、工作,RC7口送出秒闪脉冲,RC6~RC0送字段码。RA3~RA0分别为10时、时、10分、分位的位码输出。这时,按一下S2或S3(时增量/ 分增量键),可使RB7端置位或复位。

在正常走时期间,秒闪正常;在校对或设置定时时,秒停闪。例如:在正常走时期间,按一下S1键,秒闪停止,屏幕显示J-,表示可以校对时间。这时再按S2~S4中任一键,屏幕显示现在时间,但秒不闪,此刻可按S2~S4校对时钟。再次按S1,屏幕显示 1∪,表示可以设定第一次开时间,此时按S2~S4对时间进行查看及设置。继续按S1,系统显示1∩,表示可设置第一次关时间……依次进行。设置好系统及 3次开关时间后,整机回到正常显示状态,秒闪恢复。

如欲取消某次开/关定时,只需把该次的开与关时间设置成相同值即可。

笔者曾把该时钟用于定时定压供水控制系统,RB6端用于驱动继电器(也可用RB5与RB4两端驱动脉冲继电器),RB1端接水压(水位)的低限输入,RB0 端接高限输入,设置好定时,一个简易的定时定压自动供水系统即告完成。

二、 编程技巧

PIC16C55单片机程序存储器只有512字节,加上采用外接32768Hz晶体振荡方式,时钟速度较低,因此,统筹好系统的工作时序与人机界面之间的关系是软件设计成败的关键。本机编程采用如下方案:软件工作流程见附图2。

图 2

PIC16C55单片机的一个机器周期是4个时钟周期,不难算出,本系统中每秒有8192个机器周期。在编制软件时,先设定单片机内部定时计数器F1的计数方式为机器周期的64分频。这样,每当F1溢出时,系统递加2秒。平时,系统每128个机器周期内用RC口与RA口驱动扫描一次显示屏,可保证每秒内扫描64次显示屏,基本上无闪烁感。而 128个机器周期正是F1的第0位(为便于叙述以下简记为F1?0)每次下降沿的间隔时间,我们可以编一段程序,当F1?0的下降沿到来时,扫描一次显示屏,每当F1的低4位为全0时(125ms一次)使系统检测一次RB口与按键状态,并进行相关处理,部分相关程序如下:

WAIT BTFSC 1,0 ;等待F1?0的下降沿,编程时

GOTO WAIT ;要保证每次下降沿前到此

MOVFW 1

SKPNZ

GOTO CLOCK ;F1=0,满2秒,转时钟处理

ANDLW 0FH ;屏蔽F1高4位

SKPZ

GOTO DISPLAY;F1低4位不为0,转显示

MOVLW 0C0H ;满125mS,使RB口脉冲复位

ANDWF 6,1

MOVLW 0FH ;检测按键

TRIS 7

MOVFW 7

ANDLW 0FH ;保留按键数据

SKPZ

GOTO AN;有键值,转按键处理

DISPLAY …… ;显示扫描,定时管理RB口

CLOCK …… ;时钟,定时处理程序

AN …… ;按键管理程序

F. 单片机电子钟电路解释原理

我是初中生,吓解释一下,
U1是处理器,U3是存储器,U1 32到39是8线地址,整个LCD工作显示取决于它。RV1是个可调电阻,它是调节液晶对比度的,RP1 为排阻另一端应该接高电位,8线地址工作只是把电位拉低,X1和X2是两个晶体振荡器,X1为U1提供工作频率,X2为U2提供,当然通过内部分频于倍频得到需要的工作频率。
你想知道工作流程,其实这些流程有些不是说一部分一部分工作的,(即使LCD没有显示,其实也工作了)几乎同时,不过还是有先后的,首先U1工作,调取U3里的数据,U3是个最简单的存储器。运算后由8线地址输出给LED。U1的9脚接了个复位开关,按下开关U1即从新启动。U1的10脚到14脚为调节开关,它会让U1的计算从某个点开始,于是时间调节才实现。还有就是定时功能,当设定的时间与时间符合,闹钟启动蜂鸣LS1

文化有限,只能说这些了,不全面的地方望指教,毕竟我初中毕业

G. 哪位有基于单片机的多功能数字电子钟的开题报告

源程序如下:ORG0000H;程序开始入口LJMPSTARTORG0003H;外中断0中断程序入口RETIORG000BH;定时器T0中断程序入口LJMPINTT0;跳至INTTO执行ORG0013H;外中断1中断程序入口RETIORG001BH;定时器T1中断程序入口LJMPINTT1ORG0023H;串行中断程序入口地址RETI;---------------主程序----------------------;START:MOVR0,#70H;70给R0,清70-7FH显示内存MOVR7,#0FHCLEARDISP:MOV@R0,#00H;0给R0中的数为地址的内存中存放(70H)INCR0DJNZR7,CLEARDISPMOV78H,#2;默认时间为12:00,闹钟5:00MOV79H,#1MOV74H,#2;防止上电时数码管显示00小时MOV75H,#1MOV66H,#1;中断退出时66H为1时,分、时计时单元数据移入显存标志MOV68H,#1;上电默认闹钟开状态MOV7DH,#6;闹钟时十位MOV7CH,#3MOV69H,#0MOV7AH,#0AH;放入"熄灭符"数据MOVTMOD,#11H;设T0、T1为16位定时器MOVTL0,#0B0H;50MS定时初值(T0计时用)MOVTH0,#3CHSETBEA;总中断开放SETBET0;允许T0中断SETBTR0;T0定时器开始计时MOVR4,#14H;1秒定时用初值(50MS×20)START1:LCALLDISPLAY;显示子程序LCALLBEEP;闹钟查询JNBP1.7,SETTIME;P1.7口为0时转时间调整程序JMPSTART1;P1.7口为1时跳回START1;-----------------------时间闹钟调整系统--------------------------;NFLAG:MOVA,68H;设置闹钟开关状态CJNEA,#1,BEE68MOV68H,#0JMPE6BEE68:MOV68H,#1E6:MOV66H,#8;中断退出66H不为1时分、时计时单元数据移入显存标志MOV72H,7BHMOV73H,7CHMOV74H,7DHMOV75H,7EHLCALLDDLLCALLDDLMOV72H,68HMOV73H,69HMOV74H,7AHMOV75H,7AHLCALLDDLLCALLDDLMOV66H,#1LJMPSTART1SETTIME:LCALLDDLJBP1.7,NFLAG;键按下时间小于1秒,设置闹钟开关状态并查看闹钟时间,不关走时,确保准确,大于1秒调时MOVTL1,#0B0H;T1闪烁定时初值MOVTH1,#3CHMOVR2,#06H;进入调时状态,赋闪烁定时初值MOV66H,#8;调闹钟时保持走时,关闭时钟显示数据SETBET1;允许T1中断SETBTR1;开启定时器T1SET1:LCALLDISPLAY;调用显示,防止键按下无显示JNBP1.7,SET1;P1.7口为0等待键释放MOVR5,#00H;清设置类型闪烁标志SETN1:INCR5;闹钟分调整SET5:LCALLDISPLAYJBP1.7,SET5SEETN1:LCALLDDL;有键按下大于1秒分时间连续加(0.5秒加1),小于1秒转调时状态JBP1.7,SET6;键释放查询,键释放自动转调时MOVR0,#7CHLCALLADD1MOVA,R3CLRCCJNEA,#60H,HHN1HHN1::INCR5;闹钟时调整SEET6:LCALLDISPLAYJBP1.7,SEET6SEETNH1:LCALLDDLJBP1.7,SETFMOVR0,#7EHLCALLADD1MOVA,R3CLRCCJNEA,#24H,HOUU1HOUU1::LCALLDISPLAYJBP1.7,SETFLCALLDDLJNBP1.7,SETOUT;短按调时,长按退出CLRET0CLRTR0MOV70H,#00H;设定后的时间从00秒开始走时MOV71H,#00HINCR5SET3:LCALLDISPLAYJBP1.7,SET3SETMM:LCALLDDLJBP1.7,SET4MOVR0,#77HLCALLADD1MOVA,R3CLRCCJNEA,#60H,MMHMMH:JCSETMMLCALLCLR0AJMPSETMMSET4:INCR5SEET4:LCALLDISPLAYJBP1.7,SEET4SETHH:LCALLDDLJBP1.7,SETOUT1MOVR0,#79HLCALLADD1MOVA,R3CLRCCJNEA,#24H,HOUUHOUU::SETBET0SETBTR0;计时开始SETOUT:MOVR5,#00H;清设置类型闪烁标志CLRTR1;关闭T1CLRET1;关T1中断MOV66H,#1SETOUT2:LCALLDISPLAYJNBP1.7,SETOUT2LJMPSTART1;--------------------------延时1秒钟-----------------------;DDL:MOV18H,#36DDL0:MOV17H,#239DDL1:LCALLDISPLAYDJNZ17H,DDL1DJNZ18H,DDL0RET;----------------------------T0中断程序------------------------;INTT0:PUSHACC;打包PUSHPSWCLRET0CLRTR0MOVA,#0B7HADDA,TL0MOVTL0,AMOVA,#3CHADDCA,TH0MOVTH0,ASETBTR0DJNZR4,OUTT0;20次中断未到中断退出ADDSS:MOVR4,#14H;20次中断到(1秒)重赋初值MOVR0,#71H;指向秒计时单元(70-71H)ACALLADD1;调用加1程序(加1秒操作)MOVA,R3;秒数据放入A(R3为2位十进制数组合)CLRC;清进位标志CJNEA,#60H,ADDMMADDMM:JCOUTT01;小于60秒退出ACALLCLR0;等于或大于60秒清0MOVR0,#77H;指向分计时单元(76H-77H)ACALLADD1MOVA,R3CLRCCJNEA,#60H,ADDHHADDHH:JCOUTT0ACALLCLR0MOVR0,#79H;指向小时计时单元(78H-79H)ACALLADD1MOVA,R3CLRCCJNEA,#24H,HOURHOUR:JCOUTT0ACALLCLR0OUTT0:MOVA,66H;查询标志CJNEA,#1,OUTT01MOV72H,76H;中断退出时将分、时计时单元数据移入对应显示单元MOV73H,77HMOV74H,78HMOV75H,79HOUTT01:POPPSW;出栈POPACCSETBET0;开放T0RETI;中断返回;---------------------------加1程序--------------------------;ADD1:MOVA,@R0;取当前计时单元数据到ADECR0;指向前一地址SWAPA;A中数据高四位与低四位交换ORLA,@R0;前一地址中数据放入A中低四位ADDA,#01H;A加1操作DAA;十进制调整MOVR3,A;移入R3寄存器ANLA,#0FH;高四位变0MOV@R0,A;放回前一地址单元MOVA,R3;取回R3中暂存数据INCR0;指向当前地址单元SWAPA;A中数据高四位与低四位交换ANLA,#0FH;高四位变0MOV@R0,A;数据放入当削地址单元中RETCLR0:CLRCCLRA;清累加器MOV@R0,A;清当前地址单元DECR0;指向前一地址MOV@R0,A;前一地址单元清0RET;子程序返回;-------------------------调时闪烁程序----------------------;INTT1:PUSHACCPUSHPSWMOVTL1,#0B0HMOVTH1,#3CHDJNZR2,INTT1OUT;0.3秒未到退出中断(50MS中断6次)MOVR2,#06H;重装0.3秒定时用初值CPL02H;0.3秒定时到对闪烁标志取反JB02H,FLASH1;02H位为1时显示单元"熄灭"MOVA,R5CJNEA,#01H,NLJMPNNN1NL:CJNEA,#02H,NL1LJMPNNN1NL1:CJNEA,#03H,NL2LJMPNLLNL2:CJNEA,#04H,INTT1OUTLJMPNLLNLL:MOV72H,76HMOV73H,77HMOV74H,78HMOV75H,79HAJMPINTT1OUTNNN1:MOV72H,7BHMOV73H,7CHMOV74H,7DHMOV75H,7EHINTT1OUT:POPPSW;恢复现场POPACCRETI;中断退出FLASH1:MOVA,R5CJNEA,#01H,MLLJMPMNN1ML:CJNEA,#02H,ML1LJMPMNN2ML1:CJNEA,#03H,MNLJMPMLLMN:CJNEA,#04H,INTT1OUTLJMPMHLMLL:MOV72H,7AHMOV73H,7AH;显示单元(72-73H),将不显示分数据MOV74H,78HMOV75H,79HAJMPINTT1OUTMHL:MOV72H,76HMOV73H,77HMOV74H,7AH;显示单元(74-75H),小时数据将不显示MOV75H,7AHAJMPINTT1OUTMNN1:MOV72H,7AHMOV73H,7AH;显示单元(72-73H),将不显示闹钟分数据MOV74H,7DHMOV75H,7EHAJMPINTT1OUTMNN2:MOV72H,7BHMOV73H,7CHMOV74H,7AHMOV75H,7AH;显示单元(74-75H),闹钟小时数据将不显示AJMPINTT1OUT;-------------------------显示-------------------------------;DISPLAY:MOVDPTR,#DISDATAMOVA,70HMOVCA,@A+DPTRMOVP3,ACLRP1.0NOPNOPNOPSETBP1.0MOVA,71HMOVCA,@A+DPTRMOVP3,ACLRP1.1NOPNOPNOPSETBP1.1MOVA,72HMOVCA,@A+DPTRMOVP3,ACLRP1.2NOPNOPNOPSETBP1.2MOVA,73HMOVCA,@A+DPTRMOVP3,ACLRP1.3NOPNOPNOPSETBP1.3MOVA,74HMOVCA,@A+DPTRMOVP3,ACLRP1.4NOPNOPNOPSETBP1.4MOVA,75HMOVCA,@A+DPTRMOVP3,ACLRP1.5NOPNOPNOPSETBP1.5RETBEEP:MOVA,68H;查询标志CJNEA,#1,BEEREMOVA,78H;查询闹钟时个位CJNEA,7DH,BEEREMOVA,79H;查询闹钟时十位CJNEA,7EH,BEEREMOVA,76H;查询闹钟分个位CJNEA,7BH,BEEREMOVA,77H;查询闹钟分十位CJNEA,7CH,BEEREBB:CLRP1.6LCALLDDLSETBP1.6LCALLDDLJNBP1.7,BEERRBEERE:RETBEERR:SETBP1.6MOV68H,#0LCALLDISPLAYJNBP1.7,BEERRJMPBEEREDISDATA:DB0C0H,0F9H,64H,70H,59H,52H,42H,0F8H,40H,50H,0FFH;0123456789空白END

H. 如何做一个单片机电子时钟

这个很简单啊,两种思路:1,用单片机定时器来做,优点是外围电路简单,只需要一个单片机最小系统,和一个显示模块(1602液晶比较好);缺点是:定时不是很准,跑的时间长了会有误差,而且主要是程序,要写很多,不过程序不是很难。2,用时钟芯片,一般都用DS1302,还需要单片机最小系统和显示模块,优点是:定时准确,误差很小,在有备用电池的情况下,即使单片机掉电,也可以维持很长时间,程序相对简单。缺点是:外围电路比前者相对复杂一点。如果想做个实际的东西拿来用,建议使用第二种方法,如果是想锻炼自己的编程能力的话,选第一种吧。祝成功!

I. 基于单片机多功能数字钟

带万年历的LCD显示多功能数字钟

程序清单:

;SMC1602接口程序(MCS51模拟口线方式)

;***************************************************************************

;连线图:*LCM---8031**LCM---8031**LCM------------8031*

;*DB0---P0.0**DB4---P0.4**RS-------------P2.0*

;*DB1---P0.1**DB5---P0.5**RW-------------P2.1*

;*DB2---P0.2**DB6---P0.6**E--------------P2.2*

;*DB3---P0.3**DB7---P0.7**VLCD接10K可调电阻到GND*

;注:8051的晶振频率为11.0592MHzR0设置数据存放S8为设置键S7为加键S4为确认键

;**************************************************************************

;P0口液晶显示

;P2.4位选键P2.3加一键P2.2返回键及报时功能键闹钟设置P2.0控制显示键

;寄存器clrrs0setbrs1R0R4R5在按键中用到延时中用到SETBRS0SETBRS1的R0R1R2

;SETBRS0CLRRS1显示中用到CLRRS0CLRRS1在闹钟调整子程序中用到R1

;*********************************************************************

;

;报时功能P2.6和闹钟功能P2.5闹钟调整时间功能已经可以设置显示的切换方式变了再关闭的情况下一切正常运行

;*****************************

RSPINBITP1.2

RWPINBITP1.1

EPINBITP1.0

WEIXUANBITP2.4;位选键设置键

JIAJIANBITP2.3;加一键

JIANJIANBITP2.2;减一键

FANHUIBITP2.1;返回键

NZKGBITP2.0;闹钟设置键

SECONTLEQU30H;秒

SECONTHEQU31H;秒

MAOHAOLEQU32H;:

MINIUTLEQU33H;分

MINIUTHEQU34H;分

MAOHAOHEQU35H;:

HOURLEQU36H;时

HOURHEQU37H;时

;*****************************日期部分***************************

DAYLEQU40H;日个

DAYHEQU41H;日十

HENLEQU42H;-

MONTHLEQU43H;yue

MONTHHEQU44H;yue

HENHEQU45H;-

YEAROEQU46H;年

YEARTEQU47H

YEARSEQU48H

YEARFEQU49H

TEMPEQU50H;用做存储单元显示子程序(DISPLAY)里用到

BIJIAOEQU51H;加一子程序(JIAYI)中用到

ZDRQOEQU55H;中断加一程序中用到

ZDRQTEQU56H;中断加一程序中用到

ZDRQSEQU57H;中断加一程序中用到

ZDRQFEQU58H;中断加一程序中用到

DIZHIEQU59H;键盘(JIANPAN)子程序里用到

NZBZBIT60H;定时标志位在(闹钟开关部分)

;38H到3FH没用到

BSCSBZBIT39H;报时次数转换标志(BSCS)里用到

BSCSCCEQU3AH;报时次数存储(BSCS)里用到

ZDBSBZBIT3BH;整点报时标志(SSBS)里用到

ZMBSBZBIT3CH;整秒闪烁标志(SSBS)里用到

BSKGBZBIT3DH;报时开启标志(BSKG)里用到

XKQHBZBIT3EH;显示开启关闭标志(XIANKONG)里用到

ORG0000H

AJMPMAIN

ORG000BH

AJMPZD

ORG0030H

MAIN:MOVSP,#60H;给堆栈指针赋初值

MOV30H,#05H;秒

MOV31H,#05H;秒

MOV32H,#3AH;:

MOV33H,#09H;分

MOV34H,#05H;分

MOV35H,#3AH;:

MOV36H,#03H;时

MOV37H,#01H;时

;*****************************日期部分***************************

MOV40H,#09H;日个

MOV41H,#02H;日十

MOV42H,#2DH;-

MOV43H,#09H;yue

MOV44H,#00H;yue

MOV45H,#2DH;-

MOV46H,#09H;年

MOV47H,#09H

MOV48H,#09H

MOV49H,#02H

CLRP2.5;闹钟

CLRP2.6;整点报时

MOV03H,#00H;闹钟分个位

MOV04H,#00H;闹钟分十位

MOV06H,#04H;闹钟时个位

MOV07H,#01H;闹钟时十位

;CLRP1.5

;CLRP1.4

MOVB,#20

MOVTMOD,#01H;定时器工作方式1

MOVTH0,#4CH

MOVTL0,#08H

SETBET0;允许T0中断

SETBEA;总中断开放

LCALLLCDRESET;初始化LCD

LCALLDISPSTART;调用显示初始状态

SETBTR0;开启定时器

CLRNZBZ;闹钟开启关闭标志

CLRBSKGBZ;报时开启关闭标志

CLRXKQHBZ;显示开启关闭标志

LOOP:LCALLJIANPAN;按键子程序

LCALLDISPLAY;显示子程序

LCALLNZBF;NAOZHONGBUFENG

LCALLNZBJ;NAOZHONGBIJIAO

LCALLBSKG;BAOSHIKAIGUAN

LCALLBSCS;BAOSHICISHU

LCALLSSBS;闪烁报时

SJMPLOOP

;==============================中断加一程序===================================

ZD:PUSHACC

MOVTH0,#4CH

MOVTL0,#08H

DJNZB,ZDEND

MOVB,#20

INCSECONTL

SETBZMBSBZ

MOVA,SECONTL

CJNEA,#0AH,ZDEND

MOVSECONTL,#00H

INCSECONTH

MOVA,SECONTH

CJNEA,#06H,ZDEND

MOVSECONTH,#00H

INCMINIUTL

MOVA,MINIUTL

CJNEA,#0AH,ZDEND

MOVMINIUTL,#00H

INCMINIUTH

MOVA,MINIUTH

CJNEA,#06H,ZDEND

MOVMINIUTH,#00H

INCHOURL

SETBBSCSBZ

SETBZDBSBZ

MOVA,HOURL;24小时的判断

CJNEA,#04H,ZDF

MOVA,HOURH

CJNEA,#02H,ZDEND

MOVHOURL,#00H

MOVHOURH,#00H

LCALLZDRQ

SJMPZDEND

ZDF:CJNEA,#0AH,ZDEND

MOVHOURL,#00H

INCHOURH

ZDEND:POPACC

RETI

;日期部分

ZDRQ:PUSHACC

INCDAYL

;判断天数28,30,31部分

MOVA,MONTHH;用于判断月份时为31天30天28天

CJNEA,#01H,LL

MOV55H,#0AH;存放月份的十位转化为个位是0AH

MOVA,MONTHL

ADDA,55H;月分高低相加用于查表

SJMPLL3

LL:MOVA,MONTHL

ADDA,MONTHH

LL3:MOV56H,A;存放相加后的月份数据

MOVDPTR,#TAB5

MOVCA,@A+DPTR;查十位和天数的十位比较

MOV57H,A

MOVA,56H

MOVDPTR,#TAB6;查个位和天数的个位比较

MOVCA,@A+DPTR

MOV58H,A

MOVA,DAYH

CJNEA,57H,LL2

MOVA,DAYL

CJNEA,58H,LL2

MOVDAYH,#00H

MOVDAYL,#01H

SJMPLL4

LL2:MOVA,DAYL

CJNEA,#0AH,ZDRQEND

MOVDAYL,#00H

INCDAYH

MOVA,DAYH;比较天数是否要进位

CJNEA,57H,ZDRQEND

MOVA,DAYL

CJNEA,58H,ZDRQEND

MOVDAYH,#00H

MOVDAYL,#01H

;月份和年份

LL4:INCMONTHL

MOVA,MONTHL

CJNEA,#03H,ZDRQ1;用于判断月份时为12月时进位

MOVA,MONTHH

CJNEA,#01H,ZDRQ1

MOVMONTHL,#01H;天数符合要求

MOVMONTHH,#00H

SJMPZDRQ2

ZDRQ1:CJNEA,#0AH,ZDRQEND

MOVMONTHL,#00H

INCMONTHH

SJMPZDRQEND

ZDRQ2:INCYEARO;年的加一

MOVA,YEARO

CJNEA,#0AH,ZDRQEND

MOVYEARO,#00H

INCYEART;年的进位

MOVA,YEART

CJNEA,#0AH,ZDRQEND

MOVYEART,#00H

INCYEARS

MOVA,YEARS

CJNEA,#0AH,ZDRQEND

MOVYEARS,#00H

INCYEARF

MOVA,YEARF

CJNEA,#0AH,ZDRQEND

MOVYEARF,#00H

ZDRQEND:

POPACC

RET

;液晶初始化

;========================初始化程序=======================================

LCDRESET:;初始化程序

LCALLDELAY5MS;延时15MS

LCALLDELAY5MS

LCALLDELAY5MS

MOVA,#38H;显示模式设置(不检测忙信号)

LCALLLCDWCN;共三次

LCALLDELAY5MS

MOVA,#38H

LCALLLCDWCN

LCALLDELAY5MS

MOVA,#38H

LCALLLCDWCN

MOVA,#38H;显示模式设置(以后均检测忙信号)

LCALLLCDWC

MOVA,#08H;显示关闭

LCALLLCDWC

MOVA,#01H;显示清屏

LCALLLCDWC

MOVA,#06H;显示光标移动设置

LCALLLCDWC

MOVA,#0CH;显示开及光标设置

LCALLLCDWC

RET

;==============================写指令===================================

LCDWC:;送控制字子程序(检测忙信号)

LCALLWAITIDLE

;******写指令*******;送控制字子程序(不检测忙信号)

LCDWCN:CLRRSPIN;RS=0RW=0E=高脉冲

CLRRWPIN

MOVP0,A

SETBEPIN;(

NOP;给高电平脉冲

CLREPIN;)

RET

;==========================写数据=======================================

LCDWD:;写字符子程序

LCALLWAITIDLE

SETBRSPIN;RS=1RW=0E=高脉冲

CLRRWPIN

MOVP0,A

SETBEPIN

NOP

CLREPIN

RET

;===============================等待控制器空闲==================================

WAITIDLE:

PUSHACC;正常读写操作之前必须检测LCD控制器状态

MOVP0,#0FFH

lcallDELAY5MS;666666666666666666666666

CLRRSPIN;RS=0RW=1E=高电平

SETBRWPIN

SETBEPIN

lcallDELAY5MS;98

WTD_PA:NOP;DB7:0LCD控制器空闲

JBP0.7,WTD_PA;1LCD控制器忙

CLREPIN

POPACC

RET

;***********************初始状态子程序*******************************

DISPSTART:;显示初始状态子程序

PUSHACC

MOVA,#80H

LCALLLCDWC

MOVDPTR,#TAB;显示字符

DISP1:CLRA

MOVCA,@A+DPTR

JZDISP2

LCALLLCDWD

INCDPTR

SJMPDISP1

DISP2:MOVA,#0C0H

LCALLLCDWC

MOVDPTR,#TAB1

DISP3:CLRA

MOVCA,@A+DPTR

JZDISP_END

LCALLLCDWD

INCDPTR

SJMPDISP3

DISP_END:

POPACC

RET

;==========================显示子程序=======================================

DISPLAY:PUSHPSW

PUSHACC

SETBRS0

CLRRS1

MOVA,#85H

LCALLLCDWC

MOVR1,#38H;第一行显示数据存储单元的启始地址

MOVTEMP,#30H;第一行显示数据存储单元的结束地址

MOVR6,#2

PLAY:DECR1

CJNER1,#32H,PLY;判断是否为冒号位

MOVA,MAOHAOL;是者送冒号的ACSI码

SJMPPLAY1

PLY:CJNER1,#35H,PLY1

MOVA,MAOHAOH

SJMPPLAY1

PLY1:CJNER1,#42H,PLY2;判断是否为横杠的位置

MOVA,HENL;是者送横杠的ACSI码

SJMPPLAY1

PLY2:CJNER1,#45H,PLY3

MOVA,HENH

SJMPPLAY1

PLY3:MOVA,@R1;用查表法送要显示的数据

MOVDPTR,#TAB2

MOVCA,@A+DPTR

PLAY1:LCALLLCDWD

MOVA,R1

CJNEA,TEMP,PLAY;判断第一行是否显示好了

MOVA,#0C5H

LCALLLCDWC

MOVR1,#4AH;第二行显示数据存储单元的启始地址

MOVTEMP,#40H;第二行的结束地址

DJNZR6,PLAY;R6为0时两行显示结束

POPACC

POPPSW

RET

;************************按键子程序************************

JIANPAN:clrrs0;键盘子程序

setbrs1;键盘子程序

JBWEIXUAN,JIAN_ZEND;设置键的判断

LCALLDELAY5MS

JBWEIXUAN,JIAN_ZEND

PUSHACC

JNBWEIXUAN,$

;MOVA,#0FH;开启光标闪烁设置

;LCALLLCDWCN

fah:JNBNZBZ,JPNZSJ;为“1”闹钟为“0”时钟

LCALLJPXS

MOVR4,#86H;闹钟设定时间R4存放显示位地址

MOVR5,#2;闹钟设定时间第一行第二行•••••位置改变次数

MOVDIZHI,#8CH;闹钟设定时间第一行结束地址

MOVR0,#06H

SJMPGIVED

JPNZSJ:CLRTR0

MOVR4,#86H;R4存放显示位地址

MOVR5,#2;第一行第二行•••••位置改变次数

MOVDIZHI,#8DH;第一行结束地址

MOVR0,#36H

GIVED:MOVA,#0FH;开启光标闪烁设置

LCALLLCDWCN

MOVA,R4

LCALLLCDWC

UPONE:JBFANHUI,UPtwo;返回键的判断

LCALLDELAY5MS

JBFANHUI,UPtwo

JNBFANHUI,$

SJMPGOBACK

JIAN_ZEND:SJMPJIAN_END;中继跳转

UPtwo:JBJIAJIAN,IAM;加一键的判断

LCALLDELAY5MS

JBJIAJIAN,IAM

JNBJIAJIAN,$

LCALLJIAYI;调用按键加一子程序

;MOVA,#0FH;开启光标闪烁设置

;LCALLLCDWCN

IAM:JBJIANJIAN,IAM22;减一键的判断

LCALLDELAY5MS

JBJIANJIAN,IAM22

JNBJIANJIAN,$

LCALLJIANYI;调用按键减一子程序

AJMPGIVED

IAM22:JBWEIXUAN,UPONE;位选键的判断

LCALLDELAY5MS

JBWEIXUAN,UPONE

JNBWEIXUAN,$

DECR0

INCR4

LCALLJIAN;调用位选比较程序

CJNEr4,#88H,JJ11

DECR0

INCR4

SJMPJJ22

JJ11:CJNEr4,#8BH,JJ22

DECR0

INCR4

JJ22:MOVA,R4

CJNEA,DIZHI,GIVED

JBNZBZ,fah;为“1”闹钟为“0”时钟

MOVR4,#0C5H

MOVDIZHI,#0CFH

MOVR0,#49H

DJNZR5,GIVED

LJMPfah

GOBACK:MOVA,#0CH;关闭光标闪烁设置

LCALLLCDWCN

POPACC

JIAN_END:

SETBTR0

RET

;111111

;1111

JPXS:MOVA,#85H

LCALLLCDWC

MOVR1,#08H;第一行显示数据存储单元的启始地址

JPXS_LL:DECR1

CJNER1,#05H,JPXS_LP

MOVA,#3AH

SJMPJPXS_LY

JPXS_LP:MOVA,@R1;用查表法送要显示的数据

MOVDPTR,#TAB2

MOVCA,@A+DPTR

JPXS_LY:LCALLLCDWD

CJNER1,#03H,JPXS_LL

RET

;

;

;************************位选比较控制程序************************

;在调整时间时这几位是符号冒号和横杠的数据

;在这几位时跳过到下一位

JIAN:CJNER4,#87H,JIAN5

DECR0

INCR4

SJMPJIANEND

JIAN5:CJNER4,#8AH,JIAN1

DECR0

INCR4

SJMPJIANEND

JIAN1:CJNER4,#0C9H,JIAN2

DECR0

INCR4

SJMPJIANEND

JIAN2:CJNER4,#0CCH,JIANEND

DECR0

INCR4

JIANEND:RET

;************************按键加一子程序********************

JIAYI:INC@R0

CJNE@R0,#0AH,JIAYI_END

MOV@R0,#0

CJNER4,#86H,JIAYI55

SJMPJIAYI33

JIAYI55:CJNEr4,#89H,JIAYI11

SJMPJIAYI33

JIAYI11:CJNEr4,#8CH,JIAYI22

SJMPJIAYI33

JIAYI22:CJNER0,#30H,JIAYI_END

JIAYI33:INCR0

INC@R0

CJNE@R0,#06H,JIAYI44

MOV@R0,#0

JIAYI44:DECR0

JIAYI_END:MOVA,#0CH;开启光标闪烁设置

LCALLLCDWCN

JNBNZBZ,JIAYI88;为“1”闹钟为“0”时钟

LCALLJPXS

SJMPJIAYI99

JIAYI88:LCALLDISPLAY;显示子程序

JIAYI99:RET

;%%%%%%%%%%%%%%%%%%减一%%%%%%%%%%%%%%%%%%%%%%%%

JIANYI:DEC@R0

CJNE@R0,#00H,JIANYI_END

MOV@R0,#9

CJNER4,#86H,JIANYI55

SJMPJIANYI33

JIANYI55:CJNEr4,#89H,JIANYI11

SJMPJIANYI33

JIANYI11:CJNEr4,#8CH,JIANYI22

SJMPJIANYI33

JIANYI22:CJNER0,#30H,JIANYI_END

JIANYI33:INCR0

DEC@R0

CJNE@R0,#0FFH,JIANYI44

MOV@R0,#5

JIANYI44:DECR0

JIANYI_END:MOVA,#0CH;开启光标闪烁设置

LCALLLCDWCN

JNBNZBZ,JIANYI88;为“1”闹钟为“0”时钟

LCALLJPXS

SJMPJIANYI99

JIANYI88:LCALLDISPLAY;显示子程序

JIANYI99:RET

;******************************闹钟开关部分************************

NZBF:JBNZKG,NZBF_END

LCALLDELAY5MS

JBNZKG,NZBF_END

JNBNZKG,$

CPLNZBZ

JBNZBZ,NZBF_LL

MOVA,#01H;显示清屏

LCALLLCDWC

CLRP2.5

LCALLDISPSTART;调用显示初始状态

LCALLDISPLAY;调用显示初始状态

JBBSKGBZ,NZBF_LP;|

SJMPNZBF_END;|

NZBF_LP:MOVA,#8FH;报时标志显示位置;|

LCALLLCDWC;|保护报时标志在清屏是不被误清

MOVA,#25H;显示报时标志;|

LCALLLCDWD;|

SJMPNZBF_END;|

NZBF_LL:MOVA,#8EH;闹钟标志显示位置

LCALLLCDWC

MOVA,#26H;显示闹钟标志

LCALLLCDWD

NZBF_END:RET

;******************************闹钟比较部分************************

NZBJ:JBNZBZ,NZBJ_LL

SJMPNZBJ_END

NZBJ_LL:MOVA,07H

CJNEA,37H,NZBJ_END

MOVA,06H

CJNEA,36H,NZBJ_END

MOVA,04H

CJNEA,34H,NZBJ_END

MOVA,03H

CJNEA,33H,NZBJ_END

SETBP2.5

NZBJ_END:RET

;***************报时开关********************

BSKG:JBFANHUI,BSKG_END

LCALLDELAY5MS

JBFANHUI,BSKG_END

JNBFANHUI,$

CPLBSKGBZ

JBBSKGBZ,BSKG_LL

MOVA,#01H;显示清屏

LCALLLCDWC

CLRP2.6

LCALLDISPSTART;调用显示初始状态

LCALLDISPLAY;调用显示

JBNZBZ,BSKG_LP;|

SJMPBSKG_END;|

BSKG_LP:MOVA,#8EH;|

LCALLLCDWC;|保护闹钟标志在清屏是不被误清

MOVA,#26H;|

LCALLLCDWD;|

SJMPBSKG_END;|

BSKG_LL:MOVA,#8FH;报时标志显示位置

LCALLLCDWC

MOVA,#25H;显示报时标志

LCALLLCDWD

BSKG_END:RET

;*********************报时次数********************

BSCS:JNBBSKGBZ,BSCS_END

JNBBSCSBZ,BSCS_END

MOVA,37H

CJNEA,#01H,BSCS_LL

MOVA,#0AH

SJMPBSCS_LP

BSCS_LL:CJNEA,#02H,BSCS_LP

MOVA,#14H

BSCS_LP:ADDA,36H

RLA

MOVBSCSCC,A

CLRBSCSBZ

BSCS_END:RET

;**********************闪烁报时********************************

SSBS:JNBBSKGBZ,SSBS_END

JNBZDBSBZ,SSBS_END

JNBZMBSBZ,SSBS_END

CPLP2.6

CPLP2.7

CLRZMBSBZ

DJNZBSCSCC,SSBS_END

CLRZDBSBZ

CLRP2.6

SSBS_END:RET

;************************延时子程序(5MS)************************

DELAY5MS:

PUSHPSW

SETBRS0

SETBRS1

MOVR1,#25;延时子程序(5MS)

DL5_PA:MOVR2,#100

DJNZR2,$

DJNZR1,DL5_PA

POPPSW

RET

TAB:DB"TIME:",00h

TAB1:DB"DATE:",00h

TAB2:DB"01234567891"

TAB3:DB0AH,06H,00H,0AH,06H,00H,0AH,03H;用于比较调整时间时的比较

TAB4:DB0AH,04H,00H,0AH,02H,00H,0AH,0AH,0AH,0AH;用于调整日期时的比较

TAB5:DB00H,03H,02H,03H,03H,03H,03H,03H,03H,03H,03H,03H,03H;用于天数十位比较

TAB6:DB00H,02H,09H,02H,01H,02H,01H,02H,02H,01H,02H,01H,02H;用于天数个位比较

阅读全文

与单片机多功能电子钟相关的资料

热点内容
好兴动app还款怎么登录不上去了 浏览:665
郑州云服务器托管 浏览:722
服务器地址跟踪 浏览:980
免费google云服务器 浏览:516
摘译和编译的英文 浏览:359
热泵压缩机选型 浏览:121
op手机微信加密如何解除 浏览:386
如何在王牌战争找到高爆率服务器 浏览:13
江浙小学语文辅导课用什么APP 浏览:99
新梦幻大陆服务器地址 浏览:241
网吧服务器怎么更换壁纸 浏览:530
linux命令方法 浏览:332
linux下载freetype 浏览:123
程序员入驻平台 浏览:327
程序员大战外挂 浏览:745
html实例教程pdf 浏览:157
linux命令开放所有权限 浏览:575
30岁能学会编程 浏览:737
小火箭的服务器是什么 浏览:967
cad查信息命令 浏览:402