|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
以下是我写的定时器电子钟程序,按键功能不起作用,哪位帮忙看一下。
" @" }$ m+ z% w6 t- i8 ^' W/***************************************************************************
. G- L Y7 w8 |3 Z名称:用定时器定时做时钟
, @9 g. g; @8 |! d5 B3 g; u内容,自动从00-00-00开始,有按键功能
" d: o% Z- |* C( M; t芯片型号:STC89C52RC
' I- f1 r1 g0 P2 \9 {功能脚说明: P0为段选脚,P3为位选脚,所有引脚低电平有效.
+ U6 ]( C" R$ n- ^( V程序员:玄溪
) Z3 O4 z; S* O% F日期:2012.2.6
, l9 A4 A3 ~) f0 x7 E& V0 P6 \/***************************************************************************/
# {; G4 Y1 I, E* m4 Z* Y2 v#include <reg52.h>, n' T' ?* n6 j& r( b! ~2 K7 E
#define uchar unsigned char & i* ]) H' k9 s- e& F
#define uint unsigned int! L4 i; P/ q& U# q' o
) J7 G. `( y/ i3 j8 p7 y
uchar code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};8 E0 z) L4 P! q! G/ w, O
sbit K1=P1^0; //分+' o7 q5 Y3 [% x/ \8 E5 o* A
sbit K2=P1^1; //分-! ?4 D/ k$ D# J6 c: D) h! E
sbit K3=P1^2; //时+
, v" M0 O6 j( D4 F0 H% g( L9 T$ xsbit K4=P1^3; //时-
~2 H E! ~5 V0 }0 o
0 I5 G! z1 M! ]/ ^7 O- Xuchar time; //定义中断时间次数
9 v% z& s* u0 ?# R0 Juchar second; //定义秒
2 P6 y, K. ^7 Suchar minute; //定义分1 ~5 `6 j8 f; ~$ B
uchar hour; //定义时# j/ T7 M* x- Z% E$ s4 D- b
//===========延时函数============//
3 N' x( e. r5 n" C9 kvoid delay()4 M8 K0 u$ W7 u! i9 ? n Y" i+ t
{1 }$ T& S/ |' ~9 W ^
uchar j;4 K- j9 N# a; n) F$ ^& F
for(j=0;j<200;j++);
5 X0 D3 B$ k0 j. U6 P/ k}4 I5 n5 P3 f" l! Y$ T, m- R* t
//=========显示秒函数=======//4 l! _- g* b- e
void displaysecond(uchar s) //带返回值% }; [% ^2 K0 S% r; Y" I. _
{
6 M6 g" H B; N" V# H) I P3=0xbf;, |% C; |1 w4 P5 }6 P3 N
P0=du[s/10];+ _3 {# w% I) E# ]' @
delay();* R( K$ |9 @% ]* l0 i
P3=0x7f;
4 F( f' D, j: u) ]7 f P0=du[s%10];
( L4 V, A6 L$ ^7 T7 _ delay();
2 i8 g% H0 P' v. f I% X+ i7 B: | P3=0xff;, R7 q, T6 `% }' w; W( j
if(K2==0)
5 P' i; ~' k# B) l {: D" v& t7 A3 B6 d' \0 Z
s++;9 N2 m- m @' H7 m
if(s==60)
% `3 y% t; \$ K I8 U0 V5 | {0 `7 y4 Y! a) u0 P* x1 {) W
s=0;8 i0 L7 t, D) Y$ k% b8 j" M
}# V# e" v3 q) |# a' `
}: z" t1 Y1 K7 K6 `2 s! M
}; e: A6 u x9 z
//========显示分函数=============//5 _) A X3 W2 K$ u% @
void displayminute(uchar m)
$ n1 V& j' `$ z4 K+ L{
* q% J7 P3 y% C0 D. b& \ F! u, z P3=0xf7;- d, e; H/ L7 q
P0=du[m/10];! I4 S3 E8 q; a0 s+ [+ P
delay();( [3 @4 N8 C* l
P3=0xef;5 s/ e u" O- g U
P0=du[m%10];% Y7 ^7 x( b- J d
delay();. P( \9 _( L' m
P3=0xdf;
0 K* y+ w, ]* b9 b1 ? P0=0xbf;
e6 o, K9 r! A% t delay();3 W8 J3 c8 N1 m8 h) T$ Y
P3=0xff;2 i4 y% o- o5 p ^/ k, b
if(!K1)
& M% _! w+ D- B3 u1 ~7 ~0 I5 q5 o {& h2 P7 ]2 b& O& P* g
delay();. {' M- [$ q1 v: k! D D$ f
if(!K1)
, p5 p! S) x% G# F. ^( J/ c# x {
f. d, X1 n5 n/ L+ P TR0=0;/ n7 ^$ r, i- P- f9 l8 A' D3 o4 H
m++;) P8 V) E) A6 _, [7 M) b
if(m==60)% d2 j! R4 J- j- w5 G( M; z2 ^
m=0;( `7 A; z) K ~$ A9 T/ ~ ]! D
}5 E( T7 d: D( c6 w9 i
}3 u' \+ ^/ W) L' @$ p
if(!K2)
2 Z, M2 W" X4 l+ S9 u {
5 M3 l% I+ l! G2 Y% y delay();5 A0 f# [& Q0 {
if(!K2)
6 O+ [' A0 Q; r6 P8 Q; e4 \9 f& \$ V {9 z, u. n# f& T
TR0=0;+ i- A( {4 |, D8 ?
m--;
" c- N0 P2 e* G0 w( j6 H n if(m==0)2 O* l0 t2 A) m( Y( `- V
m=59;0 M+ U( P3 p( V( q$ p
}1 [/ K3 @7 _* @+ m: J3 |
}
$ Q9 N% q7 a% V. C7 j7 ?3 p! h4 K TR0=1; e) Y4 l9 x0 U. t t
}
: o4 }( d6 a/ \; m3 H L# q8 R//========显示时函数==============//
* g/ `& |% B; P4 n& n9 Qvoid displayhour(uchar h)
; v1 f+ A7 V+ ]- ]! e- S{- g% j9 k) W& ^! e; D
P3=0xfe;8 q7 N% t( }. Y) z; G9 S( l; \, F
P0=du[h/10];
/ p- ]* Q( J `3 v% [) {2 S* G5 T7 a8 j' y delay();3 u4 w$ |; [6 e- n, x3 b. D( t& _" D
P3=0xfd;
g- P2 n7 O: W- A- v( A P0=du[h%10];; j5 X9 k8 B4 r# {( G! `
delay();
' ?* n; u% {4 p6 v# T P3=0xfb;
0 ~0 d' w A' P h6 ] P0=0xbf;
1 p' m# V$ t# B8 R( l1 I" F' X delay();
5 J V; t( h* E P3=0xff;
$ C4 |% K0 a* }9 U if(!K3)
) i' b# c0 K) u8 w4 w% P0 _ {2 N8 m# D5 t \% y* b: Q7 _
delay();/ [+ q( B1 |3 F& j4 r
if(!K3)
! p5 ^2 Q+ K0 g5 E1 k {
- v7 y$ @7 G8 T( [ TR0=0;; o& l5 j; p: Q' w
h++;# z# a: t/ i7 }" ?7 W2 O
if(h==24)
9 _( {$ f2 ?- l% Q$ K: H0 k! [ h=0;
r! C2 t# ?; |1 y& N5 } }
- x6 R3 h: F5 @! ~! q z }! J. n- c/ J( B" k
if(!K4)
- W% m n& M# y8 c {
9 l' k* M' q6 `) m8 p& ? B TR0=0;
" D8 K3 D. u: h3 i0 ` delay();0 _3 q6 F2 h% h& v9 B, X' [
if(!K4)* p- p. K7 v# ~" ]( e9 u8 H
{: V y* @3 r7 h' n, A; }3 R" Q
h--;, N. c' j7 N, p: F+ H
if(h==0)* m* G+ b( y* _( ?
h=23;+ C$ h( n+ H6 T D
}$ b0 d# Y' X& y K: p
}6 p% N+ v* K( ^* M) a
TR0=1;
3 d# t" V5 B* o: t' X}0 \. ?6 G4 |. P
" |4 M/ ^' B" Y' P+ s0 `4 r//=============主函数============//
7 [4 S8 O, u i# gvoid main(void)
; P0 {1 t! ^& i7 d{1 H/ H; Z: f x. {" U8 Q; {# X6 s
TMOD=0x01;$ b" k' g% f" v
EA=1;
- i) t- F& X7 |" P# D5 e ET0=1;! ~" ~& s" b5 g8 @1 g9 F, S# i
TH0=(65536-46083)/256; //赋初值
: f8 j1 o5 {$ K+ n& F1 @/ R3 R% S. A TL0=(65536-46083)%256;
& `' l, d/ I6 i9 d. @7 g7 J TR0=1;
1 g! H Q, K7 G& v: D7 P0 d# b while(1)$ l. @0 w' _3 M; E8 ]- }! v
{
6 \! G" K; \1 N2 i+ E displaysecond(second);6 [! @% n0 i$ |, G
delay();" z+ U- d, ~+ s/ k" r' z
displayminute(minute);% E9 |$ Y5 [# y- \+ \
delay(); H3 W. T* i% U9 v
displayhour(hour);
0 \# b5 g! i9 J" ]5 e delay();" k i7 {, P3 o/ `( v$ v# X
}
: B- P d% d; F. e- [1 b}
4 {1 Q8 ^+ {5 ?: e7 U' [6 m//=======定时器中断子函数=================//
/ J5 H1 v. f5 t) z r# z" Y4 Cvoid inter0()interrupt 1
0 F! C* m8 J& d6 g2 f( t( O{ d+ N, |) z( \# g; U; o
time++;
# }% L" Q# D$ O- a% J& f+ ]" s if(time==20)
" o. L3 N8 n5 U: U+ b4 H+ n {
. S* Y* l5 j/ h time=0;0 M$ u9 m9 C- b
second++;
! d# \3 W1 [7 b }' u" R, B; P6 M2 B3 B
if(second==60) e; d9 z6 _2 b6 a: v; d
{) i, Y7 x$ \* _& y) x
second =0;
6 s% f: H5 B5 F+ ^7 g6 f$ K# [ minute++;
1 y8 d! V" a: V0 o3 f }0 ^8 B% ]1 O0 x" F2 O( V
if(minute==60)6 r% U% B4 Y7 f+ \, C- t6 e
{/ x' G) `; ^3 o6 s7 R
minute=0;2 d. Y k2 e! V+ X$ }- t' A
hour++;9 d- _; h) A- u1 j% C
}
4 X8 @5 e# d: s3 b9 P8 t3 r1 P if(hour==24)1 h7 W& n F% h V, r* s' M
{
. V1 c, F7 b1 h" z hour=0;
/ t n; Z7 B& m }
0 b, r5 f2 Y# r8 Q TH0=(65536-46083)/256; //赋初值
4 K; j9 b: M( m% w) V! e6 m TL0=(65536-46083)%256; : C/ g6 B" d5 Z
} |
|