单片机万年历汇编闹钟时间可调程序LCD1602DS18B20DS1302MAX810L.docx

上传人:b****5 文档编号:11751646 上传时间:2023-03-31 格式:DOCX 页数:53 大小:356.78KB
下载 相关 举报
单片机万年历汇编闹钟时间可调程序LCD1602DS18B20DS1302MAX810L.docx_第1页
第1页 / 共53页
单片机万年历汇编闹钟时间可调程序LCD1602DS18B20DS1302MAX810L.docx_第2页
第2页 / 共53页
单片机万年历汇编闹钟时间可调程序LCD1602DS18B20DS1302MAX810L.docx_第3页
第3页 / 共53页
单片机万年历汇编闹钟时间可调程序LCD1602DS18B20DS1302MAX810L.docx_第4页
第4页 / 共53页
单片机万年历汇编闹钟时间可调程序LCD1602DS18B20DS1302MAX810L.docx_第5页
第5页 / 共53页
点击查看更多>>
下载资源
资源描述

单片机万年历汇编闹钟时间可调程序LCD1602DS18B20DS1302MAX810L.docx

《单片机万年历汇编闹钟时间可调程序LCD1602DS18B20DS1302MAX810L.docx》由会员分享,可在线阅读,更多相关《单片机万年历汇编闹钟时间可调程序LCD1602DS18B20DS1302MAX810L.docx(53页珍藏版)》请在冰豆网上搜索。

单片机万年历汇编闹钟时间可调程序LCD1602DS18B20DS1302MAX810L.docx

单片机万年历汇编闹钟时间可调程序LCD1602DS18B20DS1302MAX810L

片机万年历汇编闹钟时间可调程序(LCD1602,DS18B20,DS1302,MAX810L)

说明:

1该程序全部是用汇编语言编写

1.该程序附带有温度显示,并且带有闹铃功能

2.正常时间和闹钟时间都可以用键盘设置

3.该程序是使用LCD1602显示年月日,格式为TIMEXX-XX-XXXX,由于屏幕的关系,所以就不显示周的数据,其中闹铃调整的上界面是“BELLADJUST”

4.该程序的时间是由时钟芯片DS1302提供的,据说很精准,目前看起来确实是这样的,刚开始我是使用定时器计时的,但是不怎么精准,可能是我的汇编技术有限才导致,所以本人就把这个版本呈上,希望诸位多多斧正

5.该程序的温度是通过DS18B20提取的,这个模块是我从别人那里COPY过来的,O(∩_∩)O~,显示是肯定没问题的

6.该程序也有用MAX810l的复位功能,但是好像这一点还没被体现出来

7.烧程序我使用的是MAX232外加几个极性电容,还有一个RS232,不幸的是我的PCB板的RS232的封装画错啦!

~~~~(>_<)~~~~

8.该万年历是由五个按键控制的,SW5复位,SW1调时间,调年月日时分秒,除秒可以加减调节之外其余的调节都是只能加不能减(自我觉得如果增加减的功能会觉得程序复杂,所以免!

),SW4是用来调节闹钟的时分秒的,和SW1按键不同的是时分秒都能加减,当闹钟设置的时间和正常显示时间的时分秒相同时,闹铃十秒钟,期间你可以按SW4键终止响铃,SW2和SW3分别是用来加减时间的!

9.说了这么多,最后说说自我认为的缺陷,行家应该都一眼就看出一些破绽了,那就是按键消抖的问题,这个我觉得有点麻烦所以本人就把这个问题留给阅览资料的你吧!

10.废话说了这么多,最后把我的程序,ORCAD电路原理图,PADS软件的PCB图,以及一张实物图献上,希望你能喜欢,页脚有我的Email(prettyboy2009@),欢迎随时交流!

 

程序:

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

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

RSBITP2.7;P2.5

RWBITP2.6;P2.6

EBITP2.5;P2.7

SUBITP2.1;P1.6;1302串行口数据端

RSTBITP3.7;P1.5

CLKBITP3.6;P1.7

ALARMBITP1.2;P2.3

JIANBITP1.0;P2.2;减

JIABITP1.3;P2.1;加

MOSHIBITP1.1;P2.0;模式

DQBITP1.4;P1.0

SOUNDBITP3.4;P1.3

NIANEQU7FH

YUEEQU7DH

DAYEQU7CH

HHHEQU7EH

SHIEQU7BH

FENEQU7AH

MIAOEQU79H

ASHIEQU78H

AFENEQU77H

AMIAOEQU76H

GEWEQU75H

COUNTEQU74H

A_BITEQU70H;18B20

