|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
以下是我写的定时器电子钟程序,按键功能不起作用,哪位帮忙看一下。$ m- y# b5 y; m- T4 \" i( ?
/***************************************************************************. l* O; |5 h* e+ w3 @0 t
名称:用定时器定时做时钟
# Y) R% _4 D* x- ]内容,自动从00-00-00开始,有按键功能: _' E3 C( g/ C; b! v9 w
芯片型号:STC89C52RC
* X' b5 A/ o9 d) z/ y% Q. j功能脚说明: P0为段选脚,P3为位选脚,所有引脚低电平有效.+ Q& Q+ H4 H- D; u! `) }9 `, L
程序员:玄溪/ P+ a, c6 I4 D
日期:2012.2.6) `; b% `$ z8 E$ q, {) {) o6 k
/***************************************************************************/
3 R, x# J, J, W$ @. w: b#include <reg52.h>
- g4 U0 R! ~% Q f6 ~: V#define uchar unsigned char 0 o8 \) L. g, D+ i, g
#define uint unsigned int
: c6 S' o& Z" f) B! a+ _; k% | N6 ~/ p- u5 J7 L! ?
uchar code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
! `" B1 f$ @ O; F; f9 E$ O( tsbit K1=P1^0; //分+
6 ~. E! ^- N. l l5 K/ tsbit K2=P1^1; //分-
4 E3 d) h0 g3 _. i! U& m. ]; xsbit K3=P1^2; //时+- z; G+ {) Y5 e$ h2 z6 J/ N( D
sbit K4=P1^3; //时-
, u1 D5 ^) C) |/ {' j
$ D. m. p) A; ]8 i' ]# kuchar time; //定义中断时间次数1 c7 m, O) [( L, P! s
uchar second; //定义秒
$ C5 v c$ e* v3 duchar minute; //定义分
5 s( N: \- \* U% O& Z; Quchar hour; //定义时
& F/ _3 H/ d a# o//===========延时函数============//7 m! o9 ?1 j; ]5 t- w4 ~
void delay()
# m7 H% T7 i- f{
( o1 |1 T3 K9 m uchar j;
& b# i5 N! {) Q9 o7 m# Q- G for(j=0;j<200;j++);% I* j9 E+ \9 Q$ {
}1 n* d8 H, Q1 f1 H
//=========显示秒函数=======//0 I) N! ?0 `1 z; I
void displaysecond(uchar s) //带返回值
8 q* ^* _4 p) U9 c{
9 S, R8 w6 Q: n8 l2 B9 n) [ P3=0xbf;
& u8 [- Q1 c0 Y; m5 a3 v P0=du[s/10];" Q$ u0 i3 M6 @4 k4 r8 `3 D
delay();& q, Y: h: A* A1 p* n& X; H a% z
P3=0x7f;
% A- W7 o6 X w# [/ w2 w P0=du[s%10];8 B1 ?$ n+ S4 n; {8 ~. b
delay();
0 L6 m# V1 A6 ~. |. _ P3=0xff;
! T& C# y& F& o, b* ~5 \3 Y( K if(K2==0)
, R x1 S1 @) M' @ {
/ h* ~: s, w1 p' ? Q s++;* ]$ l% R; k0 A# P* Z6 }; n4 Z
if(s==60)
7 S; W# N5 z/ B9 S& q {
8 _, t4 F+ u- r7 B s=0;# b( t8 K ]( Q7 ]
}# a2 k6 R) M3 Z A7 l6 }( A& U
}! G9 ]6 q* S' J
}
9 s/ z7 X" f3 p, O& D8 f# e* a//========显示分函数=============//
' d% k4 F( b$ V% ?void displayminute(uchar m)5 _: l' Y& m7 F" \
{0 W5 z% z' P. D& d
P3=0xf7;8 |- r3 o0 Q3 s
P0=du[m/10];# U4 H) T& H7 n' E! {/ ?4 l' e9 U j
delay();
3 t; Z% s: j1 \2 y( ^" V: u P3=0xef;9 j( y7 u# W* p' ?. j+ h' s
P0=du[m%10];
$ W1 @* K% \- }% b# U delay();
( X% W# G, x$ i. \% M P3=0xdf;
2 ~' w( u( x. v( M/ `/ a8 c/ i P0=0xbf;; A* \ F# \7 V) R
delay();
7 B9 ]5 ]& F [' x( C3 p; U7 q5 O P3=0xff;
, D6 c" M, Y5 q9 ^8 j if(!K1)
R, H! L& q1 I {5 s/ V' O: l6 M* y
delay();
+ V* `' q9 o9 T1 N if(!K1)0 ^8 L6 v: J7 K
{9 `0 ~8 `5 V; _5 [: i4 O
TR0=0;5 J9 e+ M+ U7 v" N
m++;9 A, d- E. r d% D, g7 {. S
if(m==60)% D& L: N! p9 r( F
m=0;
# `" F1 w. n: d }
* n8 ?3 X2 H: }1 ? }
# _# E0 D5 p7 ?, y+ x, L if(!K2)/ r7 v9 |9 W; I# Y$ j# P
{
" q1 e% b0 ~6 ]8 R/ y8 v+ m" m delay();' s7 ?7 ]8 {5 z: {6 ?. {: z
if(!K2)4 d/ E6 A) C2 a p L' Y7 e( R
{
/ ^ T5 M! n8 U/ B9 L/ S% h TR0=0;
; v" E/ P4 n$ B9 H! S, h+ s+ \1 g8 z m--;6 l) o% @3 f) z; E; F! _& H, M
if(m==0)- ^8 `% z" q$ n9 a
m=59;
6 r3 f- }' E2 r% q9 D }; O; R+ W) U# |7 o) V0 Q
}
8 F5 I& f8 m/ ` {$ x/ a TR0=1;
2 ^3 E4 l8 Z3 L& g; K# ~# ]}5 ?9 M4 t2 G) D3 M4 a& i
//========显示时函数==============//+ Z. Z* x" @6 w- T( F4 Z
void displayhour(uchar h)8 d! t1 K, K2 @3 _$ d% l
{
" B3 N3 |- K, B8 l+ R P3=0xfe;
$ H2 V- G& X# n& L! `* X: }: x P0=du[h/10];
" z1 y, l: k" N delay();
+ R* j4 ?+ L3 @4 O4 m P3=0xfd;# ^1 @0 R( X, ]6 c p4 D: G! b
P0=du[h%10];
# j4 h' P' v: S) T2 s delay();
0 y5 g) x- z/ l# t! @- v P3=0xfb;5 U$ `# L# ?# f3 j4 o# R+ s
P0=0xbf;$ B5 y1 m3 O! X M3 `2 L+ W
delay();7 {( z; o, ] [; J+ i$ \
P3=0xff;$ r: }# I$ t7 p2 s3 a
if(!K3)
; `) w) e- C( ~9 v7 X6 Y {
2 H2 H, @" Y3 g; B: y0 V delay();
4 K* ^2 M7 O# g3 U$ R: n e if(!K3)& k* H* K: H3 m8 S& b
{1 w( E/ t. l9 p* j: Q' ~7 U
TR0=0;
S X( X6 S, C9 f5 { h++;: a- G% ~' W* _0 W( J: h c3 L
if(h==24)
) n; @6 ~- X% `9 e8 p/ X- P, V h=0;
/ w( U3 _* G* Y( Y }
+ z5 }' N& G$ `# h( Z- d }7 W+ i4 u& x M* I; K
if(!K4)9 S, j7 t# D; Y- i
{9 U! k$ v4 `- _- F( {5 w: S
TR0=0;
% {: B9 @; q6 O ~- g- C delay();% b. o) `! v# f& L& q3 n8 z
if(!K4)8 d9 [9 j8 H4 ^$ ^
{
7 e) p$ e$ n" m, E' `: a5 I0 H h--; d r- Q/ V+ A8 y( m( L
if(h==0)7 |1 l$ ^ ~' d! L+ I
h=23;
$ G$ L! P, |' g7 o$ L4 z( b }) u0 M: \2 K+ {3 K
}3 o: B" z: l/ q
TR0=1;
- t2 q$ D8 o1 O9 z$ H}: p Z5 |" o" @
; R0 c7 @& A& x1 {/ ]//=============主函数============//' X- l( Q9 w% o2 M' P( c# o
void main(void)
; P- P8 ^0 \" X5 H{
1 O+ W. {5 U5 T7 m$ P' O6 F p) X C TMOD=0x01;
! K8 [! A( S8 T; B1 Q' B3 v EA=1;
8 W7 {# P0 ~, x ET0=1; D T0 r' K- K; I0 |% A1 B# P0 ?
TH0=(65536-46083)/256; //赋初值, ?, S4 e# d7 f& z' K" V
TL0=(65536-46083)%256;
- f, Z4 s" w% m& N TR0=1;
- z( h8 r0 G) u( N) y while(1)' p9 l0 |4 M( `2 p: s* Y( t4 x
{7 r1 _, a" `+ p# p4 g/ B
displaysecond(second);
# ^( l* s4 C3 J) Q* o! E" w5 l3 N delay();7 `3 C6 O! i1 c# l7 S1 f$ P; }9 a/ ?
displayminute(minute);& S% i$ I& G# z; n4 j
delay();
0 T2 x6 N. B. n displayhour(hour);4 W( A" i' }, G5 @2 j8 }$ T
delay();
+ A7 ?1 k: Y- Q7 m* n" @/ ~ }2 ^3 g. ?3 }) S6 D5 }
}
6 z) g: `6 U8 p B! X' C$ f! B/ X//=======定时器中断子函数=================//; }7 u3 J% D8 i& m
void inter0()interrupt 1; o% M2 ~# T2 I
{
! [9 D0 H3 G3 w) [' p/ p! V3 | time++;: T" e# s$ Q% E8 X/ X
if(time==20)9 ]' v, n {1 f6 C0 n
{
: q! ?- w7 z9 F; g0 h& y time=0; N6 S' }& W' d1 O
second++;
5 q. l# Z, E) J6 U7 i3 | C }
- m: O5 ~4 o# d# g if(second==60)
' ]/ l* h0 ?- F+ r {. V7 o: w0 w( m2 e
second =0;
/ ^& r6 s7 B. o: y minute++;
& J F* d" ?( F2 i y }8 f$ e% O! ?" @8 x6 O
if(minute==60)
) V. U. f' }5 ]# @2 a1 Y {
) U! E8 @* [' X+ G minute=0;5 E- I( Z! c% ^ a
hour++;
/ s/ n9 Z9 W; a# h, { J }; a" `, P, d. U; Y- K
if(hour==24)
0 Y3 [9 m9 `' J) D/ ?- i {
, A k4 h- ]* D( ]* `' _$ h, j hour=0;
1 a; ]+ S/ M. c. R3 I }; N6 t, U' E, J( P' u) a6 b
TH0=(65536-46083)/256; //赋初值2 q# v0 b5 R: J: d0 B0 ~5 f, Z
TL0=(65536-46083)%256; ' @ I9 ^: w+ n( Q
} |
|