|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
以下是我写的定时器电子钟程序,按键功能不起作用,哪位帮忙看一下。
l, \) n& z- G# ?/***************************************************************************, W! l2 p8 H& n6 ]4 A
名称:用定时器定时做时钟
( R i. F. f7 S* O' h- [5 W" T0 [内容,自动从00-00-00开始,有按键功能
& j0 K/ A: @3 T5 D/ E芯片型号:STC89C52RC5 M1 Y6 z! l( S2 q
功能脚说明: P0为段选脚,P3为位选脚,所有引脚低电平有效.
% @, U# e! s/ r: B程序员:玄溪
% V% P# e' u; s0 a; d% p, S日期:2012.2.6
- B5 y3 }' [7 `5 ^3 v. Z/***************************************************************************/3 g8 H7 y8 p' V, h7 K
#include <reg52.h>/ v# C' g1 n7 a$ H ^) e
#define uchar unsigned char
1 S4 v2 }8 O9 [0 q" I" H5 {5 a; d#define uint unsigned int" q2 J/ D! Z6 S1 x3 p1 u
6 Z6 ]/ E( u4 C) j/ Z, M, }& I
uchar code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
/ g" ] K5 L- ]+ Fsbit K1=P1^0; //分+! J0 B, c6 J9 O; @7 ]% J
sbit K2=P1^1; //分-
% N$ J0 x, _* ?* Nsbit K3=P1^2; //时+
" F" v/ ]: z5 R2 { Y$ K1 X% G Qsbit K4=P1^3; //时-' o/ r- Z! o2 M# {' V2 _8 o. s5 d
* O9 M8 w. k2 J7 R/ Y1 @uchar time; //定义中断时间次数
. n- ^' H1 A9 r2 muchar second; //定义秒
+ n# H8 w4 f2 e+ i/ B/ duchar minute; //定义分! d$ O' w" n0 ~
uchar hour; //定义时- i6 _! u* l8 J8 T# k. k
//===========延时函数============//
, L2 a. m8 ]! Y1 d2 qvoid delay()5 E. \2 q. {3 }7 V2 A( r- Y
{) d1 s( N/ m* F$ W. S2 W3 c" K$ w1 c
uchar j;
\0 q$ i, K5 K8 X: i' p for(j=0;j<200;j++);
6 y i# Z" h0 G}' e3 p8 j! X3 m- H
//=========显示秒函数=======//
! H# L6 d y; @, O6 [void displaysecond(uchar s) //带返回值
: \8 k4 ^+ @& e( R* w* H4 s{
x! X+ J8 x% ~4 F5 P& ] P3=0xbf;8 f) Y7 B9 Y6 E7 c$ X8 \
P0=du[s/10];
7 o$ E: F9 F8 p& B delay();
* W/ j- Y* m' U. g! z Q4 Z6 \ P3=0x7f; Q/ l) f2 ~( S& h% o* R
P0=du[s%10];9 T9 Q# ~' |9 C$ f
delay();
( R* z, \& T- g( W e# ~! t P3=0xff;6 n6 Q) i0 b1 [% q
if(K2==0)9 n/ `' \; f) p5 j1 m
{
) E: a3 [% y% Y$ U# T, @# V) ?8 e s++;2 _8 ^4 P5 d0 k
if(s==60)1 n3 F4 X# h- S0 W8 l( J$ l
{/ W+ R: J0 m* h
s=0;* A- y q4 ~6 n N
}8 |" N- W+ D4 r! `2 t3 D* C
}
4 B5 P8 W) h" w# S8 e& _}
8 Z8 z4 j" s1 C/ t//========显示分函数=============//* T5 U( g8 D) Y( u6 A+ o% t
void displayminute(uchar m)
6 e/ ~4 w8 {+ [" J8 o, b{; [' S' \$ ?- y ~( S
P3=0xf7;/ n/ q& z1 e3 y- A7 \
P0=du[m/10];
$ b. H' z& |5 f% g5 T delay();
. x G4 l8 e" n$ j7 H P3=0xef;3 V; \2 D7 |# ?
P0=du[m%10];
8 i7 E) o- l7 j( g delay();4 i& e3 G% s/ N7 J
P3=0xdf;
0 @# a. q4 T( o' q' e P0=0xbf;
6 I3 K/ L2 Z4 A- |: |0 D delay();# z/ D& c0 {( [5 j4 v
P3=0xff;
. o' H: D1 [* V# `) |9 X3 B! L if(!K1)
' u0 m" {! K- f, V: o4 Q {) i8 D7 Z' Z3 g& N6 j
delay();( |( a! }% W. `0 b4 e
if(!K1)
5 f: ~" u$ @+ f y {
# W* \* K0 V: }" i" w& s! G( p TR0=0;5 F2 m: w$ H- f% u
m++;
) j" B( f8 d! S! {6 H- @. j if(m==60)8 ]- z2 k7 k& Z- I# _4 x; ]4 b/ S
m=0;4 Q: i4 r1 i P$ G. K
}
" q$ o4 g$ F9 H }3 r _, k) V" Z1 I, j6 R
if(!K2)
6 Q9 [6 u6 o+ ^. V$ l- [5 T {
4 a0 Q' p p1 B( A- `1 I delay();' D' w! Q m) ?
if(!K2)
/ ]0 k( U1 E' ~ {) f7 U6 {' P: o
TR0=0;
5 n7 q5 T& R# }) ? m--;* B' h3 L6 Z2 d- w
if(m==0), Q, ~8 t6 s A$ a
m=59;
) r5 P* ]2 B3 O; u2 ^( } }+ r: |( E* X4 `( W- c2 ?0 j
}
/ p& F3 J z0 M7 C, q TR0=1;
2 M* _6 }8 G2 R8 {5 }' e}. _; _3 ]0 R9 y' b) }
//========显示时函数==============//! E. ~8 g9 b) {1 a% N; R8 N. y
void displayhour(uchar h)
# p% N; S2 A4 f& D{& d! M$ S7 w0 U" w4 x& V
P3=0xfe;
; a" {% c1 m) k; {1 E& U" ?3 { P0=du[h/10];
8 X" ~9 g* C/ P6 |" U delay();# R0 p4 I; A" a& V/ O
P3=0xfd;
^ F; m) p% l6 U P0=du[h%10];
$ F9 V, d% K: A% D7 m delay();8 d$ |* A" G( I- @: V+ L) I
P3=0xfb;# y: T4 E9 C0 y1 W5 ?
P0=0xbf;
' b- U" A0 l% ^; T7 ] delay();0 n( j1 h# _. g3 Q
P3=0xff;, g' b' |1 k$ _
if(!K3)7 {: ?! c8 @* L% [% H
{7 y& d4 T/ V% Y$ s+ Y, h0 {
delay();
5 K1 G! Z- ]( L' S2 s if(!K3)* E* n; D7 r1 f$ i
{ N7 w* g) ?; H; S# {
TR0=0;' ?* ^- @7 D5 T5 X+ b# t! k; B
h++;
9 k$ F8 P6 f" @( E' c if(h==24)- ]3 m! R7 ]; F+ v
h=0;
* ], ^- J7 K0 v+ f1 r. I2 S }
* w( G& a/ i% S2 |; e }% B4 e+ A& L* H" R! X( t0 O
if(!K4)
2 h* \4 Z9 r! |( `6 z- K0 I* b. | {4 [) p# f0 |! _; y
TR0=0;
) u9 ?1 I% j! R4 Y delay();
- D, {( \- b9 P7 s1 \7 d$ k) ^1 @; y if(!K4). S) b6 U/ y. c f/ T
{
! \' i# d2 e9 C# P- ] h--;
6 W, f& Q! X' G, S/ | k if(h==0)2 [3 I; `4 X g+ E2 t
h=23;
* P* i6 l8 U' h# E! j7 w } F8 A/ h4 d/ ~
}
+ \% T0 t* ~, m8 p4 |) K TR0=1;$ S1 J% Z5 x& N0 p% ~
}7 ~, i; i& k. x! x, ]
8 i4 T, z0 ~' T
//=============主函数============//
% S+ u) E* z9 H4 @# A% c# Rvoid main(void)
2 X/ A% J, t/ j0 I; c9 z, V{6 P+ J) r* z5 l2 Y5 w! X$ j0 W
TMOD=0x01;) t$ R: K/ A' ]0 h3 A, H
EA=1;4 e3 \5 O J% f# @; A4 F
ET0=1;
* q( w" K& Y7 U: D/ r2 r$ w TH0=(65536-46083)/256; //赋初值) Q2 z5 D9 ^1 [" g: W: Z( E
TL0=(65536-46083)%256; + K; ]/ I, v6 M" M
TR0=1;
8 K: N; I2 F9 e6 G& A- v m while(1). a2 w3 o9 z9 I/ W+ R0 h
{' j% ]5 A3 ?9 w- R
displaysecond(second);
) q1 F- o, Z) [( X4 ~ delay();. s& ~; ]3 c5 [ M& A7 \4 |
displayminute(minute);
% c) t$ k' n* [$ l0 z4 o4 B! b4 u delay();3 s# J/ f" ^( F& s/ B {, M) F
displayhour(hour);
/ ?- |2 }! k1 t+ \ delay();
/ Q# U8 p/ g( Q7 Y }
$ v: }$ H) Z( F$ z# C% k2 v( b}
: a4 d. v8 D% U n* z//=======定时器中断子函数=================//; b8 e7 i5 R( ]: o. @) _# x
void inter0()interrupt 1
0 u9 L! N9 Z6 }" e; C{
( n( N8 m4 g g4 ?6 M, i& }/ X time++;
: d- R( C4 G% O% }0 o/ i$ H if(time==20)
( G, R$ i, A1 `% i {
2 _# t' M+ g/ n' E( G9 a time=0;
c* Q6 _% u' K( B' e1 O second++;
: }3 Q! u3 u7 N, s5 ~ }& G7 w% J& \6 I# E: F& D
if(second==60)
4 K9 [5 u: O3 {- X& ^ {
! p, K; g0 J% y5 N second =0;$ e k9 }) o+ q6 `6 b9 E
minute++;* j' k7 }/ K( w. D. b
}9 n9 q+ f0 [& `; O$ E0 b$ g u/ G
if(minute==60)
4 R! q( Q) z D: k& j- W5 _. M9 | {
) |) r& g( m# Y3 x1 U0 r- ~4 V minute=0;
/ D8 f* ?' J1 _. M4 W hour++;) i. T/ O! W5 z J3 q
}
; t& `( {- U' y' N _ if(hour==24)
3 c3 o+ j. F+ h6 s( {; c6 P2 j {4 \4 v: z9 T5 @4 j
hour=0;; y8 p, d: ]2 B& H1 p# i& |
}
, Z/ I0 `" X; X8 P% A) k TH0=(65536-46083)/256; //赋初值: s& {( V2 Z* T- K& C. r& m H$ X
TL0=(65536-46083)%256; . v& \ i: }9 a9 n% ~) f5 T
} |
|