|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
以下是我写的定时器电子钟程序,按键功能不起作用,哪位帮忙看一下。$ f4 w) g: \" S! F+ i5 b
/***************************************************************************3 z9 b) A$ K$ `6 j% i% n
名称:用定时器定时做时钟: X* U0 Z# M7 m4 C% a2 L( t
内容,自动从00-00-00开始,有按键功能" W p, I6 K F$ q* v" J
芯片型号:STC89C52RC- L/ |; D: C: f( U
功能脚说明: P0为段选脚,P3为位选脚,所有引脚低电平有效.# `0 g* i y0 T: B2 Z( l4 x' g
程序员:玄溪
+ s! C1 ^0 d `9 X" Q1 y, B0 E日期:2012.2.6
- _. z( Z- K3 v9 J0 o! |) I9 i/***************************************************************************/5 h* l" S' g9 [# i* u2 `3 f
#include <reg52.h>+ }+ ^+ w, L, ?' b( I$ {5 L
#define uchar unsigned char
/ \' z. y- x3 W. C#define uint unsigned int
( }9 U) L6 C x( X$ {- k- b6 z. n# V& y* U- P
uchar code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};9 J! K% L4 ]( e9 S$ B6 l% w* E# `; B5 o; D
sbit K1=P1^0; //分+
4 b! T- b, Q$ u, Y" Qsbit K2=P1^1; //分-% _* u9 G7 t. d/ O, _+ N3 u3 R
sbit K3=P1^2; //时+! u/ w! ]. w0 X+ m& L# Z+ b
sbit K4=P1^3; //时-
* }# d, D% E$ W
. g8 }" _5 L o Juchar time; //定义中断时间次数9 n, k5 Z! y' B& w; c4 |/ `$ L' Z
uchar second; //定义秒
# W6 u9 k1 [: B1 n: z% |! Fuchar minute; //定义分
( p' k" k. {. u9 Juchar hour; //定义时
7 A0 L6 C; I0 i' f1 e" f& P//===========延时函数============//1 R8 m5 s( I" j% f
void delay()
L0 o$ T4 z( H9 c. g% J{! p& J! Z# Q, ]: |. T
uchar j;6 r8 A; _9 F. c7 B5 P# l2 V# M
for(j=0;j<200;j++);
2 x& M9 C1 H) o}
( a4 s# m* ~( u/ c- _1 C//=========显示秒函数=======//
, A% M7 G- ]4 g* E% tvoid displaysecond(uchar s) //带返回值( m2 L9 T# }0 H
{
! p, \3 u4 [2 Y i& }; Q P3=0xbf;
; [3 V( G5 V# Z4 o/ n# J t+ z P0=du[s/10];
9 Q" S" [& Y: U& P& P delay();4 F( d/ Q" f2 e- T& |( s
P3=0x7f;
3 i u5 c( s& P! _% }( }& {0 Q b P0=du[s%10];
! f u9 q4 e3 E; x2 ]9 T: m+ V% Y delay();" J. {" `3 o! c6 [
P3=0xff;
o2 L; g( }' ]8 W9 g, c/ r% _3 G if(K2==0)! S/ |( |/ y" d, s9 \* W0 H
{/ \4 V1 d* e2 g; N/ q- A
s++;9 q$ ~/ a$ J! @8 F; O$ ~
if(s==60)
Z2 c; j% N' I9 F( G- E7 f {
" Y2 {6 g0 @9 I s=0;
, U& z6 `4 W Y6 g( ` }
/ N3 }- B/ P3 {# n }8 p; b& S3 \( Q6 H: r
}
0 q" m: K8 H4 j; V) s//========显示分函数=============//
3 Y( E) ~7 p g& N9 `) Gvoid displayminute(uchar m)1 N; t5 U: @$ T
{
3 t- L$ c0 e+ S; f( A! D P3=0xf7;6 |* g p& q l" \$ C+ N
P0=du[m/10];
( |1 [0 J- { z. {& r8 `" ] delay();
6 z7 W/ P u; [" h! } P3=0xef;
( V4 j1 L8 A2 Y! n9 Z P0=du[m%10];
- t/ r6 C" a; u, x" s delay();' R- m( }: {6 j
P3=0xdf;3 t0 | g0 G6 h6 e
P0=0xbf;
8 C5 A/ y9 ]3 V' s; l* j delay();9 I/ b7 K P9 j1 d, G9 `+ g
P3=0xff;3 y: r3 k6 ~+ i: z1 d6 P- c# Q
if(!K1)2 i% H. ?! y( r* v2 `8 E
{
& r9 k6 B' R/ g R& q; y delay(); {" ?3 i4 N1 b1 c9 U- b' x& r
if(!K1)
' O. y1 M9 A9 R& J {
5 ~; b8 |- Q* q% Q; {% g TR0=0;
7 Z5 S9 f$ q1 I/ J m++;2 s5 |7 S: T9 b% R. t
if(m==60)2 U2 D% c6 H9 o" Z6 H3 _
m=0;/ t$ v- e0 Q1 v# n0 ] h: E. [
}0 [4 j7 u! y8 c* n( c" q
}
& e( d, ^. k1 z* l% l if(!K2)
: N1 e) J" s9 h {( V) F* \. |1 L. i9 ^% t
delay();
0 x b' |9 c/ ] if(!K2)/ e; q- y0 _8 ?. g0 J- N" u' s5 S
{% J* S7 j2 M8 n8 |8 A
TR0=0;6 X9 L' G A7 z+ F
m--;
6 d; }0 o% s# m0 D; s' H if(m==0)
3 e' O* _ V/ \ ~. X: M! @! s m=59;
/ S" N0 v8 T1 T+ m9 K$ B/ K }4 p3 P( _5 }" ~) h* E$ ^2 x" O
}
^. M% }2 a7 f- W8 S/ B TR0=1;
% y- f) s9 L& c6 j2 U6 H; G" I) Z}
: x' j# I c, T0 O//========显示时函数==============//
; A5 T9 t% L1 q1 Ivoid displayhour(uchar h). y, P7 D! [1 m3 H: M8 w
{3 V! u( G4 Y N2 y0 g
P3=0xfe;; V' C; m5 L$ A- O, E6 G v
P0=du[h/10];" H/ z& {& G5 M. k6 Z7 g
delay();& h* ~3 t) V9 J$ c. U- ~3 h d- K
P3=0xfd;
( R7 V. a+ T: O: i P0=du[h%10];
3 U; e7 K; \6 ?, u' T delay();
! X4 W" j3 X: [4 U7 ~) D8 S P3=0xfb;
3 ` w; s& j" W$ o! K: x0 M P0=0xbf;
2 i1 g; b) F5 H2 f- V' z delay();7 S1 k8 d. q# s# ^" ?* R* R5 J
P3=0xff;: J0 a% b V; O. m
if(!K3)! {! G' X6 a/ `: M$ x. s) ^
{
: E9 [" ?5 A* L& \* h, w7 n* ` delay();
# w* F. ^) B( v# u7 d4 I" ~; o3 w if(!K3)
% j/ i6 _6 W3 X* I2 a {
E1 H, c$ u' w7 e3 h TR0=0;
; d& Y6 \8 e" {, n h++;. V, i0 M# w% L' q ^
if(h==24)
- R! t0 S: {* Z9 B; X" Z4 G h=0;
* e" _- j4 a( e8 g }
# L% u2 Z, A6 m) R }
; V1 q: _ o6 `- k5 w5 | if(!K4)
/ V( o& J4 x$ R$ d! N/ k E {* i: r l; ?# E3 V2 d ]
TR0=0;$ m6 [4 f) I7 Q; R/ Z
delay();
9 D! A3 P) a2 N" ` if(!K4)3 e) J( n: U* K( R- |
{
0 b8 k e$ `* q/ E! g0 n h--;
/ ~" J3 p2 N, g* o: T if(h==0)4 X/ V) S( m/ u( h, q; g- o
h=23;/ i; k* A) h* t w1 I; T
}8 l/ P9 @2 m2 @/ }0 v
}9 ^+ z5 }, C* ]% ]. d
TR0=1;
b8 S/ f' \- T, q p}
* x& k6 G) g' m) S8 h. i5 Z% y2 } t; c" s- A+ H
//=============主函数============//
: l$ `0 A0 v. ?void main(void)
0 H' w) F4 |9 k+ E6 S- j3 I) O" }3 k{: `" g& R: ~9 i
TMOD=0x01;
4 ~0 J- J: W- j8 V7 g0 w) F/ U EA=1;) R7 _8 {7 }. i/ U, \3 [1 ?; I
ET0=1;- c; A" r& C* Q* y* h7 E, \' J
TH0=(65536-46083)/256; //赋初值
5 C" z9 W/ Z% G TL0=(65536-46083)%256;
0 Y2 J2 R8 c( R/ j/ U TR0=1;7 k+ @# v0 }+ S: J/ O
while(1)/ o% ]" L, b& [4 {3 N; x9 s
{& v' z8 H n f) @. @8 l
displaysecond(second);1 S% g( q+ f2 @7 N
delay();+ x) T5 x# @7 t% x' t$ o/ h
displayminute(minute);' ]1 f( d$ _9 ^ t
delay(); N. D) z; P: R! ]( m3 x5 [
displayhour(hour);
; J9 q K% S$ y0 K delay();' G2 t& A% }% x% y! j" R- v, t
}8 t4 [8 G% W1 } [: A
}
* t7 [& J5 s+ k5 W4 T5 s3 M//=======定时器中断子函数=================//6 j ]3 g- l# B2 i& d
void inter0()interrupt 1, D1 ^: W$ U. F" l ?
{
7 z2 Y1 b6 \& M, B0 j time++;1 y" A( e5 j I J6 r! N) _5 Q
if(time==20)
- `$ g% w+ g* L+ Q {
5 }# ^. I! T# \. H time=0;
1 C& `! z+ _3 B# z9 ~) r second++;
& s6 M) u- p4 X }
& G0 s/ ?, h" o% h A if(second==60)
+ R" v8 ]$ b0 s$ b |: n {
; R7 h0 g& q! C8 G. T second =0;
. d" | n6 [, o6 q3 _/ ^9 Z8 m minute++;! m0 \- \7 z; c* T* J
}
' m# o, ~8 ^! l7 ?- _ if(minute==60)# u+ m$ `6 W* F- W8 e2 w
{
! k# z& z4 m( v9 x minute=0;: ?) [! I* P( w' s1 \
hour++;1 V+ j9 r$ G9 l4 Z2 d
}
% w' d7 w6 {8 G" V+ _ l g: P1 ~1 g/ X if(hour==24)0 x; M" G& l" ]/ F
{
5 a3 g9 r, S# F/ Y5 \ hour=0;
# B8 x5 c9 ~$ {5 p3 j+ @* F$ f c }" P& o9 s! ^) q( R5 b- u) {
TH0=(65536-46083)/256; //赋初值* g4 r9 Z, P; y. e2 L0 q* a
TL0=(65536-46083)%256; 3 b( C4 i) }2 t" {! y9 n6 q
} |
|