|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
单片机用的是AT89S51 所有IO口全用上了 P1.2作为按键减 程序不管怎么修改都不能正常按顺序减 我也不改了就这么用了 我做的实物上把它作为星期显示用了 然后温度能显示四位数(含零下) 上传的程序里星期用的是P1.4 4 \& l2 T% w1 ?9 b' h1 J
温度用的是P1.5 P1.6 P1.7 只显示三位 想要四位就在程序里改吧
( O4 a4 X/ V( q4 K! I
* g' a: E9 X) ^$ l. N2 k$ |, p设置顺序是 年 月 日 星期 时 分 秒
( O Z- F0 N1 i- g- z5 n4 f设置时数码管的小数点(两位数时只个位数小数点亮)点亮以确认设置哪一位 连续按P1.0退出设置状态并保存数据 & q) [) L$ c7 b- n5 S$ p. b C, j5 B
在设置状态时按P1.3退出设置状态不保存设置数据 正常走时状态按P1.3切换12小时制24小时制 通电默认12小时制; ~8 y4 [3 Q+ u7 }; m" \$ c
' U* E( d. e7 g# ~, G. w初次使用时可以按住P1.0在通电 把预置好的年月日星期时间写入到1302内
/ g6 e3 u6 m, ~- e: `. O
- ^. C% X- z. R5 a我用的晶振每小时快1秒左右 24小时快23秒左右 程序里就加入了误差修正 每小时减一秒 半夜12点不减秒
( M7 ^1 y. b% o) c. Q( y上传的程序里每小时都减一秒 屏蔽了半夜12点不减秒
4 X( e# ^+ y9 c! \7 i" M r% D, F+ v: {* v/ P P
源程序网上找的 把LCD1602显示变成了数码管显示 并加入了四位温度显示 经过修改后变成现在的样子 " u; H3 ]& h8 V* L0 U* a; S7 J1 h% v
制作出来的实物图如下:
& z1 h! i$ m2 A$ F. ~1 U, u4 i- i![]() ![]()
) z, l3 y9 F# n) Y) j; x: ^! K
7 I. n, Z! l2 R# w4 f部分单片机程序
( D! y$ g9 z' _) b' {& t1 {5 J1 @ RST BIT P3.5; 5脚 ;1302串行口数据端 SU BIT P3.6; 6脚 5 r5 \& o- r: |& J: g5 C
CLK BIT P3.7; 7脚
) @: r+ B! j6 ]0 L! K7 u MOSHI BIT P1.0; ;模式 退出并保存 : r! ]8 B7 K. P
JIA BIT P1.1; ;加
7 d5 v; s: h0 F3 V8 B* L JIAN BIT P1.2; ;减 不能正常按顺序减 $ z% Z! `8 E7 J
ALARM BIT P1.3; 闹钟设置 改成退出不保存
' P& l6 p5 X5 D b DQ BIT P3.0; 18b20
, f9 T. e: q4 Y& F# r1 ~3 b N5 I7 I " G) t) ^: x3 N" k6 m7 g
TEMPL DATA 26H : s5 e+ m% f) k r5 l% Q {
TEMPH DATA 27H
c- ^* _/ p) d0 U0 g
5 }$ c1 [3 m$ j+ x TEMPHC DATA 2AH
3 e% W$ q4 P8 ?; P# b0 n TEMPLC DATA 2BH4 p, g/ n1 O5 Y# C& H, v
TEMP_ZH DATA 2CH
$ C) V f1 z& ~4 R. \8 x;==========================================================================================
9 k9 P3 X, t$ q( A* |: h5 n( N NIAN EQU 7FH ; 年
! g+ W- \- t1 g5 f YUE EQU 7DH ; 月
) o, N9 W4 m9 J; i DAY EQU 7CH ; 日 / C* H% i5 g0 y9 J2 G# o: a
WEEK EQU 29H ; 周 2 S' t( k; l2 s& l
HHH EQU 7EH ;
' y& e: L3 k& r* v1 l6 C3 a SHI EQU 7BH ; 时
9 _: m4 z' }3 O+ C FEN EQU 7AH ; 分
& _0 ^, a- ^: r1 v+ v MIAO EQU 79H ; 秒/ m U! B; w7 ^! s, S, k: E
SHIHC EQU 74H; , ^8 I7 S0 m* z' L- K
;========================================================================================== - x3 x" L! x9 a/ H, L7 J2 v
;==========================================================================================
4 c) z2 p5 R8 U. R/ o* u AMPMBZ EQU 2DH;, r, H0 ~. y& g5 L
WCS EQU 2EH;
g6 S/ d% ?; y WCF EQU 2FH;/ l: x! A/ J) _
WCM EQU 30H;
- |) n0 a1 N7 p0 t8 F" ~2 f
/ o+ t3 Q, k Z- d1 b SHIA EQU 3AH;' M/ I) p2 D; i' W, v; B
SHIB EQU 3BH;
4 o; Z/ Q) O' e7 q) [; O4 ^ FENA EQU 3CH;; o9 ]6 b9 m3 T' [
FENB EQU 3DH;9 ^+ x1 F2 ^! V K: R. g
MIAOA EQU 3EH;
6 k/ r8 ]+ s, v/ ~$ A' | MIAOB EQU 3FH;3 _% i/ \* {2 v! E; P
GEW EQU 75H0 M8 w) z9 M2 ?$ Q j
( q: Q/ g$ j3 E( G, f! ~7 I
SHIBZ EQU 20H.0! v! \( ~+ V; y" ]; V0 ?! Z
FENBZ EQU 20H.1
& ?6 c) E& |# w5 g$ H3 f& z MIAOBZ EQU 20H.2, a- K) O2 n, P
NIANBZ EQU 20H.3;* [( N/ g o# ?1 e; N
YUEBZ EQU 20H.4;7 |# s* |1 |( p. e
RIBZ EQU 20H.5;
+ H1 h2 Z& u! c. I9 R$ | ZHOUBZ EQU 20H.6;# q7 v3 P& p; m& o6 ~- A0 f. {. k2 u
3 L+ K4 M C( o2 o
FLAG EQU 6EH ;温度标志位: d1 }( g$ e8 B
SETB SHIBZ7 C' t1 i O6 N. H
SETB FENBZ
: h$ v3 v* {$ b* }% g6 Z SETB MIAOBZ( M: h3 K4 q2 N1 W: O9 b4 o/ C2 q
SETB NIANBZ
% v0 j6 s' q) T2 s$ f& N SETB YUEBZ
8 u& U. \, v, u# ^& H7 W SETB RIBZ
! W) L. N- y [- X SETB ZHOUBZ2 M! j% ^* ~" N7 l6 W* J: v
SETB AMPMBZ;& S) C, `1 ^9 n, e) n3 N& r
& o" c+ P. A {( S v, a* n3 P/ r
;========================================================================================== 3 D; m6 Y/ X) q1 @+ p; T* s2 h8 e
DS1302_ADDR EQU 6DH 9 y- D* n6 y/ ]- E$ U! q& X( j
DS1302_DATA EQU 6CH 8 _2 t5 W7 n/ y( Z9 H( A' G
;==================================================================================
4 r2 t- U" J0 C, q6 |+ X' } ; ORG 0000H
& i2 M1 _+ p4 \1 f ; LJMP START
5 R1 w$ p9 W1 ]9 [: m ; ORG 0030H
2 X. X8 u" K* F) A" i;*************************************************************** - V, Z* ? M! B! P
; 初始化开机时间 &&&&&&& 初始化闹铃时间 ( _% n) w$ o- a6 ~( G8 o* }
;*************************************************************** 5 P0 M% |% N Q" f1 j: f4 }
START: 9 g" h; e# j& P: K
MOV HHH,#00H
1 U! o% V) B1 v0 b
( @9 \# v; i7 w! G MOV WCS,#00H;
3 k, ^2 [' U( @ MOV WCF,#00H;- B k# X5 a( A3 q Q6 f
MOV WCM,#01H; 每小时误差几秒改成几 误差判断时到整点秒归零
" ~" T/ P1 b0 L/ S' p' I8 e7 |0 j7 H8 D$ ^, d8 X
JNB MOSHI,YZ;初次使用时按住MOSHI 把预置的时间写入DS1302;
+ a$ b4 ^* c; {& ~4 y+ { LJMP LCDCSH;
5 ?' |8 Z+ F$ l# m7 @2 U;===============================================================
0 l, S2 y- Y% c YZ: ; R& H: ^: z* q' H( Y
MOV NIAN,#20H
1 W- F+ x! V( R6 G MOV YUE,#06H * E U& d" u/ X4 |9 F- S- f
MOV DAY,#01H
( t8 F0 V. @; k MOV WEEK,#1H; - l3 W4 X. S9 K' d6 W& _
MOV SHI,#07H $ ]$ y5 n) T" Z) O8 Y8 x- I. i
MOV FEN,#59H 8 ^+ m& Y! ^! C/ s5 F& ?2 S
MOV MIAO,#55H
' S; F2 D1 J/ k" d- @ LCALL WR_DS1302 ;写1302子程序
( i H" O: q4 I4 w9 t% n1 D% B - G; B9 i$ n' ]/ g
;*************************************************************** + ?! J) [+ ?! G; h% b) j! H
; 初始化LCD1602 &&&&&&& 初始化DS1302
4 l- w$ z! Y, t2 r O;***************************************************************
9 n j* _4 @& v" n5 r- I LCDCSH:
" M# q7 k4 l$ O/ f6 {, G lcall RD_DS1302 ; 读时间日期 . M' e7 F" W! `5 c
LCALL WCCS; 时间误差初始化
) i* a' o/ U5 v8 Q0 t;*************************************************************** & L" \* P& C8 a$ F- J* E9 p. j
; 主函数(这个大家都懂的) ) Y/ K9 _3 H* _* D+ p4 S! ^- x
;***************************************************************
+ U' E& T0 L& v/ c1 C0 x
3 i l( j5 j: b7 S MAIN: % O% @9 O+ J9 H1 c% h9 E0 U. S
lcall RD_DS1302 ; 读时间日期
1 k- [1 w4 }0 D6 u5 O4 q. r- B0 g, @ LCALL WCXZ; 误差修正 5 {6 h6 d/ H& W M0 u
LCALL SJ_DIP_2;显示时间动态数据; 显示时间日期
1 a5 e4 U: o& H* x9 i! R$ b lcall key ; 时间设定 - b, y, k( p% O( O: E
JNB ALARM,AMPM; 12小时24小时切换
* D. |8 g3 T9 } LCALL RE_TEMP ; 读温度
4 L7 M- V3 c' o8 r$ L( z& Z4 j LCALL CONVER ; 处理温度
1 S# G2 w; o- @ LCALL DISPBCD ; BCD 码温度值
c& u- }5 i, @+ R LCALL DISPLAY_INT ; 显示温度 . f$ T5 T1 [0 a! a5 {
LJMP MAIN
' }% r" ?0 I) ^ |
|