|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
以下是我写的定时器电子钟程序,按键功能不起作用,哪位帮忙看一下。
( e p5 n% a: U6 Q/***************************************************************************
: U) b7 R1 o& W) t% Y名称:用定时器定时做时钟
/ | M/ r" O. [1 ]& p8 H$ R内容,自动从00-00-00开始,有按键功能
! g' R! @2 x/ W! _0 _* G芯片型号:STC89C52RC: p9 N3 b; r3 B8 p3 q
功能脚说明: P0为段选脚,P3为位选脚,所有引脚低电平有效.7 K6 V& o* u0 z8 G Y# H/ ~; E
程序员:玄溪
# Z+ b2 d+ Q& w% e日期:2012.2.6
$ i2 k* A5 O0 [ ?- N, ^, n9 ?/***************************************************************************/6 _- l. J7 ?3 L: n$ N
#include <reg52.h>8 U; X) y# z% S
#define uchar unsigned char / R' z* U+ r9 J) }
#define uint unsigned int
9 Z" E& a3 G: L. d5 ^7 s Q: o7 s# y: F) l. m, t
uchar code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};0 Z, B3 K$ w! V O) ^" k) J
sbit K1=P1^0; //分+
- _( I! V9 d5 S$ Y( W8 zsbit K2=P1^1; //分-
5 J" s, L$ r3 x, n5 E' Csbit K3=P1^2; //时+
$ o3 N3 i% e' ~- Asbit K4=P1^3; //时-
! [+ J0 v- C: w Z/ h8 F
- s$ J0 s" y& w6 y' puchar time; //定义中断时间次数5 H$ F$ ^- I3 |* E. G" t# q, R
uchar second; //定义秒& z/ t6 a. v: t
uchar minute; //定义分
' n0 r) y4 d& V: a5 n1 V. Juchar hour; //定义时# R" X$ Z( |5 i
//===========延时函数============//
0 p5 Y' ]' K; W% G2 }- ^void delay()
+ H6 I/ P& }+ y* p$ Q* N+ c{
& {. T' G: A9 t+ V% z* v! o uchar j;
4 }9 `# I" P4 m. s$ ?8 |) X' q0 o for(j=0;j<200;j++);
" m1 |9 ~: R+ S9 t1 W0 o3 a, r}( J @( R: z' g& h. g, j& v
//=========显示秒函数=======//
# {5 `/ K" p! i* y& y" }: E4 p4 ?' {void displaysecond(uchar s) //带返回值& a- b! B X& Y# B: B9 k3 C
{# u% m, ~/ o) Q, t
P3=0xbf;
# ]6 W: h0 T( F: @3 @+ w6 A P0=du[s/10];) T, h- E! M* R! y/ o
delay();0 W& G- t' t! h
P3=0x7f;
" s# N1 m, V7 @. [& k P0=du[s%10];
+ _8 x. ~: V# I& _$ c# N+ L# a7 M delay();
/ H9 x% Q+ a2 T D P3=0xff;7 c) i" \6 Z2 ~1 \# l/ V4 G
if(K2==0)9 C5 Z% t0 m" P9 |9 D4 K
{
! r. w- {: r5 T; T2 E' s+ N5 Z s++;& x+ u) b5 v" X( I2 \- n
if(s==60)1 O S' A5 @1 p! }0 x
{1 J/ k( R/ _) H& V- M8 i1 q
s=0;# k. I! }" G: y
}
2 s. k! _. y1 P3 Y }# h: t/ c1 G/ C% A! j' V/ O
}
# h, F P, w$ B- x6 A& l: a//========显示分函数=============//5 n! @: V6 H# i* h! f( O
void displayminute(uchar m)/ F4 H" Q0 D2 [! ]" P0 n( t' j2 x
{3 K( M; x: h! @9 r
P3=0xf7;4 S! v! e, {9 T$ G4 |& k+ c- g, y
P0=du[m/10];. ^. b) t+ Q6 n: @: i a; p% s
delay();) M2 E& @6 R: q0 p. v6 S7 f
P3=0xef;" E8 J3 D. R% u: L/ @
P0=du[m%10];
% W- y- ^0 \, c6 ]% x3 ? delay(); T3 B# ?# d3 T* w
P3=0xdf;
9 ?- L3 L' |% A# g. m P0=0xbf;5 o! H( y3 j: L0 l% D/ R3 o
delay();
# B0 a( h- [! \) D' W F P3=0xff;
3 b" J; C3 f% I- B if(!K1)4 _" I* v K N
{7 ?- A3 g( O% I8 |7 }7 [; |
delay();
5 W, P* l: }! W8 Z) }9 [ if(!K1)
- G8 k( I5 n3 ^8 ?/ ?" ~1 {+ a {
/ g1 E0 n; x h) [6 u) h. o TR0=0;; G4 s& G% U7 j. m2 w) n h
m++;& W+ S' P- |! z4 J4 E. `
if(m==60)
; f e. o! e- B m=0;
\0 A# K! ?8 A% { k8 T% _6 i$ s }6 a9 c3 z: b6 U" ?7 Z* P$ d, c b
}
. m- ^ ^. Z8 ]9 M" H+ p; | if(!K2)3 {: Z5 @, \7 |( Q. \6 R
{( K _" ?' c% I1 s* Z
delay();* ]/ u3 l# ~5 n% n
if(!K2)+ Z' |6 K/ f9 g( q( l
{' ]# d# @5 b9 n# S% D6 U9 R
TR0=0;9 ~* n% C+ E% N( ~: X
m--;/ ~; t" [8 b p/ Y* |' b
if(m==0)
( E" L9 X8 _ ^$ p2 l, l# [+ l m=59;
" V* `1 y2 t7 O! d8 @ }
- X8 K- G0 ]7 U# Q& b }- I3 R J# r/ x% G2 c" @
TR0=1;
) t0 t s! l4 a& s& {6 O( e}- u6 n% d* X8 ]; U+ Y/ ^6 j, L
//========显示时函数==============//
) w8 z9 l3 Q* Q+ @! @" K+ Lvoid displayhour(uchar h)
( F. g8 P" x5 P{
: M9 l' Y2 a& [% g3 b! B' e5 {* { P3=0xfe;8 i: Z/ M- \* b
P0=du[h/10];" A6 m0 N6 N: R6 v) ~; F
delay();
3 k% F) s2 E, i P3=0xfd;5 B, d# p; ^; [- q
P0=du[h%10];
3 a! j( `: k6 m, f$ N3 g delay();
, _( q }2 b R0 [+ N! M P3=0xfb;
e, u E- z. g5 Q% e P0=0xbf;6 o- A/ g8 f1 `% z- S; M
delay();
& u& p6 C4 ?, Q3 ] P3=0xff;
8 o8 a8 E- q% L& G7 ~, m1 p if(!K3)
+ k: V- ]3 ?' E7 D {/ _8 w3 w0 j$ g' C7 D9 t
delay();
' b( d% A& x* \1 O8 H8 F3 V if(!K3)+ [0 I/ L- l a2 i$ g
{
; J8 r2 f" f$ F6 z1 a& S TR0=0;2 a: y! v' J6 H; E5 Y9 f; h
h++;
4 y* ?) J; u* m, b if(h==24)
) C$ ~- k. P m$ o, M; l$ ]$ { h=0;
: e0 b# K, A+ i. v# C }
2 {5 D* [& _7 n' V; k }
% q* _( N! Z$ P( G+ r; E if(!K4)
8 k( u! C8 r8 ~ {
9 e- G) L; t0 U- R TR0=0;
3 g o) C) |) v8 l) _1 ~ delay();( ?+ L2 t2 c% m; W& m3 v
if(!K4)3 ]3 J9 P$ B( @9 n* D
{" Z/ T' ?& q" b; t* L& a7 P
h--;% o& T. d; x% Z2 ^8 Y
if(h==0)) n* w: C8 l3 a1 X" g
h=23;
4 }; n/ o( v+ F5 n2 J }, b3 ?2 L2 V, Y8 L i
}
! ?- h9 L. m$ }' B: d TR0=1;
, s; P, C! T2 z, j}, `- L5 j% p4 T* j0 Z
: ~8 m+ v( ~! o9 c+ d% e+ |//=============主函数============//
" ]$ Y0 q* P. g7 jvoid main(void)5 q5 ]" h2 P, p. L- f* b- e9 i
{
: Q" t8 _+ T* U% ` TMOD=0x01;
5 g/ C8 x1 h3 \( f EA=1;/ l& P. t( f" a, r5 [: ?
ET0=1;
8 n, g: Y/ Y; \ TH0=(65536-46083)/256; //赋初值3 K# V: |2 a; K8 A! ?- }' n
TL0=(65536-46083)%256;
& e! @) h) t( M4 O TR0=1;
0 h7 Q" U' Y1 i3 M. d while(1)
& k9 x6 t5 E& x( g- x {
7 j- v6 o# Q% N' A displaysecond(second);0 `# [8 ?( P% o9 o4 [9 n1 d
delay();
8 ]" d5 Y- |! a8 }5 D T# a5 G& O displayminute(minute);
; O C% x6 H3 ?( ~1 I. l delay();" o" t! z9 U- ~0 i- g, f
displayhour(hour);
3 R. A+ y, S8 k. M5 u4 @ delay();
) I+ ]8 W: v6 i; s) V }
: w# S0 |5 ^ X# L y3 s}
$ @" b& s7 c! _* J n- b//=======定时器中断子函数=================//
' B3 V! L' W( P: @void inter0()interrupt 1
+ U/ [- U8 N: h: g{
+ l n U+ ~( N5 T+ B, W time++;
+ O2 o* h( W9 n4 f v if(time==20)
- y, a! q% _: i {
4 V( B# ]/ n$ p# E" H4 [ time=0;* i9 b" Z! b' t
second++;
. j! L0 | m- h, L }) G2 v, F) G# m( H$ ?
if(second==60)
2 X s/ m$ ?$ I! s" ]+ } {! O) a2 C7 L2 w; o) m: i( H
second =0;/ G" t& c' g! p
minute++; n2 G! w& `1 t7 ] J
}: ]9 k" U) i6 i
if(minute==60)+ v: {7 m6 C& Y* i
{! b5 X( W/ h' ` _2 B
minute=0;6 r* S% o3 l2 H# m& C: _ U% Y
hour++;- o0 m0 h; L% T; z0 A/ |
}
3 v/ j# D1 o0 D; { if(hour==24)- u' j" g% ]2 S. ?- V! I8 c, q* R; V4 T
{( e0 z) N6 r, C6 `; e0 O
hour=0;
* N& u; q5 P) Y( m4 D& B }
/ r: M4 W! {' z, Q6 m' Q& x TH0=(65536-46083)/256; //赋初值
1 @ t# U7 ]4 \ c3 h TL0=(65536-46083)%256; 0 n: `* ^3 t( V w3 i3 P( x( q
} |
|