|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
以下是我写的定时器电子钟程序,按键功能不起作用,哪位帮忙看一下。
0 Q# _! |( F# H- k' S% w6 ], R/***************************************************************************9 ?- j) E& C$ u5 z
名称:用定时器定时做时钟
5 n4 f5 u1 g8 Q: O6 G" Z! a( @/ ?" G. B内容,自动从00-00-00开始,有按键功能. u* c9 E% v9 o7 F
芯片型号:STC89C52RC5 ]5 J) M! Q; E9 Y+ S$ I! U6 ]
功能脚说明: P0为段选脚,P3为位选脚,所有引脚低电平有效.
# ~ j# P! T B, G3 l3 @7 M程序员:玄溪) {- X3 J7 N" j$ L# W9 M* ^
日期:2012.2.6
6 W( E0 l7 d7 W4 f4 A2 C5 K/***************************************************************************// V) |% c& t5 ?+ v( I
#include <reg52.h>
# T8 x9 D6 _2 E/ F% ^#define uchar unsigned char 2 N. @/ t7 Q2 R/ o" |
#define uint unsigned int$ M2 r, W2 f% [' d( a0 i& W5 @
" \- g- d5 ]6 d. ?' d, Y/ ?" [7 R
uchar code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};/ ]( B& u! ~0 u& H2 Z
sbit K1=P1^0; //分+0 g7 u5 |$ z! m) q
sbit K2=P1^1; //分-
2 ?3 v5 p3 X, ~sbit K3=P1^2; //时+3 @0 H! q3 M/ v8 L( |3 n8 \2 l% V( Z
sbit K4=P1^3; //时-
* S" j/ D o' G8 s+ E; ^" B @& k6 d( E2 h+ F7 m
uchar time; //定义中断时间次数5 z: G+ V! I) E$ m1 o3 C
uchar second; //定义秒
6 ?6 P1 ^ W+ Muchar minute; //定义分0 Q. k4 a+ E0 P2 J6 ?
uchar hour; //定义时& N* c# }* M1 w. G0 M
//===========延时函数============//# Q! v) C6 H! }5 R
void delay()
/ o4 q5 N/ b0 C: Z/ G8 r5 S4 C+ Q{
1 s4 s) W& v0 g: s uchar j;$ Z5 l' i% p1 v; O1 o
for(j=0;j<200;j++);
* B \$ f$ c: N P}
& V8 D$ e: O3 I( F6 J5 a//=========显示秒函数=======//& X$ L. E* c/ B& q
void displaysecond(uchar s) //带返回值
- @/ T8 c) s3 U+ p' R$ h# q) _{9 x! P0 y2 W. \7 d# p
P3=0xbf;8 `6 N; }# Q7 \* D# W* ^+ m/ @
P0=du[s/10];! I8 Y, Z/ x# ?: k' X7 p5 n0 V
delay();
2 D7 y& V% Y: }' I5 i( V P3=0x7f;
$ O; B8 n* n2 Q. L P0=du[s%10];
& x9 W a8 o& X# s: E delay();1 \- U+ l Q; I, Q# l- P' G) F
P3=0xff;
" @( z9 v5 q: t+ I if(K2==0)
& k3 x' ?* a$ Z/ e. l. w9 T {
% ]! @2 d5 O5 F) N s++;6 S1 O% s% W3 |9 j
if(s==60)
. ]' d4 Y( c/ h; I% }5 D {) D9 U' c( g, R
s=0;+ t* ^6 J( e& l: W
}
& |: Y8 F/ H/ v0 O }
5 P2 z" a2 D" |% h8 [0 L}
2 U* p& W9 ], @//========显示分函数=============//+ S- Y$ h8 N( U- N
void displayminute(uchar m)4 _; G) V7 H+ c' `+ U
{6 O# Q0 Z( B# X/ z% w$ ]
P3=0xf7;1 c( E' y7 B, f5 e& m, s" H
P0=du[m/10];; [0 ?4 r: b/ V. j
delay();
: X0 K1 @/ i- W5 b- g' X P3=0xef;/ N! J1 l) x2 W6 q1 j8 O
P0=du[m%10];
( N u# ^, b6 \1 f3 F delay();# I$ T( s; `1 E0 F3 ]
P3=0xdf;
# X' |8 c# y; w- S2 T P0=0xbf;
- B: E4 x( L# m) R C9 j3 k delay();; Z0 u7 i/ |, W. M7 l5 H0 m
P3=0xff;- s- N$ j- r$ d
if(!K1)
/ f% s% o$ Y* s {
/ K0 K" I) t5 h9 A& u delay();' z- L3 \3 T' L, Y: I5 Z8 Z
if(!K1)
4 C8 S% H! `6 g3 t$ R' e {
0 `: y. _% A c' f+ Q2 T$ y TR0=0;
9 V$ P( P' c7 ?( h9 ~ m++;
, | X7 n: t+ K, S if(m==60)+ A( w6 O& k5 g" w0 A1 U9 W
m=0;
% K2 d1 n$ v, O5 ^% X/ G& q; N }
# V% l; I6 K* Q+ R |( e7 F# W }# m0 {" [, r' j! K& n9 g
if(!K2)
9 u* _: {' {( A {& p2 D4 \/ h# e9 P; o
delay();. Q( @6 o- ?9 R0 R P F
if(!K2)4 ]6 f7 g. z9 h: }3 T
{
: u* n; s2 r! x' }3 h$ I TR0=0;0 N( C/ u* S' ]0 b0 I. Y5 Q
m--;3 l, L! c; v( ~' u% B% }8 U% T
if(m==0) Q" C2 L& m8 @4 h' L! _- L% z
m=59;
. ` G8 | l; p2 [! r: {* q6 A }( j' B# r& j) M/ F. ~& ?) o' \
}. A. Q' X$ d- A7 @
TR0=1;
* q' s& F" a+ e# M# t; [/ t) l}* n8 L+ o' ?( m9 D1 A
//========显示时函数==============//; j2 _3 V: R6 Y, p
void displayhour(uchar h)1 ^# |4 g2 q; g9 c* H8 Q% x3 r
{
1 ]* g; Z7 j* o, S' \. j1 j9 U1 M P3=0xfe;
- x% u' g7 P. u; h5 W4 |+ o& F, { P0=du[h/10];
( i' v; q9 b8 L8 U6 V! b: |2 ]/ s delay();) d, F) c6 ]& n$ h
P3=0xfd;
' e, H; w0 M/ |( d! y I P0=du[h%10];" a7 \/ P3 y, k1 t. |
delay();
2 f8 J: `( G6 r( i" u+ |0 G P3=0xfb;
; d N R* L2 N' | P0=0xbf;8 ~: F, e% k$ I) q6 }
delay();+ r" t) I4 i4 a6 E& ?6 r3 Y ~
P3=0xff;$ W& H: s8 z+ J4 H" `0 a4 v- v0 j
if(!K3)" i k; A* A& a& Q5 L _, D+ @
{1 S9 z: E: O+ Z3 a
delay();
) W+ l' m" l2 E o if(!K3): w% P0 [3 Q0 ?2 I9 {) Z7 m
{! k$ B& l2 k* H
TR0=0; U0 X1 C q" z" b
h++;
3 B3 G5 u4 Z( [& [$ J. @7 C' S0 b if(h==24)! y( ~# f) K6 [3 |4 g
h=0;1 Z/ F6 Z! J' q2 {$ c: ^
}& I$ u2 w0 t% @! W, Z7 y+ U( w
}
& {! n9 m: {9 f% j0 f if(!K4)
+ p4 c5 y5 F1 c) v {
' }0 A' }$ _3 ]6 G, z" b TR0=0;
( d+ p7 f# A. s2 W% W7 P& y' P delay();
- T1 _, Z9 f3 f! p' j# |. V6 J if(!K4)
5 Q& D+ f9 G# v {8 x* [# h6 x2 `* m2 n! \7 `0 m$ j6 K* I
h--;8 r, f% ^, v- a, I
if(h==0)
1 T% }& W+ z3 P; f% I/ F. G0 T h=23;
( `# @( o0 v( p9 q- n2 J }
: F5 O& F2 r$ y* s l8 s }
: D6 K: k: \' X3 O TR0=1;* T$ d r9 _9 ]) C
}
# q6 { ]6 m% D3 U
4 T* A1 W9 ]! ]0 X//=============主函数============//
0 J0 m4 q6 }! B! m) Yvoid main(void)
) f, E0 c" M l, m5 d8 K{
- l1 }/ ~: V+ V5 c: l TMOD=0x01; ?8 X& B# f! U
EA=1;& k0 B5 v. j2 V$ M# T n
ET0=1;! P; Y, z; E. m( A, @2 T: j5 C
TH0=(65536-46083)/256; //赋初值
( b0 B+ h6 C" w1 {% r s TL0=(65536-46083)%256;
- Q; l. F8 V" |6 n# d: l TR0=1;
# Y/ }" B* G: J" a- N$ [ while(1)
o5 S! R$ e( D) T$ d {2 c' L, _; S5 @7 m9 C |+ c
displaysecond(second);+ V3 H2 m* ~' ]9 z
delay();4 \+ b* X! f6 |# y
displayminute(minute);, v' ^# U, V! d& b* X
delay();
$ D" a" A' b9 m* o displayhour(hour);
2 L2 o! E. K& j: W0 w. y- M4 H0 [ delay();
# a/ R3 L5 e8 H1 L& j9 ` }; n( G6 W/ v0 k5 G4 j% `
}, D# |8 W: v/ \+ v& I9 c, ^
//=======定时器中断子函数=================//, @& P k% t+ A$ l, W! q( V
void inter0()interrupt 1* `0 L* {* ]# d+ R
{
2 N/ r, {' s4 h+ P time++;2 V9 a; i, k- P% N2 y2 C( ^
if(time==20)4 s, l; Q3 h5 X& D& G/ q$ |% h
{$ [+ @( O# v0 |: Q b6 {) v
time=0;% A) }4 T e& o# B- W; o) Z. q) _
second++;
$ u; i/ R" @" d% r) z/ `* A/ ~ }& D6 S+ g& \! H8 B: Z5 f
if(second==60)
6 l. C0 d \" E% K) [ {
! e; q* F4 `- J second =0;& E6 E% ~" t+ `2 h& U* [
minute++;5 _2 A( O. E! W
}
% R7 B# f' C" g) i if(minute==60); S# C) J& n1 S& W' x* S @0 L
{# k4 N8 M, ]/ a) Y7 p( t) `- E+ \0 Y
minute=0;
! ~: A8 d+ v' U% Z hour++;
3 E5 W& e+ s2 r }
: Y8 G0 O4 e( P( s( B& O if(hour==24)
- m8 ~1 D" `) o& j9 V {
$ v3 q: h6 V P$ T- n( }8 r, ~3 P6 X hour=0;/ }- @. v0 ]$ |$ m7 o
}
- w8 ^ J$ C, Z" X& E: d* ] TH0=(65536-46083)/256; //赋初值( h5 r/ _( X/ o1 X: G. J
TL0=(65536-46083)%256; # ?7 [9 o* n. W
} |
|