|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
以下是我写的定时器电子钟程序,按键功能不起作用,哪位帮忙看一下。
7 h, B) J0 o! k7 k1 O3 d& ]# F/***************************************************************************7 T8 a0 l6 w& S$ K& Y
名称:用定时器定时做时钟
0 H' u) ]3 }$ A内容,自动从00-00-00开始,有按键功能
) Y8 m4 v# ~+ i, f芯片型号:STC89C52RC1 a' d9 `9 {8 f3 ~# c2 b
功能脚说明: P0为段选脚,P3为位选脚,所有引脚低电平有效.
* f$ D" K/ f& n) X* Y( i. x程序员:玄溪3 H! R3 P: R! q! v5 V+ T$ p; A a
日期:2012.2.6" w. c+ g, k) L6 I* n( [+ a7 ]5 @: G
/***************************************************************************/
* [6 Q& i+ D$ F#include <reg52.h>
; X$ R% {1 K9 t6 v! C3 p: l#define uchar unsigned char ( w# e1 ^: Q4 }% c( w
#define uint unsigned int
; I( j2 J0 } d) K: v) b* q* j# f( I: e* s
uchar code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};0 h& Z- Z7 O1 h/ ?" `) |( I- q
sbit K1=P1^0; //分+
2 ^" s: m7 I+ h0 Q# g) S, z$ s- Osbit K2=P1^1; //分-, Y. A1 u: x0 M+ C. o; S, ^
sbit K3=P1^2; //时+* M& p3 d3 E1 T: i
sbit K4=P1^3; //时- E: W: D* g% H, `$ O; R
) y2 z$ s0 M. a4 D7 C" |# Kuchar time; //定义中断时间次数+ q8 L, s7 a7 `+ }1 q
uchar second; //定义秒
) X& f! q) P3 v% P# |+ ~/ G( s' Cuchar minute; //定义分
/ a! |! {9 q8 vuchar hour; //定义时2 f; t' ]3 Y. o
//===========延时函数============//; m& H& U- y+ [7 R
void delay()) Z! E, n8 ^$ P- ]% n8 ~$ C8 L# _
{
$ }: v7 o6 [7 d* v uchar j;
% c4 }! W& D/ m3 E0 S for(j=0;j<200;j++);# d4 g7 e# E" O
}
( e) G- ?4 N$ r8 U, ?9 v* j//=========显示秒函数=======//
& v- H- K$ j( y" l4 v$ Qvoid displaysecond(uchar s) //带返回值+ j" X9 P5 K1 k
{
Z* L% V5 s" B: Y% p1 ^* V8 ` P3=0xbf;
! h% K2 O+ u* b- ?8 ~3 C P0=du[s/10];$ @$ b1 R& ~5 G# H/ Q
delay();
{5 p& `$ a+ _7 L. I' p P3=0x7f; F7 C: ?1 c. A* N: _
P0=du[s%10];9 U3 m8 `, w2 b+ e( q- G$ `/ ]/ U* Q
delay();. _" q6 I; I, m% K5 ]1 d3 s2 v
P3=0xff;
6 s4 ?* J! ]7 o. ~ if(K2==0)) ^' f: Y: y- S# E% [; h$ k Z
{5 s$ Z% j2 Y' m, [ o, v, _
s++;7 a, `9 G! m% p( j, }- s
if(s==60)
$ N0 r2 z' ]# q( D, a$ t/ e3 s {
! r* T8 J0 Q% k! s. {' K( h s=0;; f) a* t$ v5 ~% g, N M/ A
}
9 [4 T3 x% u8 K1 S5 B) F0 N2 Y }$ h d0 } j8 F( v5 s( G
}
1 N& f _1 \( ?- o- ?% s2 @//========显示分函数=============//
: Y3 q% u& y' Q- e. hvoid displayminute(uchar m)
1 j& ?+ c" p* z9 a: h{: V" f& E3 V8 x) R* j, U
P3=0xf7;" e) f" K; |0 }# o5 V
P0=du[m/10];
$ C' c. f' C% P m4 U delay();
+ ~. T0 F5 C/ y1 n y, X P3=0xef;/ }' l3 ]- Q! g% q$ f
P0=du[m%10];9 d/ ~% d& s/ Z7 J+ K) H) q
delay();
* o2 ]1 }6 [- T* k& ]: J P3=0xdf;' g% h" [. ]% d* \
P0=0xbf;# ^) y8 E" v$ X/ b9 ~1 E0 `
delay();
7 \/ a$ z# r2 a P3=0xff;" T+ T# s" J3 {4 X2 T( T& ^3 h
if(!K1)1 s( p: q2 l% D2 l! t1 J1 v
{1 c* M8 ]/ w) S8 a1 H
delay();
1 j' ]* H) i. o7 e* | if(!K1)
7 U# h$ S, t9 O, H' o" r {
; |( b3 s1 ^. x TR0=0;
. b% E7 k6 E3 d m++;1 |$ T0 `) \& L) i1 j. @
if(m==60)
( v( \/ P& U+ }( ^9 M) A3 V m=0;
' `7 F$ y) G v- t+ g( T9 y }
* T, g2 W: H0 H }( R; v4 f( S! p, @5 i! f% e" }
if(!K2)' u s) V: d. T/ t) i; e
{9 z$ X: g' A V! o9 s! y
delay();
4 K% t8 O0 X" K1 K: Z) n1 Y0 N if(!K2)1 j, u# a% n" a+ m9 P! P- a7 K! L; }' E
{- J) R4 b- u& `- T
TR0=0;
- d8 R7 z/ D' A% { m--;! D6 N6 R+ g" }5 A
if(m==0) A8 u1 Z G5 D$ |; I
m=59;
& s& C( a( u& w }* q/ k( y Y; b- ?0 h
}$ Z# h- C0 V, x; w" [' \) f
TR0=1;
9 p4 Z2 P; a# Y( F4 Q$ Y' S- {}
3 a7 l" ]6 N; A7 i1 b6 r; A$ t$ D, \//========显示时函数==============//6 @/ B' K( E. D: w
void displayhour(uchar h)
0 f+ z7 F4 K" d2 h( h$ Z8 F{
8 o- Q1 R8 I. {" l% A P3=0xfe;
5 c6 I0 e( [% n8 u P0=du[h/10];
3 z" j* D8 Y1 W& T2 Q3 J delay();( k2 Y- q: }$ {& {! S
P3=0xfd;
6 ~, D# }2 D9 r) @ P0=du[h%10];2 M% ?; }7 [( H0 r# s7 b
delay();
4 E5 H& E: Y( i P3=0xfb;
4 y- j3 P; p! S P0=0xbf;
2 x, B/ N5 y$ m E$ a5 a! o delay();
2 D9 l, Z6 H7 S' A P3=0xff;4 \, J$ R: f' F% B
if(!K3)
j( g V) C5 V, t& k& g1 c/ C {
- ?) T( O! f3 ~- _. } H" g delay();8 m0 M% \/ C9 I' C- \6 P0 G
if(!K3)$ T4 ]+ q) V6 x$ _
{8 E' X( w0 W/ P1 Y2 ~7 Q- O
TR0=0;2 P0 S I }1 Y. \
h++;
3 f0 E8 o* h. L: ^ if(h==24)
5 g& B9 k# P# [ h=0;
: D4 |0 d+ o: x* r6 |9 j }
* \5 a7 |! S/ `5 W" h }0 B! T% Y# h! p+ r" i3 p3 t, l6 z
if(!K4)
4 D1 A, V" ?, E# i9 i+ T {
* h) R& [, t8 F2 d* q$ q TR0=0;
9 {8 i$ M \- O% H delay();) L. L: L. d$ K- r. K# m
if(!K4). O; l% M9 k F# C
{
u# ^: c, e$ A4 k$ n9 x h--;! ]" r" }) o5 @- k: g `
if(h==0)
2 | h1 ?. N" o& ^ h=23;
c! S/ B- L1 C$ m/ m$ `6 A }3 h0 G3 c9 f4 Z, K: R
}/ |, j' ]3 S2 l! I' k
TR0=1;/ C+ @$ k5 K, T/ N' N
}
/ L4 t1 d( F& y9 P2 g
7 o/ V7 M7 m6 S+ u//=============主函数============//
8 |6 d' o, P6 J5 `; b: W7 Avoid main(void)1 }4 ^* n' M5 _- J4 J
{
/ i: j f' j4 W! L0 k3 A x( E TMOD=0x01;
7 z# V2 o- n" ~% W( N2 s0 N( u EA=1;
' _) J2 Z( k2 z# o ET0=1;" p; {$ K% F6 L! h8 u6 t# h8 G. Z
TH0=(65536-46083)/256; //赋初值
2 W9 F1 ?' S }( r! Z TL0=(65536-46083)%256;
1 e$ K W3 r9 N; { TR0=1;
; C$ G# c( X: h' Z/ ]* o- Z while(1)" a3 Z' m/ E U6 g9 m- l1 g0 `
{
6 |& t+ H# v8 i: T' E5 q: K0 y+ a+ O displaysecond(second);7 i2 y/ C, g* q* O6 ]4 n0 u6 M& C8 Y
delay();
" @/ V U7 \# b ?9 d% f: ]5 ^ displayminute(minute);
6 g3 z' `. Q" o3 d8 E9 o* o delay();
3 @7 d% Y( e* I* J displayhour(hour);
/ |& U `& \% Q% S/ j delay();: h' \8 ?1 j6 S; k$ ?
}
" B, a0 b4 Y4 {. r1 p( R+ H}
0 V( _! L6 E6 ?# w3 } N, u//=======定时器中断子函数=================//
) g- C8 h1 \$ I+ W, [6 Cvoid inter0()interrupt 1+ j; j$ w" w6 J" R6 R9 R c
{
6 e0 J) |, A: f3 M' y time++;
6 f* l& g, y9 P n' N3 ` if(time==20)" e3 h: _7 d2 R
{" x$ O$ W- ]$ S% v2 |
time=0;
- U4 E2 ^& _1 J' w8 O# T- n5 A second++;
! C- X6 Q) z: [& @ }
]+ c% J8 `1 T2 j if(second==60)7 L/ o6 k! ~$ S8 @- ?( G! H) w
{4 u' G9 |; ]: E5 h, U) _5 E
second =0;
1 g% C: Z" E1 f, V( o3 F t5 K minute++;- V! V2 L6 U5 K5 @
}: B6 p& u2 c: A
if(minute==60)
0 ~+ ^# B |1 {2 C9 A3 @ {
) F i7 X+ S' A% S% k minute=0;) m. C/ D0 l/ ]6 l; Q
hour++;
/ k( y1 j! I( e, B3 o }: W2 D' @9 w1 |% c& {7 k4 o4 \
if(hour==24)% Z U9 T9 Y: K4 V& D( p: c
{* R1 \1 f+ R% Y* i$ w9 a
hour=0;' c Y' j/ r6 h2 ~
}
8 W" ]! G+ C0 c6 L TH0=(65536-46083)/256; //赋初值
6 _5 F. ]5 X0 X0 _0 [ TL0=(65536-46083)%256;
0 B8 P- \0 Q5 [/ l} |
|