B_BITEQU6FH

FLAGEQU6EH

DS1302_ADDREQU6DH

DS1302_DATAEQU6CH

ORG0000H

LJMPSTART

ORG0030H

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

;初始化开机时间&&&&&&&初始化闹铃时间

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

START:

MOVDPTR,#TAB

MOVSHI,#16H

MOVASHI,#17

MOVFEN,#58H

MOVAFEN,#30

MOVMIAO,#00H

MOVAMIAO,#00

MOVNIAN,#11H

MOVYUE,#12H

MOVDAY,#13H

MOVHHH,#00H

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

;初始化LCD1602&&&&&&&初始化DS1302

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

MOVP0,#01H;显示清屏数据指针清零所有显示清零

LCALLWR_CODE

MOVP0,#02H;显示回车数据指针清零

LCALLWR_CODE

MOVP0,#38H;设置16*2显示5*7点阵8位数据接口

LCALLWR_CODE

MOVP0,#06H;当写或写一个数据时地址指针自动加一光标自动加一

LCALLWR_CODE

MOVP0,#0cH;开显示不显光标0fh开显示开光标光标闪烁

LCALLWR_CODE

LCALLWR_DS1302

LCALLXIANSHI

LCALLXIAN1

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

;主函数(这个大家都懂的)

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

MAIN:

lcallRD_DS1302

LCALLXIANSHI

lcallkey

LCALLAKEY

LCALLRE_TEMP

LCALLCONVER

LCALLDISPLAY_INT

LJMPBELLRING

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

;读1302子程序

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

RD_DS1302:

MOVDS1302_ADDR,#8DH;读DS1302中的年

LCALLREAD;调用读DS1302子程序

MOVNIAN,DS1302_DATA;把读出的年数据存入年寄存器中

MOVDS1302_ADDR,#89H;读DS1302中的月

LCALLREAD

MOVYUE,DS1302_DATA;把读出的月数据存入月寄存器中

MOVDS1302_ADDR,#87H;读DS1302中的天

LCALLREAD

MOVDAY,DS1302_DATA;把读出的天数据存入天寄存器中

MOVDS1302_ADDR,#85H;读DS1302中的小时

LCALLREAD

MOVSHI,DS1302_DATA;把读出的天数据存入小时寄存器中

MOVDS1302_ADDR,#83H;读DS1302中的分钟

LCALLREAD

MOVFEN,DS1302_DATA;把读出的天数据存入分钟寄存器中

MOVDS1302_ADDR,#81H;读DS1302中的秒钟

LCALLREAD

MOVMIAO,DS1302_DATA;把读出的天数据存入秒钟寄存器中

RET

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

;写1302子程序

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

WR_DS1302:

MOVDS1302_ADDR,#8EH;写DS1302控制指令

MOVDS1302_DATA,#00H;写数据到DS1302的8E控制寄存器中,允许对其进行写操作

LCALLWRITE;调用写DS1302子程序

MOVDS1302_ADDR,#8CH;写DS1302中的年

MOVDS1302_DATA,NIAN;把写出的年数据存入年寄存器中

LCALLWRITE

MOVDS1302_ADDR,#88H;写DS1302中的月

MOVDS1302_DATA,YUE;把写出的月数据存入月寄存器中

LCALLWRITE

MOVDS1302_ADDR,#86H;写DS1302中的天

MOVDS1302_DATA,DAY;把写出的天数据存入天寄存器中

LCALLWRITE

MOVDS1302_ADDR,#84H;写DS1302中的小时

MOVDS1302_DATA,SHI;把写出的天数据存入小时寄存器中

LCALLWRITE

MOVDS1302_ADDR,#82H;写DS1302中的分钟

MOVDS1302_DATA,FEN;把写出的天数据存入分钟寄存器中

LCALLWRITE

MOVDS1302_ADDR,#80H;写DS1302中的秒钟

MOVDS1302_DATA,MIAO;把写出的天数据存入秒钟寄存器中

LCALLWRITE

MOVDS1302_ADDR,#90H;写DS1302控制指令

MOVDS1302_DATA,#0A6H;写数据到DS1302的90控制寄存器中,对电池涓流充电,充电电流为1.1mA

LCALLWRITE;调用写DS1302子程序

RET

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

;写1302程序

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

WRITE:

CLRCLK

NOP

SETBRST

NOP

MOVA,DS1302_ADDR

MOVR4,#8

WRITE1:

RRCA;送地址给1302

NOP

NOP

CLRCLK

NOP

NOP

NOP

MOVSU,C

SETBCLK;送入地址在时钟上升沿有效

