|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
单片机用的是AT89S51 所有IO口全用上了 P1.2作为按键减 程序不管怎么修改都不能正常按顺序减 我也不改了就这么用了 我做的实物上把它作为星期显示用了 然后温度能显示四位数(含零下) 上传的程序里星期用的是P1.4 5 U# y4 _5 A' R( o* |' B z' l0 y
温度用的是P1.5 P1.6 P1.7 只显示三位 想要四位就在程序里改吧! }$ C5 r f3 X
4 e y2 W0 s4 }9 j5 Y: Y设置顺序是 年 月 日 星期 时 分 秒 3 ?6 n( W7 Y, N' P
设置时数码管的小数点(两位数时只个位数小数点亮)点亮以确认设置哪一位 连续按P1.0退出设置状态并保存数据 , K; v; W6 ^" N( @' ]1 F3 x
在设置状态时按P1.3退出设置状态不保存设置数据 正常走时状态按P1.3切换12小时制24小时制 通电默认12小时制" G) L' Z" F( A/ d- E
$ ^/ P" v0 D: g, A
初次使用时可以按住P1.0在通电 把预置好的年月日星期时间写入到1302内
! l0 v; g3 Z- a2 d* r. }
3 n+ W2 {6 P7 A+ N6 g我用的晶振每小时快1秒左右 24小时快23秒左右 程序里就加入了误差修正 每小时减一秒 半夜12点不减秒
/ G7 M5 `: ^0 X1 i4 e上传的程序里每小时都减一秒 屏蔽了半夜12点不减秒
+ K2 g+ l9 V6 I. b* m4 k* P# y& K. `! C1 x2 y0 ~8 s
源程序网上找的 把LCD1602显示变成了数码管显示 并加入了四位温度显示 经过修改后变成现在的样子
7 j# E" {6 e% g& Y8 e7 k) Y0 v制作出来的实物图如下:
9 [4 W+ v, r3 i: C6 ~/ o, E![]() 2 Y; n0 w. H& s" x6 W) q: }- ~: }
7 E9 z% q& u8 m
部分单片机程序
0 z+ k6 X7 s V) l. h, ]5 [* e RST BIT P3.5; 5脚 ;1302串行口数据端 SU BIT P3.6; 6脚
8 H: J: p5 J9 T' {8 S( T CLK BIT P3.7; 7脚
/ h; W- w& R4 h8 q0 e1 n& o MOSHI BIT P1.0; ;模式 退出并保存 : w3 A9 [6 W) j4 [
JIA BIT P1.1; ;加 $ I# f$ u x8 P( i7 f7 S$ \
JIAN BIT P1.2; ;减 不能正常按顺序减 Y' C0 u, k& t; c5 d$ Q9 T
ALARM BIT P1.3; 闹钟设置 改成退出不保存 ' L- u, G2 M8 n" C! l% n! ~/ V
DQ BIT P3.0; 18b20 % S2 b3 K4 L/ a. K
. N# [: b9 [1 ?0 r+ A+ G- o$ b TEMPL DATA 26H Y8 O' N$ d# P; A0 {
TEMPH DATA 27H 8 j$ X1 U( A1 X9 w+ v C/ u
+ A8 y+ \/ C5 n2 l( v1 k TEMPHC DATA 2AH7 J6 O6 Z) d8 y
TEMPLC DATA 2BH" T# d8 `8 D Z/ {6 |# x$ m
TEMP_ZH DATA 2CH6 a$ k% E6 g3 K; q% `9 Z$ R
;========================================================================================== 6 W5 {/ Z( l; ~3 m* V
NIAN EQU 7FH ; 年 ) d6 f6 |% |! a1 p- T: L
YUE EQU 7DH ; 月 # |. y2 _6 K A& v7 U, X" u
DAY EQU 7CH ; 日 ) c) {0 ]$ r& s% c+ @8 `
WEEK EQU 29H ; 周 * H8 R5 ?5 o. S6 H+ a
HHH EQU 7EH ; : |5 Q9 m7 U" d$ Q: {$ a* D* C3 o
SHI EQU 7BH ; 时
# J. ^3 I8 O! x8 J- a, I* j2 y FEN EQU 7AH ; 分
* R' e: y y6 j; f* p. B* \ MIAO EQU 79H ; 秒
8 x! z' c/ m+ _- @ SHIHC EQU 74H;
/ c4 `% i2 c/ G( j& O;==========================================================================================
' V1 ~4 ~! a4 d% S3 _. k+ c6 [+ o;==========================================================================================
) A: \# i) E1 V AMPMBZ EQU 2DH;
) Q' F$ u- E: U WCS EQU 2EH;
7 d7 N M: d4 t4 w/ n WCF EQU 2FH;
, q9 l* J/ `% c( i WCM EQU 30H;
4 f* Q: ^) @- e( c9 F) ~' F1 D' `" ^" y( m
SHIA EQU 3AH;
, V3 v2 O+ y, s; [' @ SHIB EQU 3BH;
8 l$ N8 }) t! h6 ]" z FENA EQU 3CH;0 O4 P+ o: l! n* h
FENB EQU 3DH;
" o }9 o& }4 ^( k7 s2 d MIAOA EQU 3EH;
+ T/ H) I% t6 c$ { MIAOB EQU 3FH;
b4 B6 a: V7 C( g: `% k GEW EQU 75H) s1 [7 V+ x9 Y8 _- C
8 |7 C" m4 i( z# B* Y7 P5 F) g
SHIBZ EQU 20H.0
' z( ~7 V9 C8 E! l" k FENBZ EQU 20H.1
$ _* E5 E! K8 X$ D c5 c7 k MIAOBZ EQU 20H.2
9 @. e2 n% r. f, x: ^3 `; j NIANBZ EQU 20H.3;
* f. q% G5 D- \' | YUEBZ EQU 20H.4;$ {- v9 l G5 T) b; E; Z" v% `
RIBZ EQU 20H.5;
8 P& Z0 U! x% ~. x; L! i y+ {' | ZHOUBZ EQU 20H.6;
5 P Z) S1 c3 J0 O: S3 R$ i- l! A5 g6 H4 K9 \; d
FLAG EQU 6EH ;温度标志位0 V; B8 x% i9 J% X4 C0 ]$ e
SETB SHIBZ) a& O3 i5 F+ k7 E$ r3 k4 i
SETB FENBZ1 F/ R& B3 g& \0 }: y+ K3 T
SETB MIAOBZ- I6 i0 }7 l+ ~; Z
SETB NIANBZ
# Z8 C2 e" [; P SETB YUEBZ j* R0 J6 _# _; j
SETB RIBZ5 w' l% P4 r G
SETB ZHOUBZ
) K7 I6 s' b9 \7 j4 C SETB AMPMBZ;; W$ O7 |6 S# |
! }: x# |$ B& [- p
;========================================================================================== . {3 a% q" a' T" N
DS1302_ADDR EQU 6DH
" a. m% s; [- [+ K1 F u' N: ^ DS1302_DATA EQU 6CH ' B3 n/ n9 z9 M- G6 p9 h" Z3 g& X
;==================================================================================
. m3 F' e2 m: O6 X. }& a3 n ; ORG 0000H
P5 I2 V- x# ] _# k6 h) _* i ; LJMP START ) o) B( S) M1 I. j
; ORG 0030H , [0 Z+ n1 R f3 w
;*************************************************************** - o1 h$ [; `$ o; y
; 初始化开机时间 &&&&&&& 初始化闹铃时间 , @2 W2 l. u; o" R; F8 a
;***************************************************************
+ E {9 M5 Z9 V: M* y. E# O5 P START: 9 O* n/ p9 B2 h6 {. D$ e8 o
MOV HHH,#00H # Y8 ~) b) \- Z( ?: N: w
/ y( `/ v! V% w. e2 S( N( W! m
MOV WCS,#00H;3 R; Z4 v. _# m- v0 p5 K. i9 W3 q( d
MOV WCF,#00H;: ?/ i. ?) C, C4 O+ Q2 M ]
MOV WCM,#01H; 每小时误差几秒改成几 误差判断时到整点秒归零
4 S1 f4 ]6 \" \( H D4 o N; [: C& l7 z) v
JNB MOSHI,YZ;初次使用时按住MOSHI 把预置的时间写入DS1302;
6 ^, Q6 w2 P3 q A5 Q LJMP LCDCSH; ' O, B: Y; N6 H2 M) u
;=============================================================== & U' l, s# O1 u2 o# U" ?9 x" h" `
YZ:
& T8 G6 d9 g3 a MOV NIAN,#20H
9 I2 I0 b* I, S' t; u! M3 _+ Z& c MOV YUE,#06H
5 \, K7 Z( Y& p MOV DAY,#01H
2 w. y# a# t: h- O; k- Y9 G MOV WEEK,#1H; $ X" Q/ j9 X: Y1 j+ f: }, A
MOV SHI,#07H 8 `5 M$ c; f1 J+ a A* `: F: \4 Z
MOV FEN,#59H
2 n0 t$ X' u( j1 F- } MOV MIAO,#55H
& D# r y4 b4 n LCALL WR_DS1302 ;写1302子程序
. V( m! r% ~2 | p4 L1 @* U: Y! r ! K) r% ?$ Z9 h7 g3 p
;***************************************************************
% G J( P6 K: D: s; 初始化LCD1602 &&&&&&& 初始化DS1302 & p- s% q/ F6 u9 ^) i
;***************************************************************
4 c: | b3 \; U/ o8 U1 l8 p8 U LCDCSH: % r- V6 w( z, \, _+ ^
lcall RD_DS1302 ; 读时间日期
: O& L; g+ z/ z; o Z0 ] LCALL WCCS; 时间误差初始化
- h9 r! G4 c' B' k; O4 x6 r* Y;***************************************************************
- D1 U3 H! M) L8 d4 y; 主函数(这个大家都懂的)
* u, M; ^! c' i3 L( L x;***************************************************************
: f- }% s5 {3 v. b
# Z- g% ?3 C2 h MAIN: ' c4 j8 [$ W4 g+ `" z/ q& |, o. T
lcall RD_DS1302 ; 读时间日期
/ X( W# I+ o$ e. D4 Y& r- a LCALL WCXZ; 误差修正 " p" ~0 ?( r. _3 |8 }/ f$ M' S
LCALL SJ_DIP_2;显示时间动态数据; 显示时间日期 1 [% [1 j7 D$ ]9 f# `5 i0 C1 t& b
lcall key ; 时间设定
' R+ }- r: E/ {) A6 t7 N3 E+ T JNB ALARM,AMPM; 12小时24小时切换 $ p9 E! K# r2 w
LCALL RE_TEMP ; 读温度
3 A1 m4 i0 w1 c" t$ N9 Y LCALL CONVER ; 处理温度
* a, \" ]8 l% {8 h( V, |5 V5 `# F U LCALL DISPBCD ; BCD 码温度值 7 ~& V) o4 G8 O+ G$ d
LCALL DISPLAY_INT ; 显示温度 5 T- h) T" K t/ G7 U
LJMP MAIN v! V9 ]% ^; F9 U, W4 g
|
|