|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
以下是我写的定时器电子钟程序,按键功能不起作用,哪位帮忙看一下。, } G k$ l- E' t1 v
/***************************************************************************; i# @) p$ j4 Z/ R9 t
名称:用定时器定时做时钟
2 T" p! y1 P! ?8 G$ T内容,自动从00-00-00开始,有按键功能
- x, D C& |" ~: L芯片型号:STC89C52RC, S) V+ S# F) x2 ?4 N% S
功能脚说明: P0为段选脚,P3为位选脚,所有引脚低电平有效.
# Y/ I) [, U1 k q" X* I/ ~$ p程序员:玄溪
6 C: C2 }* Z! r% p5 J0 S日期:2012.2.6
& g, d- F) ^; m# M U1 l/ q7 U/***************************************************************************/
5 ~3 d* r% A8 u- Z4 F5 f#include <reg52.h>5 F8 t, r. |3 u+ o% J) I6 N. T2 N
#define uchar unsigned char
i& {6 n, g4 Q2 [6 ^ m* N#define uint unsigned int
5 F- j8 z/ c% r2 G& q' W7 }" h5 b; ]' T& C5 a, Q, n: C- a2 Y8 a
uchar code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
1 L! |/ T9 r4 k) j$ R; c8 Csbit K1=P1^0; //分+
' A# |0 Z v% T- {. x' c/ \) Q7 ~6 msbit K2=P1^1; //分-( Q2 T. j5 K& ?( B. X. y* q/ T
sbit K3=P1^2; //时+
% \5 g6 X7 |" R$ Q& C: E6 X, J: Ssbit K4=P1^3; //时-0 U: N6 X9 B9 L$ ?
9 T; O# X, h. f) a9 @+ n* T Auchar time; //定义中断时间次数
( j3 T% c8 L4 ~ luchar second; //定义秒' D! Z9 q# M$ g2 h- ]
uchar minute; //定义分* n8 c) B# L2 c* c a4 a: q6 _
uchar hour; //定义时
* f8 s5 u+ H8 v//===========延时函数============//
" H' j2 z; T9 H8 `( V# z; hvoid delay()! b5 f! V/ p; A, \. A. Q
{
+ F( y) a2 ], |% w$ c- Q uchar j;3 B' c2 ]& b2 O0 v/ X
for(j=0;j<200;j++);
, |- g6 t* n- ~$ w}* u! z% ?8 B' ]3 L2 ^0 h
//=========显示秒函数=======//5 S9 |* a2 S& h( a$ o" b2 D
void displaysecond(uchar s) //带返回值
8 I6 \$ S) f" U& f: \! Q |{1 s/ d! A2 e& n# M: }
P3=0xbf;$ V& S% A, o2 {5 n: F
P0=du[s/10];+ _7 v- ~& M* J6 V, e
delay();
7 d$ `" T! [3 q; F! \ P3=0x7f;
! @" R) s8 ^6 f P0=du[s%10];
1 Z5 l; W( @+ s0 Y/ | delay();
: k) g {, h% Z7 V/ L: S- F" @) y7 Q' Y P3=0xff;
+ p' ^ t! i! n0 f) j5 H if(K2==0)1 R# m7 d0 L' j2 D' f- V( \ R2 m# g
{0 `- o! p& g* K+ h1 E6 n5 w
s++;
, K' r0 t0 L- t' i1 N if(s==60)
x3 S% M# f6 k% w1 q9 Z {/ w7 k. b- N8 d
s=0; ]8 O+ y$ p. u$ ]' y$ v! p
}
; K& K& M3 i9 P0 Z: y7 K8 o }
# M9 Q1 J/ p8 K. t* a}
% k$ l7 N* z" J/ t/ ?5 {* `, L//========显示分函数=============//
% W7 m, y k* b9 Gvoid displayminute(uchar m)
3 J# |- X" g3 _* E{7 |2 P/ t1 ?3 v' n
P3=0xf7;6 d1 N( [0 k. y6 F8 c. _' G0 Q
P0=du[m/10];
2 P: S/ R' ]" k3 P( l delay();; e/ C. ]# K" x
P3=0xef;7 h" j3 X3 a" @5 U- C" @( H0 g
P0=du[m%10];
" l% s( E/ b6 F* T1 a% F [0 J delay();
8 o1 ?' u9 @, k5 t, \: r P3=0xdf;1 i5 G* z1 r3 |
P0=0xbf;
0 I. `; |( p* ?7 m" H delay();5 J/ F2 {2 ^2 m8 z
P3=0xff;
3 G6 T; b( K; A- m( v3 h& H4 U* m if(!K1). q! u3 A4 N" \( N' q/ H
{
$ g9 ~ t; T1 @% t& T delay();( n) m3 {% Y1 X% q) ~
if(!K1)
$ K0 i% l' u) n& p2 j {% Q. S# m* V- ~9 A
TR0=0;8 Q4 I1 K) T( R
m++;% }$ e0 z9 O5 |
if(m==60). M7 j5 k! W5 Q# h
m=0;+ F# j4 s) G* I" Y! _
} }% d7 ?6 X3 W0 u% [
}
- G$ c3 g4 S( K: _- g% q if(!K2)
0 A: B7 F# W" y0 s7 D; Y {
" [% u7 F7 I+ \+ K3 G delay();) X& A; `% X4 V9 a6 l/ f$ f
if(!K2), h* M' x2 W9 R$ A" Z5 D
{. ~5 X# V+ a" H4 j& b5 R3 d* B) c
TR0=0;3 P! D" p1 D* A1 I! u0 F
m--;, J) W! q$ a4 L& y8 V
if(m==0)
% S* o, Y# b+ @$ h; L$ L m=59;4 K2 I. L) h; Z
} U9 P. ^4 q5 a( T( g. S
}
3 Y6 H+ p4 _8 H8 G TR0=1;
' y1 b. x7 J) R0 X}
8 g' [" `* r6 O n3 M1 `* y//========显示时函数==============//
5 \; o+ t# z, u$ m( x7 t Zvoid displayhour(uchar h)$ G, U3 N4 V, W- ]
{2 N: P$ c5 ?/ _" C
P3=0xfe;
! P7 H- n U0 G/ p P0=du[h/10];
* m% X# r0 @7 I1 k5 l$ { delay();% N9 E: N3 b: O' e
P3=0xfd;
! O4 Q/ [8 F% D5 E% m P0=du[h%10];9 \" @: i3 B; M% b" G( I+ d( Q
delay();
. n4 @# B! m+ a- I7 }+ e P3=0xfb;2 K+ a( |+ X. C5 ~- R$ @& Y1 H4 b
P0=0xbf;# P* r' b, m- A, a
delay();
' R* V" S* n9 V$ F/ K& G8 s P3=0xff;0 [/ }- ?! {) p: M
if(!K3)
" `- H5 c( \, d& ~, Y4 O& S+ H {
% k3 h- ]1 u1 Z( ^+ l5 B delay();
0 t0 U- T% q. m+ a( [ if(!K3)
" p$ f& f! R+ w' w; O {" f2 h# Q8 ]) G9 ^0 i
TR0=0;
, @; G, ?+ H2 b8 s4 u h++;
7 b1 _% G6 P5 [ O if(h==24)
* j/ w/ V) c2 O0 s h=0;
; q7 z! k! L6 u3 c+ J) O) b6 u: S4 S }
h9 f% W: |* J) Q }
. N! E) ]! h7 Y4 c3 J if(!K4) n3 B% o! c; V% c1 g% X
{3 `& e5 w2 U. z1 S2 ]8 C$ S
TR0=0;0 i3 w o0 l. V! _# S7 v- f
delay();: K) Q$ [; a, o2 x$ n/ S( ~
if(!K4)
( X$ p! V! X! \7 G8 E% E; F5 V3 K {
/ X ^9 |; V+ s- z h--;1 Q! L# e7 f. Q# w) c' ^
if(h==0)( f. ]% u, n6 b4 U0 B z2 t4 R
h=23;6 O; u' |; V9 B' h6 A
}
3 V$ m0 [3 h1 c! r }0 ]. @" h7 e; O7 Y. Y
TR0=1;
: n/ k8 E7 {- |; }0 `" @* l}6 x3 ]2 H7 `% U( j
% H$ F. t e! q& O
//=============主函数============//
* p9 d+ |8 e1 v3 V, T" f. l5 j0 cvoid main(void)
+ D1 X9 f# ]& ]3 x5 \{5 k% P, a' g" R1 S5 J4 f
TMOD=0x01;3 l5 m8 _# C2 |; L2 R
EA=1;
; Z9 @! U" r( _2 t( t2 p# V ET0=1; O a' w9 V3 |. F6 Y
TH0=(65536-46083)/256; //赋初值
! J9 [1 }& l4 N- Q3 t TL0=(65536-46083)%256; 9 u2 S+ P1 i( v+ j
TR0=1;
5 l# G9 S+ ^' L+ T; @4 Z while(1)
5 k/ @. |% [, m" n. `4 e5 v: \. Z {' {: P' D! _% \6 E- N0 ~- l5 D
displaysecond(second);
% d' E4 }! ^; B0 V delay();2 J5 E6 a3 T) W) {( a% _
displayminute(minute);
1 e' {& h( v1 F; k delay();
2 T6 m" Q% V# B* G displayhour(hour);5 i) k( o1 Q$ x6 d; C
delay(); G" ], X7 C* V
}
+ ` b3 k+ j5 t' x}
5 N2 T! i2 d; b//=======定时器中断子函数=================//. X( w7 H% q8 J$ M; V1 V3 V
void inter0()interrupt 1
' j* e& h* e1 f( r- C7 R{
9 H9 X t- G8 e. U+ n# p8 @, i/ x& g time++;
$ u, g; Z/ C, Z9 m( u' W9 q if(time==20)
7 O3 R8 Y6 I' V1 P F {
# c# V9 F9 [4 v time=0;
5 T; F( D1 L; r" e8 \ second++;+ F3 t/ c1 } \" Y# u0 {/ X3 T
}- `( `, O2 `9 p' B1 i& i0 U3 v* b
if(second==60)1 `4 A5 c8 A5 L+ F5 C
{
! X, W- P& e5 a! x" g second =0;
! V! S- E+ s5 ?6 H+ b2 N minute++;6 l3 @# A; z! O
}
% y* n( V5 u- ^$ `; S: g if(minute==60)
$ c- @5 U4 n* h+ v8 h {
& r& n9 r1 G9 w( V) v4 t, b; _ minute=0;% H& A2 [' A* T( r
hour++;6 x' k" ~$ `$ }" U, [9 Z2 S
}
; R0 T; Y; X4 n. b; L8 j* | if(hour==24)
2 {3 @+ k7 L a4 V( X {, V: k. b" [& T3 F6 m
hour=0;' ^/ v" ~( q0 N& H$ a* |
}7 ]4 Q5 ^ a% Q5 `: W
TH0=(65536-46083)/256; //赋初值
; [' s1 }! l2 r( b TL0=(65536-46083)%256;
4 e# U `+ ~6 j6 `5 g! y) n} |
|