找回密码
 注册
关于网站域名变更的通知
查看: 1820|回复: 5
打印 上一主题 下一主题

定时器电子钟程序,按键没用作用,哪位大虾帮忙看一下。

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2012-2-21 13:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
以下是我写的定时器电子钟程序,按键功能不起作用,哪位帮忙看一下。, }  G  k$ l- E' t1 v
/***************************************************************************; i# @) p$ j4 Z/ R9 t
名称:用定时器定时做时钟
2 T" p! y1 P! ?8 G$ T内容,自动从00-00-00开始,有按键功能
- x, D  C& |" ~: L芯片型号:STC89C52RC, S) V+ S# F) x2 ?4 N% S
功能脚说明: P0为段选脚,P3为位选脚,所有引脚低电平有效.
# Y/ I) [, U1 k  q" X* I/ ~$ p程序员:玄溪
6 C: C2 }* Z! r% p5 J0 S日期:2012.2.6
& g, d- F) ^; m# M  U1 l/ q7 U/***************************************************************************/
5 ~3 d* r% A8 u- Z4 F5 f#include <reg52.h>5 F8 t, r. |3 u+ o% J) I6 N. T2 N
#define uchar unsigned char
  i& {6 n, g4 Q2 [6 ^  m* N#define uint  unsigned int
5 F- j8 z/ c% r2 G& q' W7 }" h5 b; ]' T& C5 a, Q, n: C- a2 Y8 a
uchar code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
1 L! |/ T9 r4 k) j$ R; c8 Csbit K1=P1^0;                          //分+
' A# |0 Z  v% T- {. x' c/ \) Q7 ~6 msbit K2=P1^1;                          //分-( Q2 T. j5 K& ?( B. X. y* q/ T
sbit K3=P1^2;                          //时+
% \5 g6 X7 |" R$ Q& C: E6 X, J: Ssbit K4=P1^3;                          //时-0 U: N6 X9 B9 L$ ?

9 T; O# X, h. f) a9 @+ n* T  Auchar time;                                   //定义中断时间次数
( j3 T% c8 L4 ~  luchar second;                           //定义秒' D! Z9 q# M$ g2 h- ]
uchar minute;                           //定义分* n8 c) B# L2 c* c  a4 a: q6 _
uchar hour;                                   //定义时
* f8 s5 u+ H8 v//===========延时函数============//
" H' j2 z; T9 H8 `( V# z; hvoid delay()! b5 f! V/ p; A, \. A. Q
{
+ F( y) a2 ], |% w$ c- Q        uchar j;3 B' c2 ]& b2 O0 v/ X
                for(j=0;j<200;j++);
, |- g6 t* n- ~$ w}* u! z% ?8 B' ]3 L2 ^0 h
//=========显示秒函数=======//5 S9 |* a2 S& h( a$ o" b2 D
void displaysecond(uchar s)                         //带返回值
8 I6 \$ S) f" U& f: \! Q  |{1 s/ d! A2 e& n# M: }
        P3=0xbf;$ V& S% A, o2 {5 n: F
        P0=du[s/10];+ _7 v- ~& M* J6 V, e
        delay();
7 d$ `" T! [3 q; F! \        P3=0x7f;
! @" R) s8 ^6 f        P0=du[s%10];
1 Z5 l; W( @+ s0 Y/ |        delay();
: k) g  {, h% Z7 V/ L: S- F" @) y7 Q' Y        P3=0xff;
+ p' ^  t! i! n0 f) j5 H        if(K2==0)1 R# m7 d0 L' j2 D' f- V( \  R2 m# g
        {0 `- o! p& g* K+ h1 E6 n5 w
                s++;
, K' r0 t0 L- t' i1 N                if(s==60)
  x3 S% M# f6 k% w1 q9 Z                {/ w7 k. b- N8 d
                        s=0;  ]8 O+ y$ p. u$ ]' y$ v! p
                }
