|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
以下是我写的定时器电子钟程序,按键功能不起作用,哪位帮忙看一下。1 f' W& E8 v$ t8 i" E# t
/***************************************************************************
c C: z. [2 {; R- E" [名称:用定时器定时做时钟
) e. i0 v. w1 q! L* s# K内容,自动从00-00-00开始,有按键功能8 k+ t% Y1 b" I4 |& g0 F( k5 P
芯片型号:STC89C52RC
8 L8 i6 k4 }( G# r0 T3 ]& F功能脚说明: P0为段选脚,P3为位选脚,所有引脚低电平有效.
/ t6 U, Q9 h" w5 c6 ` m, w程序员:玄溪
2 v/ D* X0 h" E: b( d+ }日期:2012.2.6
n+ b6 }; ?! [: o. y* ]) _/***************************************************************************/
4 r6 f* ]' L. `9 g2 r! S#include <reg52.h>
& A0 \: ?- E: `#define uchar unsigned char 4 r x9 B# p/ z) B4 |
#define uint unsigned int
% h" ~. r2 r0 d3 x% H: v0 m" O1 @' H+ ]" I8 n* @/ P
uchar code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
( S7 H/ L% U$ f; B* k& x( Isbit K1=P1^0; //分+
" F/ l5 ?0 N' j7 ?5 Osbit K2=P1^1; //分-
4 Z% j# P. t. L$ k! P0 L) X/ t$ k; b: h1 xsbit K3=P1^2; //时+
2 S# h+ t' m6 osbit K4=P1^3; //时-
6 ~6 Y6 Q# U8 I& a0 q( \3 D# S: ^% m0 l
uchar time; //定义中断时间次数
6 f: j/ ~/ P* {: v7 O; Suchar second; //定义秒" [9 q, P5 J* N
uchar minute; //定义分 ~! F! L: X1 E* N5 w8 L
uchar hour; //定义时& u4 |% S+ a. Q9 r
//===========延时函数============//
, Q' T/ L3 R S! r( U) X" M/ Yvoid delay(), L$ z% ]- i: W5 t
{
0 M5 q+ r! D7 l$ B uchar j;
- B4 S$ Y: J9 F. t7 I for(j=0;j<200;j++);2 C" Q5 \. C' W$ E
}: K# w6 p' f8 M. `: i, S
//=========显示秒函数=======//3 e9 K. A( C( D6 o7 i
void displaysecond(uchar s) //带返回值3 M# `: N3 O4 N/ }* L% J3 r
{# a$ N: x6 z, W0 E# v0 ?
P3=0xbf;' R9 S( _4 C7 G) W& k& P
P0=du[s/10];) K4 c6 [9 o1 O
delay();( `7 X/ h+ b, e! B
P3=0x7f;
, A/ C5 I; @# M4 w) K- n+ F. Y P0=du[s%10];
" O4 C1 C" ?6 l delay();
; q* U" q8 u# \. z2 I- R P3=0xff;
3 q' d4 d) X) X% ? if(K2==0)- t2 O# x; w+ |3 v) x
{
2 R8 E, P2 M' D$ } s++;
* G) p E* I* _7 K' S- f if(s==60)' f, e: n8 ?7 `9 O
{
# }- o- l1 _7 U! R. E0 |% b s=0;
/ @5 B% }* S g! @& k }
+ y V4 U* b; }* m6 C# E( _+ l }8 K& v& z) S7 n: u+ y" y
}9 `2 V8 Z* E) f9 B5 W! Z
//========显示分函数=============//
9 c3 l5 W- a4 `6 u' Zvoid displayminute(uchar m)
% D4 i% ?5 f/ d" ?/ j2 M5 h{
/ B: S; H' l9 N4 ~# N, R+ t) k P3=0xf7;
& o6 v: }! L$ Y6 f$ U P0=du[m/10];
& Z3 B* c% S8 @+ w7 Y9 } delay();
1 c* u3 R3 \1 {9 r# e( { P3=0xef;2 t. N9 F6 L- L) r5 d+ M3 [
P0=du[m%10];4 v! n# ~/ v1 _( S' ? M& j
delay();
* f) B! g% ^- @ P3=0xdf;9 H3 ]& L; J6 f z3 N7 K+ J/ a
P0=0xbf;0 M- G+ R6 n D8 F) ~
delay();
; F( p0 H/ r5 C8 X P3=0xff;/ s# }, j) g5 `, V3 O' i, n4 O
if(!K1)7 F1 D% R! X$ h* A3 o2 M
{
0 c8 \' [$ ]& K$ c. m delay();
& ^$ [4 _# ^. B1 n4 @6 a. x; l if(!K1)
9 @/ w* o" e R+ g {
5 E$ Y0 K) m; M3 K TR0=0;
, t4 o6 q2 B2 i. u( @! h# {0 ~: v m++;$ _1 O. u* u$ B! u1 L8 c
if(m==60)
7 o$ B8 o( f' p, |& ?5 g; h m=0;
& B' N1 z/ J3 D+ C, A8 w2 M }
3 I+ s- E# d/ }2 M+ [3 W }
3 x! h2 H+ w8 m$ b3 L4 Y6 K if(!K2)
6 g$ y, t8 U X3 F {
4 @& P6 J2 i5 W: ~! x delay();8 ^# J4 k \! T4 G* t3 V% [! n
if(!K2)
# y/ V! D& S% c. c& t$ J {3 d* d, H& U/ t6 v) @4 e6 ]
TR0=0;4 V/ Y+ H7 z P& w
m--;# I* u& U2 b# s7 x9 ?$ s7 a; d. a. s
if(m==0)
% ?! Q* ~2 _8 Y( J4 z9 Y3 j( H/ X2 x m=59;
; j9 g; N6 |3 q: c& Z. E }
4 r; w, E8 I1 o& {4 S( z; p! _4 n }
0 D3 z3 g/ b2 t# B' g TR0=1;7 K1 w& S" L' b+ h* ]
}& E6 a/ J% m8 H
//========显示时函数==============//# |4 Q+ W/ O! B1 s' Y
void displayhour(uchar h)+ P! Q3 l; y2 m* M
{
: _: `! g8 f/ d! F% G P3=0xfe;
+ |1 n! Z. {- D w# N P0=du[h/10];
: V+ |5 ?" `; [ delay();1 L: q; ^+ h9 R7 l5 V& L
P3=0xfd;
2 `7 e3 H# R+ m9 H5 {% o. H P0=du[h%10];' u7 G- ]1 T; z
delay();
, a; w8 _% u7 I) Y) a9 K P3=0xfb;
. m+ I* o: T, j D, B- O, m P0=0xbf;' |, p& q0 ?& k# R" H7 B: X' P
delay();6 u4 n) W% t0 M0 a+ X. U0 `2 N
P3=0xff;
6 v$ J0 Z4 V6 ?! `8 ?$ W if(!K3). G6 o( z% |& Q1 B3 A
{
' O7 I- M Y% b* s; w, D% j0 u* s' T delay();
, V0 G% I9 {8 Y" `- {, R- ` if(!K3)
7 s/ N2 u. z! L% v h {
& z- R g) H3 F& T7 `. H* r% m TR0=0;: k6 H \3 L- n) T; V
h++;
" [; Y$ y4 b7 @- M# h if(h==24)
, S8 ]" X4 R2 N; x8 B h=0;. p9 u7 T2 j1 Q$ E+ O% u, b. }
}
4 K ^6 R A8 ~/ O) }; k }- ~3 n. S6 Q. D6 W2 N2 t9 z
if(!K4)
. R8 }- w+ ^8 F: X {
" i) G* Q6 p) Y! c TR0=0;, B( n/ q8 I/ i e3 H2 y
delay();0 H7 l; d7 X# P: y4 y
if(!K4)- E2 _- E" L7 j' o! q
{9 a a4 ?! |. L( ~4 y+ J+ _; S
h--;/ h7 |* W- `# x/ u9 ?
if(h==0)4 W" T& y' o% W/ z8 p$ D( D2 p
h=23;
! ^4 E2 g8 ^! C G4 [0 F5 u7 F1 W* u }
5 {+ C8 F$ J- y. q( M4 l* \& P, t* f" q }6 S' Y. m3 a% X. a6 k% R
TR0=1;+ L- j3 `6 z0 k8 d) k, K* d
}
6 b$ |6 V4 u9 O: u- M3 T. K& i1 Z6 L, A( m' {7 I
//=============主函数============//
; S5 d; z$ t7 `4 k0 Evoid main(void)' N- N. p- W5 A) ]6 r) \
{
; O7 ~/ y. A: ~4 P# ~) V- G TMOD=0x01;( D7 @) [3 \" Q
EA=1;2 W8 ^2 \6 Z- F3 B* o
ET0=1;
/ _3 K5 s8 ?: u5 D7 _ TH0=(65536-46083)/256; //赋初值
# R+ Z0 ?3 C2 f( y* {% G1 q+ [ TL0=(65536-46083)%256; * [, c* j1 ~" u9 B4 T* M
TR0=1;. \5 H) {+ ^. f; o2 v
while(1)
: N/ ^% e0 Z/ d. f {* X' Y) N% ~+ ~" T
displaysecond(second);: {6 ]1 J3 p9 @, r! o2 q2 X
delay();
3 t. E+ ?0 r9 ~& `2 N1 P: S, X displayminute(minute);4 w4 |. v B# q2 B% i
delay();
2 x- m& ~0 S3 i8 Z7 s: W3 W displayhour(hour);
. M1 u T' ~0 p* E/ M" U delay();& C' `( T/ U0 g) L. Z4 [9 W# m
}0 Z6 o* S6 \2 Y6 w+ G: G
}
6 |( m) a/ s# P9 K% H//=======定时器中断子函数=================//+ w) u/ H9 I \
void inter0()interrupt 1# I: k+ M; W; q3 c8 a) @
{4 i( U& a6 H1 c7 P6 [; [3 S' z# z
time++;
; g. |5 e s- j8 J2 u if(time==20)
1 l F/ o. T" d/ w {* V, J# G/ O) Z% v9 C7 Y& V7 t$ Y
time=0;
/ y9 K% F3 d- k# M second++;# }4 G' p0 u2 x |: d, w: A
}" H H( z6 d& z' G& r7 d4 E
if(second==60)8 p; ~& v! }5 l& c2 L3 _' S! C
{- e" e% B6 `+ _
second =0;
+ J `/ E* O" b9 _ minute++;
% F6 k7 |% |* y$ X: a3 e# P }6 h5 ?, z" R; J9 F
if(minute==60)
" ^0 z L+ a$ _$ b {
5 E* {- P) b6 s) P7 v- s minute=0;
/ E, [' F1 l5 M0 M( z) P; B" X hour++;. p' T: U2 n4 T7 \
}6 G% O7 e' W% C
if(hour==24)& r$ w6 x( \( S$ u7 u/ G
{3 ~6 ]; p) r( s
hour=0;
) ^0 x1 C2 D& s! R) p3 M# Y }
0 O o- ?0 Q! V( _# O5 k/ M TH0=(65536-46083)/256; //赋初值; k0 h7 z3 j+ B( ^* F4 }8 d
TL0=(65536-46083)%256; 0 q7 ~5 M1 S$ x% h
} |
|