|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
以下是我写的定时器电子钟程序,按键功能不起作用,哪位帮忙看一下。
. W, ~( ~7 e% w/***************************************************************************0 W4 \& d+ ^4 F/ W0 {. Z
名称:用定时器定时做时钟' }% h7 e& s, S) O) T- |: I( d+ n* K
内容,自动从00-00-00开始,有按键功能# G; s: u: v2 m% B( G
芯片型号:STC89C52RC
( ?7 u7 Y$ f/ q" \. n+ q( g, u功能脚说明: P0为段选脚,P3为位选脚,所有引脚低电平有效.
% ~! Y: n: X7 H2 x程序员:玄溪
+ U) C7 M3 s# o, U8 Q日期:2012.2.6: t F2 r% W. C) g% ?! {/ w3 f
/***************************************************************************/
- J) S) J1 z& p/ w% O* ~$ Y#include <reg52.h>8 ]" l* g$ j u- I
#define uchar unsigned char . R" x! k9 R+ m2 d
#define uint unsigned int) K0 |- z5 v" J' R y' d9 Y7 v
2 a8 z9 l, {! \! Y" m
uchar code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};* e, a* S5 U" o( U6 \0 g; H
sbit K1=P1^0; //分+
; G% I1 m# y9 Msbit K2=P1^1; //分-& ?, Z2 g$ C: ]
sbit K3=P1^2; //时+% v! v! Z" p1 v# ~5 O8 z, r0 O' Q2 n
sbit K4=P1^3; //时-
5 g' w: Y. z2 y2 p% I# A( O
1 d$ }- C' E' r7 r" Puchar time; //定义中断时间次数
' R+ b! C3 a& P: U0 ]' @uchar second; //定义秒
/ Y, u; }2 s3 l0 \# O5 Huchar minute; //定义分0 {2 U$ f' y: o4 z# O3 B6 i3 v6 o
uchar hour; //定义时, P2 P, x- m4 K G0 L% e& h
//===========延时函数============//0 C- N0 n/ {2 w+ l
void delay()' F+ K Y' d$ ]$ w# H; W
{# Z: R% j0 b1 H7 U! f9 P. |' c/ `
uchar j;
. t4 `0 u9 L+ A# k for(j=0;j<200;j++);1 H0 z* @- v6 ]. Q" m- z9 b" W
}
a8 F% l* v7 `+ r; u//=========显示秒函数=======//. P6 A: \" u) [# Y; g
void displaysecond(uchar s) //带返回值& z5 y# B- N9 f/ O
{
9 K, H/ ^2 q$ ?9 e! R8 b P3=0xbf;
0 n2 a0 B2 i* c$ B- I+ [" K P0=du[s/10];0 ^4 C' }1 z. W3 j) ^
delay();
$ `+ O4 l$ N1 d" @ P3=0x7f;
# |0 E* {! U+ ]- X P0=du[s%10];
9 d, d, l' F/ [5 F3 V1 d delay();9 i% a; b k! P& m7 h
P3=0xff;
" G/ i B' _$ U y! ]1 j if(K2==0)) K$ Y) P5 a. O
{5 L$ m5 M7 [2 B) ^( j, ^. o
s++;
6 ?2 }" P0 Y4 }( @; I if(s==60)5 I6 [+ Z4 _; W D2 S U$ f4 B1 c
{
# }- J2 \ W4 s! V) I0 l( K/ [6 T s=0;/ Y; H, a' e2 A
}9 K; o8 |0 J8 g. m. T
}
# y3 Z% y9 `$ I! c}" f- o/ {3 R. H+ S6 R. B
//========显示分函数=============//
2 m7 n& m$ \* A. P9 ~void displayminute(uchar m)6 J7 S1 {( K% S1 k. E. L
{
0 H) l8 r2 a5 n P3=0xf7;
$ R& |9 ?% B# L; b$ L( f9 O3 B P0=du[m/10];
# ^& a+ @3 k0 S( D6 I delay();3 S! C* q9 p; M6 P6 o# h2 g) v
P3=0xef;3 g4 k' C; D& w% ~
P0=du[m%10];
$ ^9 e0 s8 @) T) H* h( Q delay();
- e9 b3 C$ O9 U0 j1 C P3=0xdf;2 [, F# U# g4 u- x2 M9 t
P0=0xbf;
9 v+ _) ]' ^' Q3 s* A delay();+ [6 j( |7 {6 G* J
P3=0xff;3 ]7 r/ L' k1 D5 }( b
if(!K1)
% ?4 k9 m% m4 C7 s {
& l9 {; P; O) E' w- e" q+ h- n delay();
1 f4 X: g6 x: P# y/ i5 f O if(!K1)' q4 x; n+ a" l6 x7 w) q
{
: I; r& [- K0 t# M6 @ TR0=0;
- m9 g9 @) X8 w& ]1 d) G m++;2 T8 c9 L" C q& A; p% L" L- h
if(m==60), t' i o9 z% Y2 p: B: [' T. G! x% v
m=0;. C) f7 O ~/ A3 k
}8 R. l+ t% f! D! K4 x
}
2 V) `( ?4 M* Q if(!K2)
$ M" B0 o9 z5 o3 J# C {6 r' C' A, ^% C0 J3 H/ v7 P
delay();
4 {+ i- b. D2 m3 Q7 U0 K6 O+ ^ if(!K2)0 e. r: A3 Y a7 n2 m3 a
{1 x& h% e% u# |7 l, Q
TR0=0;
7 U2 K w5 k( f" X4 { m--;
6 ~# k C0 M' D* n: M( ^ if(m==0). A& ~' L w9 F/ a( l! O0 u- p
m=59;( H7 O+ d" N5 K
}7 Y8 ]% I3 L: n( \( |! U
}) v. F5 a$ a9 j% {; h7 T4 L6 v4 W
TR0=1;
* W$ w% Y H7 C8 X! P* L6 z: V- o( y}0 X N$ { Z1 h J. m
//========显示时函数==============//
/ |6 T2 y4 [. R# Fvoid displayhour(uchar h), _0 T5 A* F9 K. \% H0 C& |2 U
{
0 u9 v0 o# D8 v P3=0xfe;
5 }$ `3 N6 K" P: f. W. w; \/ f P0=du[h/10];
' d+ \9 W% }0 J' y6 O delay();
# s* ]) v: ^$ }) F5 ] P3=0xfd;
& X3 U' y; q! J( j0 h6 C' o0 u P0=du[h%10];
/ g8 q0 I; [* F! X delay();3 k+ W, o1 c) `5 I8 e1 |* u
P3=0xfb;
/ ?$ y" v8 s" P/ L' p8 e$ C P0=0xbf;+ Q) ]( J3 y# w0 f1 H9 v8 t
delay();
1 n& v/ t9 B, S- }% `3 e2 d P3=0xff;
1 C" r9 T/ j. l, z& T* d, w if(!K3)# x5 J; {, }' P+ ^6 x1 Z
{
& }1 b4 m; ]( D1 w* a delay();; n. o5 o: w+ D8 F7 m2 Z
if(!K3)
! [) Z# F4 O9 k6 s! @ {: d( @8 p P+ |7 w" Q( {
TR0=0;
1 |+ O6 [ R1 V; w$ D h++;
8 b* L/ U" E( P2 K9 N' o! f if(h==24)5 [0 q$ y2 @/ V2 u9 ^) ^
h=0;' I& `" y! L0 Z
}& c9 q; {1 f4 @% m
}4 {# \+ E$ L8 y, j# e
if(!K4)
! x! s. N9 G# E, G5 I* J {
& `5 w1 f$ S8 R U7 C* z8 g1 N TR0=0;
' N, P1 `1 ^( W& J! h delay();& z3 q1 l! ^8 \
if(!K4)$ S9 {+ c4 I: t8 m( K
{
; X$ m% v: C, a; N( w' x h--;
, N# s6 [& g. [5 |5 Z0 N9 W if(h==0)2 e$ I0 E* K* K$ U4 r0 A
h=23;8 @2 F" P( K* j! H. X B
}5 }& o! R) ~' D4 n* K2 m( i- `
}) k1 N& e& i0 p6 t" E8 u
TR0=1;
! e N3 E2 q- g6 |' M8 X% @}* e1 Q' I. f. ^
& A4 |, X! ?9 E2 M1 t3 ^, h
//=============主函数============//
' g) H: K+ X Uvoid main(void)( W! j) n1 M/ B5 q. n/ k" K4 ^
{1 p! }. O- l' j' K5 ?
TMOD=0x01;
' s) g( I. Y& V5 B: a3 m H EA=1;
( T8 Y, b/ q' U! J" x ET0=1;
5 s1 H- }9 b- B. x TH0=(65536-46083)/256; //赋初值
9 m/ L0 j* @3 X TL0=(65536-46083)%256; ; F2 ^6 k3 a2 ?: v
TR0=1;* i7 ?- H9 ?" Z
while(1)/ s; ^5 T8 W2 U3 k! y/ t3 p& j. l
{9 u& p6 M5 U, x, s, D/ Z' |% k
displaysecond(second);
. `# D' |, A) Q3 D# B delay();
" z3 Z: d, g6 w. N3 g7 l0 W8 g. J displayminute(minute);4 k P ^: l- ^6 z$ g
delay();
) z3 u* i+ N2 ]% x! s' p3 g displayhour(hour);8 w& u( b. {- b/ p, t# }
delay();
4 S6 ?% k$ z W$ a }% n V& l Y+ B: r1 \6 k
}
5 s. g. J$ p1 N! y! f! E! t" [5 X//=======定时器中断子函数=================//- E8 P" ]$ W1 h m$ }
void inter0()interrupt 1
0 D3 {7 o: g' X7 Y! L$ q, B{4 h8 u- `6 l/ M+ m
time++;
; X( O' `( U1 F$ G# a5 y# A2 J if(time==20)0 K7 c* B/ h {& M$ n
{5 A \- B8 U$ k
time=0; s4 n7 k4 D3 h( p$ q2 v& h
second++;: G7 [8 n' s$ q( D, _! c
}
3 K- \$ i: f- ^ if(second==60)5 y) [" D/ B# U! Q- u9 G" ~4 V, _
{% ~+ v- Q2 Q. I
second =0;
$ }) m: T5 T: q, }% J* Q minute++;
# q1 E& z/ ~8 u- [) o }* s9 Y$ K3 |; o% b' u7 k( B
if(minute==60)
; ~5 T+ `7 |* x {8 ?) q9 ?) \$ r* c& X
minute=0;
4 |0 {6 Y" _0 A, ^7 s hour++;- F" @* T+ k/ g$ E$ V
}
# E3 O& \0 Q5 t/ b1 Z4 [% Z# R if(hour==24)4 i ~ s% B( v, Z) C$ E# I" J( T
{/ u& h' O1 C+ N% K3 z8 x
hour=0;* [; n) `6 C! d* F4 R4 b9 [. _0 N( X
}
, l; E- C/ G& J1 H% ` TH0=(65536-46083)/256; //赋初值* g9 d7 O6 N% i4 j" B; D( L I$ |
TL0=(65536-46083)%256;
K1 N8 y* H1 M) S& B, Z} |
|