首页 单片机电子电子万年历

单片机电子电子万年历

举报
开通vip

单片机电子电子万年历 郑州工业安全职业学院 毕业论文(设计) 题目: 单片机电子万年历 姓 名 系 别 信息工程系 专 业 电气自动化技术 班 级 08级(1)班 指导教师 年 月 日 内容摘要 3 4 前 言 第一章、设...

单片机电子电子万年历
郑州工业安全职业学院 毕业论文(设计) 题目: 单片机电子万年历 姓 名 系 别 信息工程系 专 业 电气自动化技术 班 级 08级(1)班 指导教师 年 月 日 内容摘要 3 4 前 言 第一章、设计 要求 对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 论证 4 1.1 设计要求: 4 1.2 系统基本方案选择和论证 4 第二章、系统的硬件设计与实现 6 2.1 电路设计框图 6 2.2 系统硬件概述 6 2.3 主要单元电路的设计 7 第三章、系统的软件设计 11 3.1程序 流程 快递问题件怎么处理流程河南自建厂房流程下载关于规范招聘需求审批流程制作流程表下载邮件下载流程设计 框图 11 3.2 子程序的设计 14 作品总结 15 参考文献 16 致谢词 16 附录A :系统电路图 17 附录B:万年历实物图 18 附录C:系统程序清单 18 内容摘要 本设计是基于51系列的单片机的电子万年历及基于VB的串口通信设计,万年历可以显示年、月、日、时、分、秒、星期等,具有日期和时间校准、闰年补偿、温度显示、闹钟、光控开关,秒表等多种功能,万年历串口通信具有电脑一键校准时间,利用电脑联机,设置心情语悟,增加名片等功能。在设计的同时对单片机、VB的理论基础和外围扩展知识进行了比较全面准备。本设计由万年历控制模块,显示模块,发声模块,串口通信模块五个部分组成。控制模块由单片机89C52,按键模块,光控开关模块,温度感应模块等组成,其中89C52单片机作为核心,功耗小,电压可选用3~5V电压供电。显示模块由15个7段共阳数码管模块、12864LCD液晶模块组成。发声模块由蜂鸣器和三极管组成。串口通信模块由单片机89C52、按键组成。利用单片机可以大大减小硬件的复杂程度。综合以上各优点可知道该设备的确是一款经济、适用、多功能的万年历。 关键词:单片机89C52,串口通信,控制模块,显示模块,发声模块,DS1302 。 前 言 随着电子技术的迅速发展,特别是随大规模集成电路出现,给人类生活带来了根本性的改变。由其是单片机技术的应用产品已经走进了千家万户。电子万年历的出现给人们的生活带来的诸多方便。本文首先描述系统硬件工作原理,并附以系统结构框图加以说明,着重介绍了本系统所应用的各硬件接口技术和各个接口模块的功能及工作过程,其次,详细阐述了程序的各个模块和实现过程。本设计以数字集成电路技术为基础,单片机技术为核心。本文编写的主导思想是软硬件相结合,以硬件为基础,来进行各功能模块的编写。本系统以单片机的C语言进行软件设计,增加了程序的可读性和可移植性,为了便于扩展和更改,软件的设计采用模块化结构,使程序设计的逻辑关系更加简洁明了。系统通过点阵式液晶为载体显示数据,所以具有人性化的操作和美观的页面效果。可以显示时间、公农历日期、星期、温度、节气,天干地支和当天日出日落时间,并有闹铃和智能控制家用电器功能。 第一章、设计要求与方案论证 1.1 设计要求: (1)基本要求 具有年、月、日、星期、时、分、秒等功能; 万年历具有闰月识别显示功能; 具备年、月、日、星期、时、分、秒校准功能; ( 2 ) 创新要求 万年历具有阴历显示功能; 具有测量室内温度功能; 1.2 系统基本方案选择和论证 1.2.1单片机芯片的选择方案和论证: 方案一: 采用89C51芯片作为硬件核心,采用Flash ROM,内部具有4KB ROM 存储空间,能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术, 当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,对芯片的多次拔插会对芯片造成一定的损坏。 方案二: 采用AT89S52,片内ROM全都采用Flash ROM;能以3V的超底压工作;同时也与MCS-51系列单片机完全该芯片内部存储器为8KB ROM 存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能需要烧入程序时,不需要对芯片多次拔插,所以不会对芯片造成损坏。所以选择采用AT89S52作为主控制系统。 1.2.2 显示模块选择方案和论证: 方案一: 采用LED液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,但是价格昂贵,需要的接口线多,所以在此设计中不采用LED液晶显示屏。 方案二: 采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示。 方案三: 采用LED数码管动态扫描,LED数码管价格适中,对于显示数字最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。 所以采用了LED数码管作为显示。 1.2.3时钟芯片的选择方案和论证: 方案一: 直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。所以不采用此方案。 方案二: 采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,位的RAM做为数据暂存区,工作电压2.5V~5.5V范围内,2.5V时耗电小于300nA. 1.3 电路设计最终方案决定 综上各方案所述,对此次作品的方案选定: 采用AT89S52作为主控制系统; DS1302提供时钟;数字式温度传感器;LED数码管动态扫描作为显示。 第二章、系统的硬件设计与实现 2.1 电路设计框图 图-1 2.2 系统硬件概述 本电路是由AT89S52单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;时钟电路由DS1302提供,它是一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V~5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31*8的用于临时性存放数据的RAM寄存器。可产生年、月、日、周日、时、分、秒,具有使用寿命长,精度高和低功耗等特点,同时具有掉电自动保存功能;温度的采集由DS18B20构成;显示部份由21个数码管,74ls138、74ls47译码器构成。使用动态扫描显示方式对数字的显示。 2.3 主要单元电路的设计 2.3.1单片机主控制模块的设计 AT89S52单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3, MCS-51单片机共有4个8位的I/O口(P0、P1、P2、P3),每一条I/O线都能独立地作输出或输入。 单片机的最小系统如下图所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出.第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端. 如图-2 所示 图-2 主控制系统 2.3.2时钟电路模块的设计 图-3示出DS1302的引脚排列,其中Vcc1为后备电源,Vcc2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当Vcc2大于Vcc1+0.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768KHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RSTS置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电动行时,在Vcc大于等于2.5V之前,RST必须保持低电平。中有在SCLK 为低电平时,才能将RST置为高电平,I/O为串行数据输入端(双向)。SCLK始终是输入端。 图-3 DS1302的引脚图 2.3.3电路原理及说明 (1)时钟芯片DS1302的工作原理: DS1302在每次进行读、写程序前都必须初始化,先把SCLK端置 “0”,接着把RST端置“1”,最后才给予SCLK脉冲;读/写时序如下图4所示。图5为DS1302的控制字,此控制字的位7必须置1,若为0则不能把对DS1302进行读写数据。对于位6,若对程序进行读/写时RAM=1,对时间进行读/写时,CK=0。位1至位5指操作单元的地址。位0是读/写操作位,进行读操作时,该位为1;该位为0则表示进行的是写操作。控制字节总是从最低位开始输入/输出的。表6为DS1302的日历、时间寄存器内容:“CH”是时钟暂停标志位,当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位为0时,时钟开始运行。“WP”是写保护位,在任何的对时钟和RAM的写操作之前,WP必须为0。当“WP”为1时,写保护位防止对任一寄存器的写操作。 (2) DS1302的控制字节 DS1302的控制字如表-1所示。控制字节的高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果0,则表示存取日历时钟数据,为1表示存取RAM数据;位5至位1指示操作单元的地址;最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出 表-1 DS1302的控制字格式 RAM RD 1 A4 A3 A2 A1 A0 / CK /WR (3) 数据输入输出(I/O) 在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。如下图-4所示 图-4 DS1302读/写时序图 (4) DS1302的寄存器 DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表-2。 表-2 DS1302的日历、时间寄存器 此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。 如图-5所示,采用动态扫描显示,由21个数码管,3-8译码器74LS138接1K限流电阻,再接8550三极管接到共阳数码管的CoM端作为选通位码,每位选择相应的列。74ls47接240Ω限流电阻,再接共行的LED数码管的断码。 图-5 LED动态扫描 第三章、系统的软件设计 3.1程序流程框图 图-1计算阳历程序 流程图 破产流程图 免费下载数据库流程图下载数据库流程图下载研究框架流程图下载流程图下载word 图-2 时间调整程序流程图 3.2 子程序的设计 3.2.1 读、写DS1302子程序 ;写1302程序WRITE: CLR SCLK NOP SETB RST NOP MOV A,32H MOV R4,#8 WRITE1: RRC A ;送地址给1302 NOP NOP CLR SCLK NOP NOP NOP MOV IO,C NOP NOP NOP SETB SCLK NOP NOP DJNZ R4,WRITE1 CLR SCLK NOP MOV A,31H MOV R4,#8 WRITE2: RRC A NOP ;送数据给1302 CLR SCLK NOP NOP MOV IO,C NOP NOP NOP SETB SCLK NOP NOP DJNZ R4,WRITE2 CLR RST RET ;读1302程序 READ: CLR SCLK NOP NOP SETB RST NOP MOV A,32H MOV R4,#8 READ1: RRC A ;送地址给1302 NOP MOV IO,C NOP NOP NOP SETB SCLK NOP NOP NOP CLR SCLK NOP NOP DJNZ R4,READ1 MOV R4,#8 READ2: CLR SCLK NOP ;从1302中读出数据 NOP NOP MOV C,IO NOP NOP NOP NOP NOP RRC A NOP NOP NOP NOP SETB SCLK NOP DJNZ R4,READ2 MOV 31H,A CLR RST RET 作品总结 通过这次制作使我了解了整个万年历的工作过程和各个部分的工作过程,使我体会到利用单片机设计的电子万年历便于操作、直观。在本次制作中,碰到了很多问题,但经过了老师、同学的指导和帮助,这些问题基本上得到了解决。另外软件部分还需要多多向老师或同学学习。 在这个设计中还有待提高的地方,由于本次制作时间紧迫,有些元器件还没能通过软件程序得到运用,有些问题还待解决。比如一开始插上电源使用时做调时切换用的按键不灵活等。 总之,通过这次的毕业设计使我对本门专业知识有了进一步的学习,提高了我收集资料的能力,动手的能力。对书本中学到的知识也有了进一步的认识。 参考文献 1 刘勇 编 《数字电路》 电子工业出版社 2004 2 陈正振 编 《电子电路设计与制作》 广西交通职业技术学院信息工程系 2007 3 杨子文 编 《单片机原理及应用》 西安电子科技大学出版社 2006 4 王法能 编 《单片机原理及应用》 科学出版社 2004 致谢词 感谢学院给我们提供了一个展现自己的舞台,给我们一次难得煅炼的机会,使得我们的动手能力和专业技能都有了很大的提高。 在做作品的日子里得到了老师的悉心指导,在此向我的指导教师致以诚挚的谢意。感谢提供相关技术帮助的老师和同学,你们的支持和鼓励使我们对这次的作品完成有了信心和动力,也给了我们很多无私的帮助和支持,我们在此深表谢意。 附录B:万年历实物图 附录C:系统程序清单 CONFIG12 EQU 7FH TEMPH EQU 21H TEMPL EQU 20H REG2 EQU 22H REG3 EQU 23H REG4 EQU 24H DAT EQU P0.7 SCLK EQU P3.2 IO EQU P3.3 RST EQU P3.4 year DATA 66H month DATA 65H week DATA 64H day DATA 63H hour DATA 62H mintue DATA 61H second DATA 60H ORG 0000H LJMP START ORG 001BH LJMP INTT1 START: ;初值 LCALL ZJ SETB EA MOV SCON,#00H ; 串行输出,方式0 MOV TMOD,#10H ;计数器1,方式1 MOV TL1,#00H MOV TH1,#00H MOV 32H,#8EH MOV 31H,#00H ;允许写1302 LCALL WRITE MOV 32H,#90H MOV 31H,#0A6H ;1302充电,充电电流1.1MA LCALL WRITE ;主程序~~~~~~~~~~~~~~~~~~~~~ MAIN1: MOV 32H,#8DH ;读出年 LCALL READ MOV year,31H MOV 32H,#8BH ;读出星期 LCALL READ MOV week,31H MOV 32H,#89H ;读出月 LCALL READ MOV month,31H MOV 32H,#87H ;读出日 LCALL READ MOV day,31H MOV 32H,#85H ;读出小时 LCALL READ MOV hour,31H MOV 32H,#83H ;读出分钟 LCALL READ MOV mintue,31H MOV 32H,#81H ;读出秒 LCALL READ MOV second,31H ;~~~~~~~~~~~~分离缓存~~~~~~~~ MOV R0,year ;年分离,送显示缓存 LCALL DIVIDE MOV 7BH,R1 MOV 4BH,R1 MOV 7CH,R2 MOV 4CH,R2 MOV 78H,week MOV 48H,week MOV R0,month ;月分离,送显示缓存 LCALL DIVIDE MOV 79H,R1 MOV 49H,R1 MOV 7AH,R2 MOV 4AH,R2 MOV R0,day ;日分离,送显示缓存 LCALL DIVIDE MOV 76H,R1 MOV 46H,R1 MOV 77H,R2 MOV 47H,R2 MOV R0,hour ;小时分离,送显示缓存 LCALL DIVIDE MOV 74H,R1 MOV 44H,R1 MOV 75H,R2 MOV 45H,R2 MOV R0,mintue ;分钟分离,送显示缓存 LCALL DIVIDE MOV 72H,R1 MOV 42H,R1 MOV 73H,R2 MOV 43H,R2 MOV R0,second ;秒分离,送显示缓存 LCALL DIVIDE MOV 70H,R1 MOV 40H,R1 MOV 71H,R2 MOV 41H,R2 CLR EA LCALL TOUTOU SETB EA LCALL DISPLAY LCALL GENGXIAN ;更新农历程序 JNB P0.1,SETG111 JNB F0,SSS setb P0.4 ;非闰月,则p0.4清零,指示灯亮 LJMP MAIN1 SETG111: LJMP SETG SSS: clr P0.4 ;闰月,则p0.4置位,指示灯不亮 LJMP MAIN1 ;~~~~~~~~~~~~~~ 温度 TOUTOU: LCALL CHUSHI LCALL RDTEMP MOV A,TEMPL ANL A,#11110000B MOV TEMPL,A MOV A,TEMPH ANL A,#00000111B ORL A,TEMPL SWAP A MOV 25H,A MOV A,25H MOV B,#64H DIV AB MOV A,B MOV B,#0AH DIV AB SWAP A ORL A,B MOV 10H,A RET CHUSHI: LCALL RESET MOV A,#0CCH LCALL WRITE111 MOV A,#4EH LCALL WRITE111 MOV A,#CONFIG12 LCALL WRITE111 RET RDTEMP: LCALL RESET MOV A,#0CCH LCALL WRITE111 MOV A,#44H LCALL WRITE111 LCALL DL1MS LCALL RESET MOV A,#0CCH LCALL WRITE111 MOV A,#0BEH LCALL WRITE111 LCALL ERAD111 MOV TEMPL,A LCALL ERAD111 MOV TEMPH,A RET RESET: LA: SETB DAT MOV 52H,#200 LB: CLR DAT DJNZ 52H,LB SETB DAT MOV 52H,#30 LC: DJNZ 52H,LC CLR C ORL C,DAT JC LB MOV 58H,#80 LD: ORL C,DAT JC LP DJNZ 58H,LD SJMP LA LP: MOV 52H,#250 LF: DJNZ 52H,LF RET WRITE111: MOV 53H,#8 W51HA: SETB DAT MOV 54H,#8 RRC A CLR DAT W52HA: DJNZ 54H,W52HA MOV DAT,C MOV 54H,#30 W53HA: DJNZ 54H,W53HA DJNZ 53H,W51HA SETB DAT RET ERAD111: CLR EA MOV 58H,#8 RD1A: CLR DAT MOV 54H,#6 NOP SETB DAT RD2A: DJNZ 54H,RD2A MOV C,DAT RRC A MOV 55H,#30 RD3A: DJNZ 55H,RD3A DJNZ 58H,RD1A SETB DAT RET ;公历设置程序~~~~~~~~~~~~~~~~~~~~~ SETG : SETB TR1 SETB ET1 MOV 32H,#8EH MOV 31H,#00H ;允许写1302 LCALL WRITE MOV 32H,#80H MOV 31H,#80H ;1302停止振荡 LCALL WRITE GWAIT: ;~~~~~~~~~~~~~~~~~~ LCALL DISPLAY JNB P0.1,GWAIT SETG1: LCALL DISPLAY JNB P0.1,SETG2 JNB P0.2,GADDYEAR JNB P0.3,JIANYEAR AJMP SETG1 GADDYEAR: MOV R7,66H ;年加一 LCALL ADD1 MOV 66H,A CJNE A,#51H,GADDYEAR1 MOV 66H,#00H AJMP GADDYEAR1 JIANYEAR: MOV R7,66H ;年减一 LCALL JIAN1 MOV 66H,A CJNE A,#00H,GADDYEAR1 MOV 66H,#51H GADDYEAR1: MOV 32H,#8CH ;年值送人1302 MOV 31H,66H LCALL WRITE MOV R0,66H LCALL DIVIDE ;年分离送显示缓存 MOV 4BH,R1 MOV 7BH,R1 MOV 4CH,R2 MOV 7CH,R2 WAITT1: ;~~~~~~~~~~~~~~~~ LCALL DISPLAY JNB P0.2,WAITT1 JNB P0.3,WAITT1 AJMP SETG1 SETG2: SETB 0AH ;调月时闪标志 GWAIT2: LCALL DISPLAY JNB P0.1,GWAIT2 SETG3: LCALL DISPLAY JNB P0.1,SETG4 JNB P0.2,GADDMONTH JNB P0.3,JIANMONTH AJMP SETG3 GADDMONTH: MOV R7,65H ;月加一 LCALL ADD1 MOV 65H,A CJNE A,#13H,GADDMONTH1 MOV 65H,#01H AJMP GADDMONTH1 JIANMONTH: MOV R7,65H ;月减一 LCALL JIAN1 MOV 65H,A CJNE A,#00H,GADDMONTH1 MOV 65H,#12H GADDMONTH1: MOV 32H,#88H ;月值送人1302 MOV 31H,65H LCALL WRITE MOV R0,65H LCALL DIVIDE ;月分离,送显示缓存 MOV 79H,R1 MOV 49H,R1 MOV 7AH,R2 MOV 4AH,R2 WAITT2: ;~~~~~~~~~~~~~~~~~~~~ LCALL DISPLAY JNB P0.2,WAITT2 JNB P0.3,WAITT2 AJMP SETG3 SETG4: SETB 0BH ;调日时闪标志 GWAIT4: LCALL DISPLAY JNB P0.1,GWAIT4 SETG5: LCALL DISPLAY JNB P0.1,SETG6 JNB P0.2,GADDDAY JNB P0.3,JIANDAY AJMP SETG5 GADDDAY: MOV R7,63H ;日加一 LCALL ADD1 MOV 63H,A CJNE A,#32H,GADDDAY1 MOV 63H,#01H JIANDAY: MOV R7,63H ;日减一 LCALL JIAN1 MOV 63H,A CJNE A,#00H,GADDDAY1 MOV 63H,#31H GADDDAY1: MOV 32H,#86H ;日值送人1302 MOV 31H,63H LCALL WRITE MOV R0,63H LCALL DIVIDE ;日分离,送显示缓存 MOV 76H,R1 MOV 46H,R1 MOV 77H,R2 MOV 47H,R2 WAITT3: ;~~~~~~~~~~~~~~~~~ LCALL DISPLAY JNB P0.2,WAITT3 JNB P0.3,WAITT3 AJMP SETG5 SETG6: SETB 0CH ;调星期时闪标志 GWAIT6: LCALL DISPLAY JNB P0.1,GWAIT6 SETG7: LCALL DISPLAY JNB P0.1,SETG8 JNB P0.2,GADDWEEK JNB P0.3,JIANWEEK AJMP SETG7 GADDWEEK: MOV R7,64H ;星期加一 LCALL ADD1 MOV 64H,A CJNE A,#07H,GADDWEEK1 MOV 64H,#00H AJMP GADDWEEK1 JIANWEEK: MOV R7,64H ;星期减一 LCALL JIAN1 MOV 64H,A CJNE A,#00H,GADDWEEK1 MOV 64H,#06H GADDWEEK1: MOV 32H,#8AH MOV 31H,64H ;星期值送人1302 LCALL WRITE MOV R0,64H LCALL DIVIDE ;星期值分离送显示缓存 MOV 48H,R1 MOV 78H,R1 WAITT4: ;~~~~~~~~~~~~~~~ ~~~~~ LCALL DISPLAY JNB P0.2,WAITT4 JNB P0.3,WAITT4 AJMP SETG7 SETG8: SETB 0DH ;调小时时闪标志 GWAIT8: LCALL DISPLAY JNB P0.1,GWAIT8 SETG9: LCALL DISPLAY JNB P0.1,SETG10 JNB P0.2,GADDHOUR JNB P0.3,JIANHOUR AJMP SETG9 GADDHOUR: MOV R7,62H ;小时加一 LCALL ADD1 MOV 62H,A CJNE A,#24H,GADDHOUR1 MOV 62H,#00H AJMP GADDHOUR1 JIANHOUR: MOV R7,62H ;小时减一 LCALL JIAN1 MOV 62H,A CJNE A,#00H,GADDHOUR1 MOV 62H,#23H GADDHOUR1: MOV 32H,#84H ;小时值送人1302 MOV 31H,62H LCALL WRITE MOV R0,62H LCALL DIVIDE ;小时值分离送显示缓存 MOV 74H,R1 MOV 44H,R1 MOV 75H,R2 MOV 45H,R2 WAITT5: ;~~~~~~~~~~~~~~~~~~~~~~~~~ LCALL DISPLAY JNB P0.2,WAITT5 JNB P0.3,WAITT5 AJMP SETG9 SETG10: SETB 0EH ;调分时候闪标志 GWAIT10: LCALL DISPLAY JNB P0.1,GWAIT10 SETG11: LCALL DISPLAY JNB P0.1,SETGOUT JNB P0.2,GADDMINTUE JNB P0.3,JIANMINTUE AJMP SETG11 GADDMINTUE: MOV R7,61H ;分钟加一 LCALL ADD1 MOV 61H,A CJNE A,#60H,GADDMINTUE1 MOV 61H,#00H AJMP GADDMINTUE1 JIANMINTUE: MOV R7,61H ;分钟减一 LCALL JIAN1 MOV 61H,A CJNE A,#00H,GADDMINTUE1 MOV 61H,#59H GADDMINTUE1: MOV 32H,#82H ;分钟值送人1302 MOV 31H,61H LCALL WRITE MOV R0,61H LCALL DIVIDE ;分钟值分离送显示缓存 MOV 72H,R1 MOV 42H,R1 MOV 73H,R2 MOV 43H,R2 WAITT6: LCALL DISPLAY JNB P0.2,WAITT6 JNB P0.3,WAITT6 AJMP SETG11 SETGOUT: LCALL DISPLAY JNB P0.1,SETGOUT LCALL GENGXIAN MOV 32H,#80H MOV 31H,#00H ;1302晶振开始振荡 LCALL WRITE MOV 32H,#8EH MOV 31H,#80H ;禁止写入1302 LCALL WRITE CLR 08H CLR 09H CLR 0AH CLR 0BH CLR 0CH CLR 0DH CLR 0EH CLR 0FH CLR ET1 ;关闪中断 CLR TR1 LJMP MAIN1 ;;闪动调时程序~~~~~~~~~~~~~~~~ INTT1: PUSH ACC PUSH PSW GFLASH: CPL 0FH JB 0FH,GFLASH1 MOV 7CH,4CH ;全部显示 MOV 7BH,4BH MOV 7AH,4AH MOV 79H,49H MOV 78H,48H MOV 77H,47H MOV 76H,46H MOV 75H,45H MOV 74H,44H MOV 73H,43H MOV 72H,42H MOV 71H,41H MOV 70H,40H GFLASHOUT: POP PSW POP ACC RETI GFLASH1: JB 0AH,GFLASH2 ;调年闪 MOV 7CH,#0FH MOV 7BH,#0FH AJMP GFLASHOUT GFLASH2: JB 0BH,GFLASH3 ;调月闪 MOV 7AH,#0FH MOV 79H,#0FH AJMP GFLASHOUT GFLASH3: JB 0CH,GFLASH4 ;调日闪 MOV 77H,#0FH MOV 76H,#0FH AJMP GFLASHOUT GFLASH4: JB 0DH,GFLASH5 ;调星期闪 MOV 78H,#0FH AJMP GFLASHOUT GFLASH5: JB 0EH,GFLASH6 ;调小时闪 MOV 75H,#0FH MOV 74H,#0FH AJMP GFLASHOUT GFLASH6: MOV 73H,#0FH ;调分钟闪 MOV 72H,#0FH AJMP GFLASHOUT ;加一程序~~~~~~~~~~~~~~~~~~~~~~~~~ ADD1: MOV A,R7 ADD A,#1 DA A RET ;减一程序~~~~~~~~~~~~~~~~~~~~~~~~~ JIAN1: MOV A,R7 DEC A CJNE A,#4FH,KK1 MOV A,#49H KK1: CJNE A,#3FH,KK2 MOV A,#39H KK2: CJNE A,#2FH,KK3 MOV A,#29H KK3: CJNE A,#1FH,KK4 MOV A,#19H KK4: CJNE A,#0FH,KK5 MOV A,#09H KK5: RET ;分离程序~~~~~~~~~~~~~~~~~~~~~~~~~ DIVIDE: MOV A,R0 ANL A,#0FH MOV R1,A MOV A,R0 SWAP A ANL A,#0FH MOV R2,A RET ;写1302程序~~~~~~~~~~~~~~~~~~~~~~~~~~ WRITE: CLR SCLK NOP SETB RST NOP MOV A,32H MOV R4,#8 WRITE1: RRC A ;送地址给1302 NOP NOP CLR SCLK NOP NOP NOP MOV IO,C NOP NOP NOP SETB SCLK NOP NOP DJNZ R4,WRITE1 CLR SCLK NOP MOV A,31H MOV R4,#8 WRITE2: RRC A NOP ;送数据给1302 CLR SCLK NOP NOP MOV IO,C NOP NOP NOP SETB SCLK NOP NOP DJNZ R4,WRITE2 CLR RST RET ;读1302程序~~~~~~~~~~~~~~~~~~~~~~~~~ READ: CLR SCLK NOP NOP SETB RST NOP MOV A,32H MOV R4,#8 READ1: RRC A ;送地址给1302 NOP MOV IO,C NOP NOP NOP SETB SCLK NOP NOP NOP CLR SCLK NOP NOP DJNZ R4,READ1 MOV R4,#8 READ2: CLR SCLK NOP ;从1302中读出数据 NOP NOP MOV C,IO NOP NOP NOP NOP NOP RRC A NOP NOP NOP NOP SETB SCLK NOP DJNZ R4,READ2 MOV 31H,A CLR RST RET ;BCD码转换为10进制程序~~~~~ BCD_10: MOV A,R0 ANL A,#0FH MOV R1,A ;高位×10, 加低位 MOV A,R0 SWAP A ANL A,#0FH MOV B,#10 MUL AB ADD A,R1 MOV R0,A RET ;查一年数据程序~~~~~~~~~~~~~~~~ CHECKMONTH: LCALL BCD_10 ;农历和公历为同一年, ;NEW此时R2中的值为FFH时,R3有值,否则为0 NEW: NOP M1: MOV A,R2 ;R2减一月天数 CLR C SUBB A,#29 MOV R1,A MOV A,R6 JB ACC.6,SM11 MOV A,R2 CLR C SUBB A,#30 MOV R1,A SM11: JC SM12 MOV A,R1 ;R2减1月天数,够减 MOV R2,A ;转二月 AJMP M2 SM12: CJNE R3,#00H,M13 ;R2减1月天数 LJMP Y1 ;不够减,判R3为0否 M13: MOV A,R2 ;不为0,R3加到R2中 ADD A,R3 ;再让一月减 MOV R2,A ;还不够,则转Y1 MOV R3,#00H AJMP M1 M2: CLR C ;R2减一月天数,够减 MOV A,R2 ;转三月 SUBB A,#29 MOV R1,A MOV A,R6 JB ACC.5,M21 MOV A,R2 CLR C SUBB A,#30 MOV R1,A M21: JC M22 MOV A,R1 ;R2减2月天数,够减 MOV R2,A AJMP MM2 M22: CJNE R3,#00H,M23 ;R2减2月天数 LJMP Y2 ;不够减,判,R3为0否 M23: MOV A,R2 ;不为0,R3加到R2中 ADD A,R3 ;再让二月减 MOV R2,A ;还不够,则转Y2 MOV R3,#00H AJMP M2 MM2: LCALL CHECKRE ;查2月,如果不为闰月 CJNE A,#02H,M3 ;转3月 RM2: MOV A,R4 ANL A,#0FH JNZ RM21 MOV A,R2 CLR C SUBB A,#30 MOV R1,A AJMP RM22 RM21: MOV A,R2 CLR C SUBB A,#29 MOV R1,A RM22: JC RM23 MOV A,R1 ;R2减闰2月天数,够减 MOV R2,A ;转3月 AJMP M3 RM23: CJNE R3,#00H,RM24 ;R2减闰2月天数 LJMP RY2 ;不够减,判,R3为0否 RM24: MOV A,R2 ;不为0,R3加到R2中 ADD A,R3 ;再让闰2月减 MOV R3,#00H ;还不够,则转RY2 SUBB A,#30 MOV R1,A M121: CJNE R3,#00H,M122 ;R2减12月天数 LJMP Y12 ;不够减,判,R3为0否 M122: MOV A,R2 ;不为0,R3加到R2中 ADD A,R3 ;再让12月减 MOV R2,A ;还不够,则转Y12 MOV R3,#00H LJMP M12 Y1: MOV A,R2 MOV R0,A ;R2中为日的值 LCALL D_BCD MOV 56H,A MOV 57H,#01H CLR F0 ;非闰月 LJMP S_PLAY Y2: CJNE R2,#00H,Y21 MOV A,R6 ;R2中为0,则为前一个月 MOV 56H,#29H ;的的最后一天 JB ACC.6,Y22 MOV 56H,#3
本文档为【单片机电子电子万年历】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_014192
暂无简介~
格式:doc
大小:733KB
软件:Word
页数:40
分类:工学
上传时间:2012-05-17
浏览量:54