|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
以下是我写的定时器电子钟程序,按键功能不起作用,哪位帮忙看一下。
: r; B- ^' H+ D, |/***************************************************************************
- B8 ]% b' H; ?( y名称:用定时器定时做时钟
& R Q. Q/ t. J1 Y内容,自动从00-00-00开始,有按键功能
5 I- _# T' J( l% k+ S芯片型号:STC89C52RC
% \$ x" I/ F0 H+ F$ J8 h: e( R功能脚说明: P0为段选脚,P3为位选脚,所有引脚低电平有效.
& Z( {' g4 z2 |程序员:玄溪& ]& e/ Y* B% H! M1 P( d
日期:2012.2.6
& V. x7 |( Q# d/***************************************************************************/
) v3 ~! c6 Y |#include <reg52.h>5 j1 L( s; H* m+ r& }
#define uchar unsigned char
( Q9 Z! j" f% T# Y. k#define uint unsigned int
, V' w: D/ f+ e8 y: C% F9 W/ E( i
uchar code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};9 _7 G3 [ b- i3 G. F
sbit K1=P1^0; //分+, a; V) F! z, j+ f/ @
sbit K2=P1^1; //分-/ [: c- o9 s$ A5 k& e0 A
sbit K3=P1^2; //时+1 c% ^* X9 K/ b
sbit K4=P1^3; //时-
/ W; X# Q: l3 ]& n" D) b" {
3 f- K! h" D! J, V' h! m$ V0 Nuchar time; //定义中断时间次数: ^7 w$ q4 e' v. b
uchar second; //定义秒
# H0 {' E0 q4 _" f/ v! A, T1 Q9 u$ euchar minute; //定义分
8 q# t5 U7 c8 C' n8 @! [0 e- huchar hour; //定义时& R$ t5 b j) q- f
//===========延时函数============//) D7 x' I, m# u0 a7 p' n% b
void delay()
* |8 ~7 ^! b2 p( M{
: u8 q" @; q/ K0 o uchar j;. v7 G# u! Y' `" a
for(j=0;j<200;j++);1 p9 U1 {8 j- v- R& q
}$ Z0 m, d# \3 M! ?
//=========显示秒函数=======//, _* n; O) `- O! g
void displaysecond(uchar s) //带返回值( \; |1 I Z+ `8 \5 ~7 F/ x$ W) V
{% |& O4 p( I$ `6 o, S
P3=0xbf;! [8 X; Q) X7 z6 B& C8 A `
P0=du[s/10];, t+ ~' S: R0 Q* Q3 @
delay();
, K6 ]3 J/ N! h+ v& h$ b% x P3=0x7f;
, {2 i, p0 J0 K P0=du[s%10];
+ y. c$ y J5 p, O3 R delay();
' \0 S! G$ W$ a; Z% P" g: |. ` P3=0xff;' m! `3 J) z$ `5 {3 N4 J' p' t( H' |
if(K2==0): Q8 c# A+ e0 d. j, r
{# s! _) b) M: x/ c8 }9 q7 ?
s++;, K) q& r. j6 x% C% a
if(s==60)& K2 ?8 q. p! W6 k' t
{4 v2 U4 `* e$ g; j$ o
s=0;' U- h" @# p y
}9 P, q8 x8 C) L, H5 x
}
( ?: L& m) w% ?}
; @1 ]' b h6 b& y! i//========显示分函数=============//: o# b8 ]" O; _) q/ H% S
void displayminute(uchar m)7 {" Q$ p+ }6 c4 ~- }+ d' F) l% v( K0 t+ [
{8 p2 N4 U0 |# O6 j/ L# D
P3=0xf7;
" r7 U( v! `: `! [- T v P0=du[m/10];
4 F0 @. U B+ s& g delay();
* |6 w( |8 }4 j% T P3=0xef;
) A% r* q; H9 V5 ^& G3 h P0=du[m%10];
5 d! N- h' ^: h$ `9 ~/ Y7 G7 N delay();9 o6 a6 O: y& L/ S1 C1 G- K9 ?/ I* z
P3=0xdf;
- J. R( n: ?5 l- b+ T5 p4 Q P0=0xbf;' p8 _0 e8 I3 `; C) I2 n! D- [
delay();9 c0 Y3 l- w: L5 D. `
P3=0xff;* I5 x8 ^8 z D+ w; |) \0 ]0 l
if(!K1): F. E( m* ?/ A0 {9 e/ I# o
{* c; X6 f ]0 I6 w( U; S7 ?5 I6 ^6 K
delay();6 s/ F1 ~% { t0 |
if(!K1)8 ?. `5 V! ?3 h1 D: |! k
{1 j" ^2 b3 {( C" k' c9 L
TR0=0;$ ?& u0 u! R# [
m++;" y5 i3 |+ E0 f. M4 ?
if(m==60)
% S$ \. I! V, D. l; \! d m=0;: G- U2 z8 I$ L+ L- u1 ]
}
+ t* G3 u- b U8 k1 J: K- ^ }
6 N3 ~ g& b3 p& k0 y if(!K2)
# a0 e$ F$ z% H, B% |7 { {
% G) R# ]9 j) A) @2 ~! C delay();! W1 |: D1 z) J: ~% ~
if(!K2)# |& J4 I2 R) J
{! w8 n0 n& H; h6 v( G1 k# ~
TR0=0;( m, f7 A0 Z: g
m--;
$ F" d" Q- n/ ~ m S if(m==0)
. a1 a. }4 @2 {/ [6 Y, M- ` m=59;' U0 E1 Q: M- T* c
}8 m( q4 {4 J% h- w) W# E
}' g# X' M) d. y! d* H
TR0=1;
% ]; J6 T i8 [( ^( E1 |}( X' i5 n, R9 J7 A9 R) ?7 e
//========显示时函数==============//0 V* e9 L- A9 l4 ?1 z
void displayhour(uchar h)9 l _% V# m, ?
{
. \& _; [0 M# S# k- a4 h4 F z- Y6 { P3=0xfe;
& I F5 D( V, u5 _ P0=du[h/10];
: R# P; a& [; \' @ delay();
. I, m6 X2 X: Q1 Z0 [' k P3=0xfd;/ }3 z8 x7 ]1 n6 ? w( e# f
P0=du[h%10];
# \9 f% c# ?- N, [ delay();! A- i0 `( K o* S) C
P3=0xfb;( d3 U$ o9 H' i1 R
P0=0xbf;) s. C! s% S# o" k6 G
delay();
% u8 p, n( o% E [3 y! Y6 ? P3=0xff;
; L, G2 \6 |5 z; C8 S- f, U2 B if(!K3)5 U) e% Q8 F3 |" f
{
: E# {5 L( E: u delay();% _ d* p7 v8 ]1 [
if(!K3), b- I4 q, Y: t0 {# b# h) _( ^
{+ s; [, f0 L' C% O9 M
TR0=0;0 X+ V* f2 g" v- d7 A
h++;
' Y& U/ z# g$ y; s6 P$ L' I P if(h==24)
3 P" T; ?4 ]+ j- @8 ^- S. V1 V h=0;+ F5 O+ _& P0 j3 }
}
3 {9 G, ? S C" @* P3 F6 J }: i: W0 c' A1 ` K5 n$ Z
if(!K4)6 c# M, K, S1 h3 Q
{
9 r7 ]! p& m0 _ TR0=0;
0 U6 t0 H) O! t1 E delay();0 b5 ?! [& w% B( y* [
if(!K4)
3 V& B$ \8 l$ F4 l {
/ ^/ Q: {4 s' P: P h--;
$ e2 I- M- l4 t, B! n1 J if(h==0)5 X3 B" g: n" I7 F& d# `+ g
h=23;
$ ^; D* C( b: G0 @0 e6 b; Q }! A! P; w: o/ U; U, \0 n* a3 e$ W
}
" F, i% T- S, T( I( _ TR0=1;7 ]) p" {/ V) L$ D( G8 d9 h2 r
}
6 A6 [6 n1 m! d/ G: L, R( D& k4 l$ q& X6 }2 J5 ^
//=============主函数============//: ]; v8 O9 g2 }6 v
void main(void)
3 U/ J, x, K2 R5 C5 Q3 C{" }4 H2 W5 g. j: e! S3 I, F
TMOD=0x01;5 E$ @2 {. Z2 D; N3 K
EA=1;
+ Q* g! R" |1 L$ i8 m ET0=1;: {$ K/ i9 o. r7 e
TH0=(65536-46083)/256; //赋初值
5 S7 G$ A1 M/ V0 @: U TL0=(65536-46083)%256;
$ C9 v9 {0 e+ z. Q ^ TR0=1;6 \3 D3 P2 g2 O( t
while(1)" H: N3 ]: V& p& m* y1 q
{
: c y& g0 ]: T$ X' \" p( o8 [ displaysecond(second);3 v" \: o- \) e. v# A9 m
delay();0 r! k2 q# O* S$ J9 J' n
displayminute(minute);
& {+ w4 F, E# l, E0 F% U delay();% |( G. ~6 k, u" F- [
displayhour(hour);
1 }& G4 U3 u& E' {, l0 m- m6 I$ W delay();! v i }- H" M; r
}
$ S' J5 p* Y/ n# D8 ^7 c h7 ~}$ |0 R/ J" z4 ^ c0 C; p0 U
//=======定时器中断子函数=================//
. \: B# }& Q7 |/ [. Y3 J2 svoid inter0()interrupt 19 o1 O$ K9 ^ i
{; q8 O4 i% C- W- P/ ?' }
time++;2 Q( b2 r/ F5 [
if(time==20)! s4 J& M2 p& W' E5 |. l" T7 Q
{; f6 b) B' m1 ]' ]+ v0 Z3 j# D
time=0;; `. a! z0 v$ j* P1 G
second++;5 | W' Q% l& r" h
}$ V0 R9 X) @) z$ @: O. [
if(second==60)
; [, J! N) Y3 w1 L: H {9 u$ _5 s6 A& ]! n% o7 j( C! X
second =0;* M& S; E% H- z) ^4 X3 e6 H
minute++;
, J6 H' {5 y, b# I6 ^ N }" ?" T7 E' ?' l- o
if(minute==60); ]/ {8 `5 C+ Q5 H
{+ o. a+ X- m$ K' j
minute=0;; i( w; B/ K8 S+ S* L
hour++;
7 f) E% h$ _- H/ K8 R; g }; M+ j- J, b0 x: U F7 H7 @$ p
if(hour==24)
$ U; z1 v5 ~ Y; b N6 M; U {1 g0 p2 `2 Q! y' Y: r
hour=0;$ N* H0 ?" I: E$ p3 j1 X; _; e
}' ^' i: Z3 Q0 d) C! A- u/ d% D! H* T3 f
TH0=(65536-46083)/256; //赋初值 D1 m# U# I3 w, X/ p- N: K+ k
TL0=(65536-46083)%256;
! E4 d0 T7 s& N8 x1 z/ K: M9 H} |
|