1、单片机万年历汇编闹钟时间可调程序LCD1602DS18B20DS1302MAX810L片机万年历汇编闹钟时间可调程序(LCD1602,DS18B20,DS1302,MAX810L)说明:1 该程序全部是用汇编语言编写1 该程序附带有温度显示,并且带有闹铃功能2 正常时间和闹钟时间都可以用键盘设置3 该程序是使用LCD1602显示年月日,格式为TIME XX-XX-XX XX,由于屏幕的关系,所以就不显示周的数据,其中闹铃调整的上界面是“BELL ADJUST”4 该程序的时间是由时钟芯片DS1302提供的,据说很精准,目前看起来确实是这样的,刚开始我是使用定时器计时的,但是不怎么精准,可能是我
2、的汇编技术有限才导致,所以本人就把这个版本呈上,希望诸位多多斧正5 该程序的温度是通过DS18B20提取的,这个模块是我从别人那里COPY过来的,O(_)O,显示是肯定没问题的6 该程序也有用MAX810l的复位功能,但是好像这一点还没被体现出来7 烧程序我使用的是MAX232外加几个极性电容,还有一个RS232,不幸的是我的PCB板的RS232的封装画错啦!(_) 8 该万年历是由五个按键控制的,SW5复位,SW1调时间,调年月日时分秒,除秒可以加减调节之外其余的调节都是只能加不能减(自我觉得如果增加减的功能会觉得程序复杂,所以免!), SW4 是用来调节闹钟的时分秒的,和SW1按键不同的是
3、时分秒都能加减,当闹钟设置的时间和正常显示时间的时分秒相同时,闹铃十秒钟,期间你可以按SW4键终止响铃,SW2 和SW3 分别是用来加减时间的!9 说了这么多,最后说说自我认为的缺陷,行家应该都一眼就看出一些破绽了,那就是按键消抖的问题,这个我觉得有点麻烦所以本人就把这个问题留给阅览资料的你吧!10 废话说了这么多,最后把我的程序,ORCAD电路原理图,PADS软件的PCB图,以及一张实物图献上,希望你能喜欢,页脚有我的Email(prettyboy2009),欢迎随时交流! 程序:;* ;* RS BIT P2.7;P2.5 RW BIT P2.6;P2.6 E BIT P2.5;P2.7
4、SU BIT P2.1;P1.6 ;1302串行口数据端 RST BIT P3.7;P1.5 CLK BIT P3.6;P1.7 ALARM BIT P1.2;P2.3 JIAN BIT P1.0;P2.2 ;减 JIA BIT P1.3;P2.1 ;加 MOSHI BIT P1.1;P2.0 ;模式 DQ BIT P1.4;P1.0 SOUND BIT P3.4;P1.3 NIAN EQU 7FH YUE EQU 7DH DAY EQU 7CH HHH EQU 7EH SHI EQU 7BH FEN EQU 7AH MIAO EQU 79H ASHI EQU 78H AFEN EQU 77H
5、 AMIAO EQU 76H GEW EQU 75H COUNT EQU 74H A_BIT EQU 70H ;18B20 B_BIT EQU 6FH FLAG EQU 6EH DS1302_ADDR EQU 6DH DS1302_DATA EQU 6CH ORG 0000H LJMP START ORG 0030H ;* ; 初始化开机时间 & 初始化闹铃时间 ;* START: MOV DPTR,#TAB MOV SHI,#16H MOV ASHI,#17 MOV FEN,#58H MOV AFEN,#30 MOV MIAO,#00H MOV AMIAO,#00 MOV NIAN,#11H
6、 MOV YUE,#12H MOV DAY,#13H MOV HHH,#00H ;* ; 初始化LCD1602 & 初始化DS1302 ;* MOV P0,#01H ; 显示清屏 数据指针清零 所有显示清零 LCALL WR_CODE MOV P0,#02H ; 显示回车 数据指针清零 LCALL WR_CODE MOV P0,#38H ;设置16*2显示 5*7 点阵 8位数据接口 LCALL WR_CODE MOV P0,#06H ; 当写或写一个数据时地址指针自动加一 光标自动加一 LCALL WR_CODE MOV P0,#0cH ; 开显示 不显光标 0fh开显示开光标 光标闪烁 L
7、CALL WR_CODE LCALL WR_DS1302 LCALL XIANSHI LCALL XIAN1 ;* ; 主函数(这个大家都懂的) ;* MAIN: lcall RD_DS1302 LCALL XIANSHI lcall key LCALL AKEY LCALL RE_TEMP LCALL CONVER LCALL DISPLAY_INT LJMP BELLRING ;*; 读1302子程序;* RD_DS1302: MOV DS1302_ADDR,#8DH ;读DS1302中的年 LCALL READ ;调用读DS1302子程序 MOV NIAN, DS1302_DATA ;把
8、读出的年数据存入年寄存器中 MOV DS1302_ADDR,#89H ;读DS1302中的月 LCALL READ MOV YUE, DS1302_DATA ;把读出的月数据存入月寄存器中 MOV DS1302_ADDR,#87H ;读DS1302中的天 LCALL READ MOV DAY, DS1302_DATA ;把读出的天数据存入天寄存器中 MOV DS1302_ADDR,#85H ;读DS1302中的小时 LCALL READ MOV SHI, DS1302_DATA ;把读出的天数据存入小时寄存器中 MOV DS1302_ADDR,#83H ;读DS1302中的分钟 LCALL R
9、EAD MOV FEN, DS1302_DATA ;把读出的天数据存入分钟寄存器中 MOV DS1302_ADDR,#81H ;读DS1302中的秒钟 LCALL READ MOV MIAO, DS1302_DATA ;把读出的天数据存入秒钟寄存器中 RET ;* ; 写1302子程序 ;* WR_DS1302: MOV DS1302_ADDR, #8EH ;写DS1302控制指令 MOV DS1302_DATA, #00H ;写数据到DS1302的8E控制寄存器中,允许对其进行写操作 LCALL WRITE ;调用写DS1302子程序 MOV DS1302_ADDR,#8CH ;写DS130
10、2中的年 MOV DS1302_DATA , NIAN ;把写出的年数据存入年寄存器中 LCALL WRITE MOV DS1302_ADDR,#88H ;写DS1302中的月 MOV DS1302_DATA ,YUE ;把写出的月数据存入月寄存器中 LCALL WRITE MOV DS1302_ADDR,#86H ;写DS1302中的天 MOV DS1302_DATA ,DAY ;把写出的天数据存入天寄存器中 LCALL WRITE MOV DS1302_ADDR,#84H ;写DS1302中的小时 MOV DS1302_DATA , SHI ;把写出的天数据存入小时寄存器中 LCALL W
11、RITE MOV DS1302_ADDR,#82H ;写DS1302中的分钟 MOV DS1302_DATA , FEN ;把写出的天数据存入分钟寄存器中 LCALL WRITE MOV DS1302_ADDR,#80H ;写DS1302中的秒钟 MOV DS1302_DATA , MIAO ;把写出的天数据存入秒钟寄存器中 LCALL WRITE MOV DS1302_ADDR, #90H ;写DS1302控制指令 MOV DS1302_DATA,#0A6H ;写数据到DS1302的90控制寄存器中,对电池涓流充电,充电电流为1.1mA LCALL WRITE ;调用写DS1302子程序 R
12、ET ;*; 写1302程序;* WRITE: CLR CLK NOP SETB RST NOP MOV A,DS1302_ADDR MOV R4,#8 WRITE1: RRC A ;送地址给1302 NOP NOP CLR CLK NOP NOP NOP MOV SU,C SETB CLK ;送入地址在时钟上升沿有效 NOP NOP NOP NOP DJNZ R4,WRITE1 CLR CLK NOP MOV A,DS1302_DATA MOV R4,#8 WRITE2: RRC A NOP ;送数据给1302,时钟上升沿,数据输入 CLR CLK NOP NOP MOV SU,C NOP
13、NOP NOP SETB CLK NOP NOP DJNZ R4,WRITE2 CLR RST CLR A RET ;* ; 读1302程序 ;* READ: CLR CLK NOP NOP SETB RST NOP MOV A,DS1302_ADDR MOV R4,#8 READ1: RRC A NOP MOV SU,C NOP NOP NOP SETB CLK ;送入地址在时钟上升沿有效 NOP NOP NOP CLR CLK NOP NOP DJNZ R4,READ1 ;判断8位数据是否传送完? MOV R4,#8 READ2: CLR CLK NOP NOP NOP MOV C,SU
14、NOP NOP NOP NOP NOP ;从ds1302中读取数据,时钟下降沿有效 RRC A NOP NOP NOP NOP SETB CLK NOP DJNZ R4,READ2 ;判断8位数据是否传送完? MOV DS1302_DATA,A CLR RST RET ;*; 固定显示 显示TIME ,-,:;* XIAN1: MOV P0,#84H LCALL WR_CODE MOV A,#- ;1602有字库 可以直接调用 不用查表 LCALL WR_DATA MOV P0,#87H LCALL WR_CODE MOV A,#- LCALL WR_DATA MOV P0,#80H LCAL
15、L WR_CODE MOV A,#2 ;计时100年 所以20XX 20是固定的 LCALL WR_DATA MOV P0,#81H LCALL WR_CODE MOV A,#0 LCALL WR_DATA MOV P0,#0C1H LCALL WR_CODE MOV A,#T LCALL WR_DATA MOV P0,#0C2H LCALL WR_CODE MOV A,#I LCALL WR_DATA MOV P0,#0C3H LCALL WR_CODE MOV A,#M LCALL WR_DATA MOV P0,#0C4H LCALL WR_CODE MOV A,#E LCALL WR_D
16、ATA MOV P0,#0CCH LCALL WR_CODE MOV A,#: LCALL WR_DATA MOV P0,#0C9H LCALL WR_CODE MOV A,#: LCALL WR_DATA MOV P0,#08EH LCALL WR_CODE MOV A,#0DFH LCALL WR_DATA MOV P0,#08FH LCALL WR_CODE MOV A,#C LCALL WR_DATA RET;*; 显示数据时分秒 年月日 周 地址数据都在变化 没用循环体;* XIANSHI: MOV HHH,MIAO LCALL HEX MOV P0,#0CDH LCALL WR_C
17、ODE MOVC A,A+DPTR LCALL WR_DATA MOV A,B MOV P0,#0CEH LCALL WR_CODE MOVC A,A+DPTR LCALL WR_DATA MOV HHH,FEN LCALL HEX MOV P0,#0CAH LCALL WR_CODE MOVC A,A+DPTR LCALL WR_DATA MOV A,B MOV P0,#0CBH LCALL WR_CODE MOVC A,A+DPTR LCALL WR_DATA MOV HHH,SHI LCALL HEX MOV P0,#0C7H LCALL WR_CODE MOVC A,A+DPTR LC
18、ALL WR_DATA MOV A,B MOV P0,#0C8H LCALL WR_CODE MOVC A,A+DPTR LCALL WR_DATA MOV HHH,DAY LCALL HEX MOV P0,#088H LCALL WR_CODE MOVC A,A+DPTR LCALL WR_DATA MOV A,B MOV P0,#089H LCALL WR_CODE MOVC A,A+DPTR LCALL WR_DATA MOV HHH,YUE LCALL HEX MOV P0,#085H LCALL WR_CODE MOVC A,A+DPTR LCALL WR_DATA MOV A,B MOV P0,#086H LCALL WR_CODE MOVC A,A+DPTR LCALL WR_DATA MOV HHH,NIAN LCALL HEX MOV P0,#082H LCALL WR_CODE MOVC A,A+DPTR LCALL WR_DATA MOV A,B MOV P0,#08
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1