|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
以下是我写的定时器电子钟程序,按键功能不起作用,哪位帮忙看一下。% d' ]; \, N/ B* z9 o
/***************************************************************************
3 R/ k, F7 h4 t i& s4 Q: k名称:用定时器定时做时钟
9 `/ |0 m7 z+ H/ G1 }$ x1 J$ A内容,自动从00-00-00开始,有按键功能
: O! k4 G6 N- @6 a: l& {芯片型号:STC89C52RC1 f2 f+ g5 D# P% [, j, T; V
功能脚说明: P0为段选脚,P3为位选脚,所有引脚低电平有效.) y- L: J4 q- `9 O; i$ R9 M) ^ m: C
程序员:玄溪& U' H" ~+ ~9 r0 {0 a2 ~0 J" |
日期:2012.2.6( d2 i% B/ T% M5 B1 K9 `
/***************************************************************************/" n4 c8 ~) u; q
#include <reg52.h>
# H% U# Q$ {7 L/ m9 T#define uchar unsigned char * B9 G! e4 }* p; Y: b# R3 m
#define uint unsigned int
+ x T Z: w7 r7 m* Q, b0 C. n
: F0 k, M6 Q) ]/ r, Zuchar code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};7 _4 R, |9 C& [1 K3 }
sbit K1=P1^0; //分+: ?! Y) r1 G1 L3 k: O
sbit K2=P1^1; //分-
0 N* w1 ?7 I" Z2 u3 Ysbit K3=P1^2; //时+& W% q8 F) X4 [6 s9 |2 K& A
sbit K4=P1^3; //时-' g6 d. {/ {* o1 i) X( \, J" ]
+ l. t$ Z- ]+ s2 {9 y
uchar time; //定义中断时间次数
( D3 |1 n/ J' duchar second; //定义秒
: j5 ?5 l" Z; Y, Z/ J& _5 r, M1 ^. U' _uchar minute; //定义分& T$ H% S* w3 w; v) S- e5 a' h8 c
uchar hour; //定义时
2 n; J; q1 _3 J+ t# n//===========延时函数============//
; u; ]* I+ G* y9 v. [void delay()
7 q( e* v& ^$ C8 q: \8 C$ y: o$ n{
4 j2 \ x4 s) d+ P. Q6 l# @ uchar j;5 K1 ]' U+ [; f& J9 Q2 W# k1 E
for(j=0;j<200;j++);; |% v9 }% a9 h1 D0 [% F! m
}
9 h# P w" a, {& p( P9 w//=========显示秒函数=======//
( j' l* l( E9 X5 z6 E" a! |, [void displaysecond(uchar s) //带返回值
/ T* D/ n+ I( J" a- V{, H* N: E' [) P; H
P3=0xbf;. ~3 N$ U w1 w* Z) W0 x0 G7 x2 f
P0=du[s/10];5 w0 h: c, @6 V$ T W2 f" B, J7 v% [
delay();
, w7 j5 M p$ K- }8 V, ~ P3=0x7f;
; M, z+ A3 A/ f* A$ ]3 j P0=du[s%10];7 d0 j* w9 H6 B3 I- f0 G% a1 a" }
delay();& i) h0 U \6 C& Q2 P
P3=0xff;$ X; }5 N* Z4 G% x8 b3 m2 v" H
if(K2==0)3 `! |8 X( L' C/ s x% W
{
9 J0 _7 a; H% x/ O+ d s++;% L3 M% E. [! C7 e4 b6 i+ _4 \. [! m
if(s==60)
% \0 W, C ? w$ O s/ Y, H {7 m2 P8 s) K6 z9 V* x& p5 Y- n/ r# E
s=0;
: t# V' O6 U( G; v/ P4 l: w0 | }
, ]! Q* m" z7 P5 V# d, W, G }1 L' _; U" C( q, c1 H" m
}2 s, m5 u( Z& g
//========显示分函数=============// i y! O( d1 S. Q) r
void displayminute(uchar m)! H! I" v m# M% \6 p4 l
{
1 g- R/ ?6 q( Y P3=0xf7;
3 H+ a) L* }8 G" R* F! y8 X4 x( J P0=du[m/10];
$ N1 B+ Q/ R: f; \0 T" r* ?- F/ F3 r) ^ delay();/ K% y9 ]' H, g9 I' g9 q
P3=0xef;( m- a* D" m% t2 G. u+ n' D
P0=du[m%10];$ Z: O, c1 @% d- S; t' b8 n
delay();. U9 ~) _$ Q4 F4 T$ g1 Q, E
P3=0xdf;" f# `# m7 ~ P( t2 ?# A
P0=0xbf;
5 R) ]; N+ U1 W0 f7 o- R2 d delay();
% s" S# q* p! o& ^, d P3=0xff;
. l b5 n7 v: z9 m( w+ q if(!K1)
, r' D5 V0 U; Q/ \& f2 { X9 X {/ x) U6 d3 k* ?
delay();
$ ?4 i n+ N# u1 G7 Q3 u: \* v( x if(!K1)
- O7 M5 k; ~+ [2 Q. |" L {
* ?2 X. T1 ~2 P- p/ Z TR0=0;7 X1 t) u5 d' m$ h7 L/ q8 H5 @) R
m++;9 I- [6 E" B/ ?& y
if(m==60). i1 L! r- D. j( e" K9 u) n$ {
m=0;
; |" O3 n8 D, e- o* j' D' _ }! w# F- H! g5 G$ G* u, Y' _8 D# a
}1 \) J7 o7 H' W8 F
if(!K2)
& r/ v2 F0 a9 ~& |) z! j {/ I* \* ~/ o1 {' ~* n
delay();
- S1 S C2 W7 g/ O& \ if(!K2)5 U/ H2 U% Q9 D; q( Z
{" c n1 T* S% o, U
TR0=0;( B: w8 ?; N1 |% W' g$ t
m--;, L0 X) o, @# X
if(m==0)5 P- Z; W4 n' h; T2 ]' v1 u
m=59;4 T/ U# R# K `8 _! N% U0 L7 C
}
& l. k2 p. H' B( v }$ c' t$ X, c/ _$ Z# E8 X! f
TR0=1;
% `7 ]9 T; s7 |# [$ X}4 O% A& I5 Z0 Q) t, @2 Y
//========显示时函数==============//
( Y( N$ L6 ?& @+ Y. Qvoid displayhour(uchar h)
; g: Z* d/ J. L/ s$ a3 `{
4 z+ U7 z' l4 }8 C- A3 M P3=0xfe;4 N0 s% }8 q0 n. `, m+ A
P0=du[h/10];
6 \; }3 Y$ y9 }+ l# j delay();. `2 `) Z# `4 X) y
P3=0xfd;
' t1 O7 |' } A; g6 t P0=du[h%10];9 q* U5 b3 x* [- o9 t% n1 r2 N# F
delay();1 A7 D8 E N7 ~; E- A2 k y5 @
P3=0xfb;0 `4 X2 E7 x q% L
P0=0xbf;0 y- O3 ~( a( U+ R. W: O
delay();9 q; G; e5 `1 `8 E4 {
P3=0xff;" B* d- R+ F1 d6 f
if(!K3)7 n5 A. k3 Q% m: M$ r: W
{6 y" D( I+ e+ x0 t' Q: G% l
delay();
6 V! b/ G+ v. A! `2 i; |4 v if(!K3)
* x! {! c6 E5 Q) O* k {
# ?6 S% G' }) ]- n! \: ^ TR0=0;
# @9 n* H: F- W: L h++;
6 Q# l. G$ k3 h. u if(h==24)
- c- Z ?3 c3 g% S h=0;2 a0 p9 f; H a! s+ T% D4 ~
}: a4 W/ T3 P Q" k# a# _
}
, i; b4 M* } z/ z+ V' k0 w5 W if(!K4)3 i j1 m; x) }' X0 `
{
" h; g( K( Y* ~* @ TR0=0;
6 {, R* e1 _% b4 p9 I2 W" S delay();
: z8 s- r3 G. b: [4 [# ]5 ] if(!K4)
% A& o3 e! U: |8 x& |2 a {0 q/ D& a U/ y/ n% F6 {( g5 Q
h--;
' q5 I$ F X) V4 U/ v% c! U if(h==0)
0 w( N4 U# z! }' F' w! S h=23;
" {% [4 Q0 e% k& v0 Z' V, { }
/ e2 b" o2 q2 g% s3 g# y) U5 g! h }$ K/ v0 t- L8 M
TR0=1;/ q9 x0 }, d. @$ y' `5 q
}
4 h# a. Y0 T: c$ e* U" k0 P: i) p: A8 n6 `
//=============主函数============// l' y# ? g6 a+ t- i) Q6 f' N
void main(void)* f& P' V# V8 f3 z0 k; }
{
& M5 N4 S6 |6 c X2 ^! q1 l6 [ TMOD=0x01;
6 R; F% A/ h+ {3 B4 Z EA=1;: k9 z! n1 y& v& i+ b+ C
ET0=1;
[5 T$ P. z' c5 |7 F TH0=(65536-46083)/256; //赋初值1 a9 x" \" O6 S3 Y
TL0=(65536-46083)%256; * I' ] M/ c* u! y# s: x$ P8 O
TR0=1;5 E. `+ W) C7 @- g- t5 _' f
while(1)
. {8 @( Y: M' p* p6 O {
6 b) j- Z5 }- @/ `$ u displaysecond(second);' ^. A$ `' v3 g' \
delay();
' h+ f, B. d7 f3 n displayminute(minute);
3 s2 G2 U# L& @4 V3 V delay();
6 m9 `5 N0 C1 s4 b$ X% u displayhour(hour);
4 m4 }% e9 E1 w1 |: W delay();
' Y: k9 R5 I2 S( ~& a) P$ b }$ c, c' s9 \2 @$ }( `; G! j" _
}
+ h3 C# E+ W- Z# p( J//=======定时器中断子函数=================//
+ j8 ]! `, L+ lvoid inter0()interrupt 1) C6 j c% i7 b/ v/ ]! d# P- ? L4 J
{
7 \, u' [0 q- y& a) J; X) U a time++;
. D7 \4 ]% V( ~- ?3 x6 h if(time==20)
! | ^$ c9 U' }4 `$ E6 E {$ ~( Q4 o% o/ q
time=0;
& O/ T7 ?! P# S# S( y2 }) e second++;
w, x o" {0 e2 n$ o1 ?: q }1 ~( g4 s% X& y g
if(second==60)5 q, C" X) m; S0 V5 G0 u
{/ K7 P4 w5 e7 U
second =0;5 c* k0 p2 W q% m X" a
minute++;; l/ d4 N6 U( g
}6 b3 B7 m5 [1 A: B# D6 B- p
if(minute==60)
) ?, w7 f- l# a2 O: y' m; ]" B5 }; i {
% d4 h7 ^4 |! q: Q% c minute=0;1 r! |$ Z) m8 P) r! l
hour++;& n/ U- u* [# h! E
}
$ g; r. c+ y8 y) t) ] if(hour==24)$ }/ n3 s: y& h6 G+ ^
{
3 x% l- b1 Q" k# i* U( D t0 z6 w hour=0;
. ^! S6 R# q2 r6 `( U4 Z }
, G/ d1 H! b" m i/ G$ `* O0 ?9 ^: D TH0=(65536-46083)/256; //赋初值
8 [1 A5 W; u- t. d8 V TL0=(65536-46083)%256;
+ J" ? R4 H$ l9 o' z' R8 L1 u} |
|