NOP

NOP

NOP

NOP

DJNZR4,WRITE1

CLRCLK

NOP

MOVA,DS1302_DATA

MOVR4,#8

WRITE2:

RRCA

NOP;送数据给1302,时钟上升沿,数据输入

CLRCLK

NOP

NOP

MOVSU,C

NOP

NOP

NOP

SETBCLK

NOP

NOP

DJNZR4,WRITE2

CLRRST

CLRA

RET

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

;读1302程序

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

READ:

CLRCLK

NOP

NOP

SETBRST

NOP

MOVA,DS1302_ADDR

MOVR4,#8

READ1:

RRCA

NOP

MOVSU,C

NOP

NOP

NOP

SETBCLK;送入地址在时钟上升沿有效

NOP

NOP

NOP

CLRCLK

NOP

NOP

DJNZR4,READ1;判断8位数据是否传送完?

MOVR4,#8

READ2:

CLRCLK

NOP

NOP

NOP

MOVC,SU

NOP

NOP

NOP

NOP

NOP;从ds1302中读取数据,时钟下降沿有效

RRCA

NOP

NOP

NOP

NOP

SETBCLK

NOP

DJNZR4,READ2;判断8位数据是否传送完?

MOVDS1302_DATA,A

CLRRST

RET

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

;固定显示显示TIME,'-',:

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

XIAN1:

MOVP0,#84H

LCALLWR_CODE

MOVA,#'-';1602有字库可以直接调用不用查表

LCALLWR_DATA

MOVP0,#87H

LCALLWR_CODE

MOVA,#'-'

LCALLWR_DATA

MOVP0,#80H

LCALLWR_CODE

MOVA,#'2';计时100年所以20XX20是固定的

LCALLWR_DATA

MOVP0,#81H

LCALLWR_CODE

MOVA,#'0'

LCALLWR_DATA

MOVP0,#0C1H

LCALLWR_CODE

MOVA,#'T'

LCALLWR_DATA

MOVP0,#0C2H

LCALLWR_CODE

MOVA,#'I'

LCALLWR_DATA

MOVP0,#0C3H

LCALLWR_CODE

MOVA,#'M'

LCALLWR_DATA

MOVP0,#0C4H

LCALLWR_CODE

MOVA,#'E'

LCALLWR_DATA

MOVP0,#0CCH

LCALLWR_CODE

MOVA,#':

'

LCALLWR_DATA

MOVP0,#0C9H

LCALLWR_CODE

MOVA,#':

'

LCALLWR_DATA

MOVP0,#08EH

LCALLWR_CODE

MOVA,#0DFH

LCALLWR_DATA

MOVP0,#08FH

LCALLWR_CODE

MOVA,#'C'

LCALLWR_DATA

RET

 

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

;显示数据时分秒年月日周地址数据都在变化没用循环体

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

XIANSHI:

MOVHHH,MIAO

LCALLHEX

MOVP0,#0CDH

LCALLWR_CODE

MOVCA,@A+DPTR

LCALLWR_DATA

MOVA,B

MOVP0,#0CEH

LCALLWR_CODE

MOVCA,@A+DPTR

LCALLWR_DATA

MOVHHH,FEN

LCALLHEX

MOVP0,#0CAH

LCALLWR_CODE

MOVCA,@A+DPTR

LCALLWR_DATA

MOVA,B

MOVP0,#0CBH

LCALLWR_CODE

MOVCA,@A+DPTR

LCALLWR_DATA

MOVHHH,SHI

LCALLHEX

MOVP0,#0C7H

LCALLWR_CODE

MOVCA,@A+DPTR

LCALLWR_DATA

MOVA,B

MOVP0,#0C8H

LCALLWR_CODE

MOVCA,@A+DPTR

LCALLWR_DATA

MOVHHH,DAY

LCALLHEX

MOVP0,#088H

LCALLWR_CODE

MOVCA,@A+DPTR

LCALLWR_DATA

MOVA,B

MOVP0,#089H

LCALLWR_CODE

MOVCA,@A+DPTR

LCALLWR_DATA

MOVHHH,YUE

LCALLHEX

MOVP0,#085H

LCALLWR_CODE

MOVCA,@A+DPTR

LCALLWR_DATA

MOVA,B

MOVP0,#086H

LCALLWR_CODE

MOVCA,@A+DPTR

LCALLWR_DATA

MOVHHH,NIAN

LCALLHEX

MOVP0,#082H

LCALLWR_CODE

MOVCA,@A+DPTR

LCALLWR_DATA

MOVA,B

MOVP0,#08

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1