单片机用的是AT89S51 所有IO口全用上了 P1.2作为按键减 程序不管怎么修改都不能正常按顺序减 我也不改了就这么用了 我做的实物上把它作为星期显示用了 然后温度能显示四位数(含零下) 上传的程序里星期用的是P1.4
温度用的是P1.5 P1.6 P1.7 只显示三位 想要四位就在程序里改吧
设置顺序是 年 月 日 星期 时 分 秒
设置时数码管的小数点(两位数时只个位数小数点亮)点亮以确认设置哪一位 连续按P1.0退出设置状态并保存数据
在设置状态时按P1.3退出设置状态不保存设置数据 正常走时状态按P1.3切换12小时制24小时制 通电默认12小时制
初次使用时可以按住P1.0在通电 把预置好的年月日星期时间写入到1302内
我用的晶振每小时快1秒左右 24小时快23秒左右 程序里就加入了误差修正 每小时减一秒 半夜12点不减秒
上传的程序里每小时都减一秒 屏蔽了半夜12点不减秒
源程序网上找的 把LCD1602显示变成了数码管显示 并加入了四位温度显示 经过修改后变成现在的样子
制作出来的实物图如下:
部分单片机程序
RST BIT P3.5; 5脚 ;1302串行口数据端 SU BIT P3.6; 6脚
CLK BIT P3.7; 7脚
MOSHI BIT P1.0; ;模式 退出并保存
JIA BIT P1.1; ;加
JIAN BIT P1.2; ;减 不能正常按顺序减
ALARM BIT P1.3; 闹钟设置 改成退出不保存
DQ BIT P3.0; 18b20
TEMPL DATA 26H
TEMPH DATA 27H
TEMPHC DATA 2AH
TEMPLC DATA 2BH
TEMP_ZH DATA 2CH
;==========================================================================================
NIAN EQU 7FH ; 年
YUE EQU 7DH ; 月
DAY EQU 7CH ; 日
WEEK EQU 29H ; 周
HHH EQU 7EH ;
SHI EQU 7BH ; 时
FEN EQU 7AH ; 分
MIAO EQU 79H ; 秒
SHIHC EQU 74H;
;==========================================================================================
;==========================================================================================
AMPMBZ EQU 2DH;
WCS EQU 2EH;
WCF EQU 2FH;
WCM EQU 30H;
SHIA EQU 3AH;
SHIB EQU 3BH;
FENA EQU 3CH;
FENB EQU 3DH;
MIAOA EQU 3EH;
MIAOB EQU 3FH;
GEW EQU 75H
SHIBZ EQU 20H.0
FENBZ EQU 20H.1
MIAOBZ EQU 20H.2
NIANBZ EQU 20H.3;
YUEBZ EQU 20H.4;
RIBZ EQU 20H.5;
ZHOUBZ EQU 20H.6;
FLAG EQU 6EH ;温度标志位
SETB SHIBZ
SETB FENBZ
SETB MIAOBZ
SETB NIANBZ
SETB YUEBZ
SETB RIBZ
SETB ZHOUBZ
SETB AMPMBZ;
;==========================================================================================
DS1302_ADDR EQU 6DH
DS1302_DATA EQU 6CH
;==================================================================================
; ORG 0000H
; LJMP START
; ORG 0030H
;***************************************************************
; 初始化开机时间 &&&&&&& 初始化闹铃时间
;***************************************************************
START:
MOV HHH,#00H
MOV WCS,#00H;
MOV WCF,#00H;
MOV WCM,#01H; 每小时误差几秒改成几 误差判断时到整点秒归零
JNB MOSHI,YZ;初次使用时按住MOSHI 把预置的时间写入DS1302;
LJMP LCDCSH;
;===============================================================
YZ:
MOV NIAN,#20H
MOV YUE,#06H
MOV DAY,#01H
MOV WEEK,#1H;
MOV SHI,#07H
MOV FEN,#59H
MOV MIAO,#55H
LCALL WR_DS1302 ;写1302子程序
;***************************************************************
; 初始化LCD1602 &&&&&&& 初始化DS1302
;***************************************************************
LCDCSH:
lcall RD_DS1302 ; 读时间日期
LCALL WCCS; 时间误差初始化
;***************************************************************
; 主函数(这个大家都懂的)
;***************************************************************
MAIN:
lcall RD_DS1302 ; 读时间日期
LCALL WCXZ; 误差修正
LCALL SJ_DIP_2;显示时间动态数据; 显示时间日期
lcall key ; 时间设定
JNB ALARM,AMPM; 12小时24小时切换
LCALL RE_TEMP ; 读温度
LCALL CONVER ; 处理温度
LCALL DISPBCD ; BCD 码温度值
LCALL DISPLAY_INT ; 显示温度
LJMP MAIN
全部资料51hei下载地址:
DS1302数码管电子钟.rar
(68.47 KB, 下载次数: 76)
|