; K& K& M3 i9 P0 Z: y7 K8 o        }
# M9 Q1 J/ p8 K. t* a}
% k$ l7 N* z" J/ t/ ?5 {* `, L//========显示分函数=============//
% W7 m, y  k* b9 Gvoid displayminute(uchar m)
3 J# |- X" g3 _* E{7 |2 P/ t1 ?3 v' n
        P3=0xf7;6 d1 N( [0 k. y6 F8 c. _' G0 Q
        P0=du[m/10];
2 P: S/ R' ]" k3 P( l        delay();; e/ C. ]# K" x
        P3=0xef;7 h" j3 X3 a" @5 U- C" @( H0 g
        P0=du[m%10];
" l% s( E/ b6 F* T1 a% F  [0 J        delay();
8 o1 ?' u9 @, k5 t, \: r        P3=0xdf;1 i5 G* z1 r3 |
        P0=0xbf;
0 I. `; |( p* ?7 m" H        delay();5 J/ F2 {2 ^2 m8 z
        P3=0xff;
3 G6 T; b( K; A- m( v3 h& H4 U* m        if(!K1). q! u3 A4 N" \( N' q/ H
        {
$ g9 ~  t; T1 @% t& T                delay();( n) m3 {% Y1 X% q) ~
                if(!K1)
$ K0 i% l' u) n& p2 j                {% Q. S# m* V- ~9 A
                        TR0=0;8 Q4 I1 K) T( R
                        m++;% }$ e0 z9 O5 |
                        if(m==60). M7 j5 k! W5 Q# h
                        m=0;+ F# j4 s) G* I" Y! _
                }  }% d7 ?6 X3 W0 u% [
        }
- G$ c3 g4 S( K: _- g% q        if(!K2)
0 A: B7 F# W" y0 s7 D; Y        {
" [% u7 F7 I+ \+ K3 G                delay();) X& A; `% X4 V9 a6 l/ f$ f
                if(!K2), h* M' x2 W9 R$ A" Z5 D
                {. ~5 X# V+ a" H4 j& b5 R3 d* B) c
                        TR0=0;3 P! D" p1 D* A1 I! u0 F
                        m--;, J) W! q$ a4 L& y8 V
                        if(m==0)
% S* o, Y# b+ @$ h; L$ L                        m=59;4 K2 I. L) h; Z
                }  U9 P. ^4 q5 a( T( g. S
        }
3 Y6 H+ p4 _8 H8 G        TR0=1;
' y1 b. x7 J) R0 X}
8 g' [" `* r6 O  n3 M1 `* y//========显示时函数==============//
5 \; o+ t# z, u$ m( x7 t  Zvoid displayhour(uchar h)$ G, U3 N4 V, W- ]
{2 N: P$ c5 ?/ _" C
        P3=0xfe;
! P7 H- n  U0 G/ p        P0=du[h/10];
* m% X# r0 @7 I1 k5 l$ {        delay();% N9 E: N3 b: O' e
        P3=0xfd;
! O4 Q/ [8 F% D5 E% m        P0=du[h%10];9 \" @: i3 B; M% b" G( I+ d( Q
        delay();
. n4 @# B! m+ a- I7 }+ e        P3=0xfb;2 K+ a( |+ X. C5 ~- R$ @& Y1 H4 b
        P0=0xbf;# P* r' b, m- A, a
        delay();
' R* V" S* n9 V$ F/ K& G8 s        P3=0xff;0 [/ }- ?! {) p: M
        if(!K3)
" `- H5 c( \, d& ~, Y4 O& S+ H        {
% k3 h- ]1 u1 Z( ^+ l5 B                delay();
0 t0 U- T% q. m+ a( [                if(!K3)
" p$ f& f! R+ w' w; O                {" f2 h# Q8 ]) G9 ^0 i
                        TR0=0;
, @; G, ?+ H2 b8 s4 u                        h++;
7 b1 _% G6 P5 [  O                        if(h==24)
* j/ w/ V) c2 O0 s                        h=0;
; q7 z! k! L6 u3 c+ J) O) b6 u: S4 S                }
  h9 f% W: |* J) Q        }
. N! E) ]! h7 Y4 c3 J        if(!K4)  n3 B% o! c; V% c1 g% X
        {3 `& e5 w2 U. z1 S2 ]8 C$ S
                TR0=0;0 i3 w  o0 l. V! _# S7 v- f
                delay();: K) Q$ [; a, o2 x$ n/ S( ~
                if(!K4)
( X$ p! V! X! \7 G8 E% E; F5 V3 K                {
/ X  ^9 |; V+ s- z                        h--;1 Q! L# e7 f. Q# w) c' ^
                        if(h==0)( f. ]% u, n6 b4 U0 B  z2 t4 R
                        h=23;6 O; u' |; V9 B' h6 A
                }
3 V$ m0 [3 h1 c! r        }0 ]. @" h7 e; O7 Y. Y
        TR0=1;
: n/ k8 E7 {- |; }0 `" @* l}6 x3 ]2 H7 `% U( j
% H$ F. t  e! q& O
//=============主函数============//
* p9 d+ |8 e1 v3 V, T" f. l5 j0 cvoid main(void)
+ D1 X9 f# ]& ]3 x5 \{5 k% P, a' g" R1 S5 J4 f
        TMOD=0x01;3 l5 m8 _# C2 |; L2 R
        EA=1;
; Z9 @! U" r( _2 t( t2 p# V        ET0=1;  O  a' w9 V3 |. F6 Y
        TH0=(65536-46083)/256;                          //赋初值
! J9 [1 }& l4 N- Q3 t        TL0=(65536-46083)%256;        9 u2 S+ P1 i( v+ j
        TR0=1;
5 l# G9 S+ ^' L+ T; @4 Z        while(1)
5 k/ @. |% [, m" n. `4 e5 v: \. Z        {' {: P' D! _% \6 E- N0 ~- l5 D
                displaysecond(second);
% d' E4 }! ^; B0 V                delay();2 J5 E6 a3 T) W) {( a% _
                displayminute(minute);
1 e' {& h( v1 F; k                delay();
2 T6 m" Q% V# B* G                displayhour(hour);5 i) k( o1 Q$ x6 d; C
                delay();  G" ], X7 C* V
        }
+ `  b3 k+ j5 t' x}
5 N2 T! i2 d; b//=======定时器中断子函数=================//. X( w7 H% q8 J$ M; V1 V3 V
void inter0()interrupt 1
' j* e& h* e1 f( r- C7 R{
9 H9 X  t- G8 e. U+ n# p8 @, i/ x& g        time++;
$ u, g; Z/ C, Z9 m( u' W9 q        if(time==20)
7 O3 R8 Y6 I' V1 P  F        {
# c# V9 F9 [4 v                time=0;
5 T; F( D1 L; r" e8 \                second++;+ F3 t/ c1 }  \" Y# u0 {/ X3 T
        }- `( `, O2 `9 p' B1 i& i0 U3 v* b
        if(second==60)1 `4 A5 c8 A5 L+ F5 C
        {
! X, W- P& e5 a! x" g                second =0;
! V! S- E+ s5 ?6 H+ b2 N                minute++;6 l3 @# A; z! O
        }
% y* n( V5 u- ^$ `; S: g        if(minute==60)
$ c- @5 U4 n* h+ v8 h        {
& r& n9 r1 G9 w( V) v4 t, b; _                minute=0;% H& A2 [' A* T( r
                hour++;6 x' k" ~$ `$ }" U, [9 Z2 S
        }
; R0 T; Y; X4 n. b; L8 j* |        if(hour==24)
2 {3 @+ k7 L  a4 V( X        {, V: k. b" [& T3 F6 m
                hour=0;' ^/ v" ~( q0 N& H$ a* |
        }7 ]4 Q5 ^  a% Q5 `: W
        TH0=(65536-46083)/256;                          //赋初值
; [' s1 }! l2 r( b        TL0=(65536-46083)%256;       
4 e# U  `+ ~6 j6 `5 g! y) n}

该用户从未签到

2#
发表于 2012-2-21 20:06 | 只看该作者
本帖最后由 ArthurGXH 于 2012-2-21 22:39 编辑
9 P& g4 L- d# v9 Y# @7 P6 u
  ~# ]  E) i. [. i兄弟,我来说说你的问题: $ ]4 U; m& v' ~2 h) l: }  Y
  displaysecond、displayminute、displayhour几个函数的参数请用指针吧。C语言的函数是传值的。比如:hour = 10;  displayhour(hour)  == displayhour(10)。是将当hour为10时,就将10传到displayhour函数。' O# }1 v5 n* c" t3 Q; f
  改成如下: 定义时:   displaysecond(unsigned char *pucData)
$ q( N( E7 ]( j% g                     调用时这样:displaysecond(&second);
( E7 c9 d: b9 i2 i. U7 B" U1 n
; e6 \$ F: B9 [$ J3 C$ l4 ^  请好好学一下C语言吧。; R: i0 K5 d% d1 A/ N
: I5 n* h" _7 Z# F7 L
还有几个问题:* U1 O( p5 U7 I* K0 v: D  |; q
  1. 定时器,请用自动重装载的工作模式。程序在每次中断赋值会有误差,会积累啊。" ?* [: |* s# u' w% }% i' ^
  2. 读按键的程序应该与显示的分开,不要写在显示里面。
4 @  Q" v' u/ V. T1 S7 c  3. 按键的去抖动不充分。
* Q  U" }7 ^: Y# K: S! \       4. 定义uchar 最好用typedef。
) `  P$ s1 s+ u& i        9 F' i/ O9 C) Y8 \; k3 r9 O5 f

# Q! V! w$ q9 W6 b- i* @9 R9 B1 @
+ B; x. U0 }$ D* x1 X0 ^
* w0 e- h9 S  D( N9 x$ [& E  ^8 h) f8 u7 p  S

该用户从未签到

3#
 楼主| 发表于 2012-3-3 10:05 | 只看该作者
谢谢你的建议,新手很多不足的地方。以后一定加强

该用户从未签到

4#
发表于 2012-5-10 12:48 | 只看该作者
我可以给你发一个  我自己写的 简单易懂   秒用发光二级管显示   分 时  用4为一体共阳极数码管显示

该用户从未签到

5#
发表于 2012-5-10 12:49 | 只看该作者
你看看吧,我是新来的 以后多多关照

Text1.c

1.54 KB, 下载次数: 42, 下载积分: 威望 -5

代码

该用户从未签到

6#
发表于 2012-10-25 16:24 | 只看该作者
楼上的程序可以用

评分

参与人数 1贡献 +2 收起 理由
阿宽 + 2

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-23 22:10 , Processed in 0.171875 second(s), 27 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表