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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
以下是我写的定时器电子钟程序,按键功能不起作用,哪位帮忙看一下。7 L4 o3 C/ G+ f* |
/***************************************************************************) O+ V' T' v6 U, A: V
名称:用定时器定时做时钟
7 m+ B! H/ Z, n# u2 b/ K0 n7 l6 @内容,自动从00-00-00开始,有按键功能  ?- q8 C$ e3 I! i- D
芯片型号:STC89C52RC" i! `/ n" a( h+ x3 C
功能脚说明: P0为段选脚,P3为位选脚,所有引脚低电平有效.
" L- ^, q* t0 S程序员:玄溪) i# E$ {) T0 S7 M% o( w. x% o* U
日期:2012.2.6! ^7 P# E, f) B! t
/***************************************************************************/
- \9 l: \9 f" g! @, x1 _# H6 f/ |#include <reg52.h>, H( q% q/ ~% d' X7 Z1 ]! Q3 `
#define uchar unsigned char : n2 u: \/ ~2 t) |/ m
#define uint  unsigned int0 f0 Y# }" ?" r' d3 q2 u
  E; \9 b7 G$ j( G. V
uchar code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
; W; {8 d% Q6 v! E# E9 asbit K1=P1^0;                          //分+
: s+ n7 ?4 l. J8 j1 lsbit K2=P1^1;                          //分-8 [9 O0 y! E! _3 [+ ^6 l' x
sbit K3=P1^2;                          //时+
0 Z" ]# m1 `; M5 s' ^4 osbit K4=P1^3;                          //时-4 p; m% L$ h- f2 }. H# A

9 t6 X% R, {6 Kuchar time;                                   //定义中断时间次数. s4 K8 P5 d( U7 u3 _7 Q: z
uchar second;                           //定义秒6 N2 t6 s" ~8 V8 c* J# a6 g6 Y, R
uchar minute;                           //定义分7 l: H- z; {2 ?- _
uchar hour;                                   //定义时% I0 D3 ]8 p, [/ N1 h8 I6 P/ G; U
//===========延时函数============//
4 u) A4 `5 W; k$ J) o5 ], L6 Z4 d6 pvoid delay()
1 O# q6 @" ?  Q2 v& e- S{
: b9 R( O% t' q" m4 W6 R        uchar j;
/ H. h( A- r7 G' _; |4 k7 Z                for(j=0;j<200;j++);
# T; m% t$ m$ c  U+ W+ T  P9 u}
" I% n4 P' N( U# Q  L. B4 k, G6 v//=========显示秒函数=======//, u* r- s  e. ]3 x
void displaysecond(uchar s)                         //带返回值
4 X* F1 v+ q& z1 v( N{) N2 m& d" X4 d
        P3=0xbf;
6 X4 |5 s1 p2 w; Y        P0=du[s/10];# h* `5 |1 N0 V: w0 Y$ E
        delay();" f/ ]+ k3 |6 C# c# P1 m
        P3=0x7f;8 m! N3 l) g/ [: ^8 j
        P0=du[s%10];8 q" y/ K+ H0 C9 Q9 y9 R$ |5 ]
        delay();/ k' C* b0 Q7 j, V' ^
        P3=0xff;, [0 \: P9 R2 @8 i$ B
        if(K2==0)
6 [8 o# o7 e& _1 i9 y        {
$ I" A" t) ?* l7 P                s++;
) W+ a2 F3 q0 v! m0 T- q8 M1 E. W                if(s==60)
% g2 A) B# m7 w% i7 Y                {
4 Y9 w. \3 I- l' r9 m" n5 K                        s=0;7 y! h' G2 \) R8 ~
                }1 o$ m4 l. r  _& ^% ?
        }
- c; @+ o7 e- r& N- S! W6 c" A}) B$ |; V) L& v
//========显示分函数=============//
" a1 J! U' U' u/ Rvoid displayminute(uchar m)
( e& h3 P! u! ]' ^{3 l, E- K8 U* q/ [7 R* H7 r
        P3=0xf7;" N: }2 U4 I  @5 F; m$ h5 a7 x
        P0=du[m/10];
) d7 f9 l- E2 D1 D2 N) t6 J        delay();, w9 h# _( d) I+ b6 Z! U
        P3=0xef;1 Y" o. ]4 H$ s0 B9 U
        P0=du[m%10];/ t# H+ y; v: a6 o
        delay();9 }  P. @! I: I& G' }- R6 x
        P3=0xdf;
- Y7 n0 p6 Z8 [. w9 q  ~        P0=0xbf;* M" |5 ~8 x1 H2 _/ d
        delay();
3 P4 p5 K, ~8 n        P3=0xff;  G# I) e: X& q3 S9 s- _
        if(!K1): h8 |! k9 d# S, O* R
        {
6 @- x2 D, r1 K! u                delay();
! m& f9 B. r) s8 V                if(!K1)
0 o8 I* A$ s6 m# \                {8 y* ~. P2 i+ L4 c5 ]+ K: Y
                        TR0=0;1 d; c4 A% t. ]0 z. _
                        m++;6 h% t& m9 N. \# O7 k2 |8 U
                        if(m==60)7 x& N+ I) i, N" h0 w3 B
                        m=0;
; c  L7 \+ C: }                }4 P' b% o& R5 q. r: b0 q
        }" V+ i2 D/ P8 ~3 {% Q
        if(!K2)6 L6 _+ l8 x, G3 c4 t9 o
        {' u1 v" I$ N3 w% P* \/ M
                delay();4 b# o+ B" N- T
                if(!K2)9 ~: y2 P2 s; ?5 c+ G
                {( ^4 h, Q. f; i4 B5 |+ C( P2 R$ W
                        TR0=0;
( g5 p4 O+ Z  y7 d                        m--;
% U- J! K: o* M+ V: \. n* D& s/ [                        if(m==0)  R/ z% w5 e5 J8 R* C* P7 \
                        m=59;
$ t6 _( J7 ]% o                }
& w+ @8 t& c* [- G1 N6 }        }& [9 G# n1 \8 ^& a, t( \3 W
        TR0=1;
( @5 R+ m9 p- {7 q( q* A! j( k* R}  d" A/ v% K. X: l
//========显示时函数==============//
( S7 C+ \. l( Y1 M  J& @) ovoid displayhour(uchar h)3 @+ N* I) g6 p! C% Q2 i
{% _3 J' |3 k, W  }2 `+ J
        P3=0xfe;6 D  U6 K5 o6 t/ }- F  a7 Y3 P
        P0=du[h/10];
$ o$ I$ ?5 o6 P2 Q" |        delay();
7 Q: ]' x; f: s7 u        P3=0xfd;" Z% W) |. ?; r3 ?- D  s8 \
        P0=du[h%10];& G7 B# C# f8 f. }( X5 I
        delay();
+ Q+ Y0 H2 M- D& ^; q( m1 S: d. u- a/ S        P3=0xfb;3 A# p- z* W) s2 h0 o( J
        P0=0xbf;4 B6 Z! z! C! N; ^; z+ I
        delay();
) @% v5 X/ S) T5 M' j        P3=0xff;' E/ f1 H& i5 |2 g) D: X- D9 h/ ?( ]
        if(!K3)
$ L, M8 e! U9 }6 {7 z        {
9 \: ?4 `) p" K                delay();3 g; r/ X6 ], ~* A* d* H8 r
                if(!K3)6 h+ H: \. O7 g# V& u. m
                {; R* Y. h& K% b+ M( f% T4 p
                        TR0=0;" b9 m1 w0 c2 u. P7 U
                        h++;8 o) u4 W% G% R, U$ K) |
                        if(h==24)
. O: x1 j) F4 \% e$ ~                        h=0;
8 o/ J) g% i; u                }( O9 R/ B9 F3 F* t# B0 K
        }  Z8 r- W* A- E  E# }
        if(!K4)2 g5 g+ ?  p7 ]5 z+ u$ i( G
        {
! f) y6 L5 p3 E$ Y5 }                TR0=0;2 B' a. q8 S2 j5 G/ N
                delay();8 R' K6 H- {3 \3 @( Z( z, Y2 }. p
                if(!K4)
6 Z8 o% F+ K, @. ], J                {
) c" u. t1 F, s5 V% X                        h--;
3 |4 L2 R/ b1 q) b                        if(h==0)
. f4 a  V/ U- H; R# }! W( s                        h=23;( X+ v& O/ }4 l& k3 ~
                }
8 P2 ^- `& O6 b* Y        }
) ^; o6 J4 [( L! @        TR0=1;
7 `/ \, k6 |+ ~: ~. F3 w1 u}
3 \! c$ N6 N0 z( }7 s, B
  L6 d/ I: z$ L3 l//=============主函数============//
& V! k! n2 y3 cvoid main(void)
' R, r" e' G( z; H* }0 ~1 {{9 d  S  B# @. \- b6 G  S
        TMOD=0x01;
1 X- m5 v% J$ @! l; D& I        EA=1;& m  Y5 ^( w9 V' s! |# S7 P
        ET0=1;
  I, s- G$ |2 s        TH0=(65536-46083)/256;                          //赋初值
# X$ }: `  g" \# Z5 p' g& W        TL0=(65536-46083)%256;        , j' X+ ~# o6 P# r  |) \
        TR0=1;4 h2 h+ N1 v; }6 I. H5 G: v. h7 `: O
        while(1)
4 s; r" x+ _* b1 a8 U* J+ }- l! ]        {. `) l# o  S. [8 |
                displaysecond(second);
! {3 `3 l3 r) f6 \                delay();- g7 e5 Q* F8 a! C; z
                displayminute(minute);
. O8 V5 z% q+ A                delay();
2 b0 s' t( E# I: s4 u                displayhour(hour);7 T+ ~* k1 m! D$ b
                delay();
* d. ~  Z: a2 Q) h        }
+ ?" Q- w$ P5 P4 d6 s/ t+ K5 Y0 Q$ j}
8 ]6 C$ ~, m* q% f5 m//=======定时器中断子函数=================//
% n6 d  A$ X4 n6 R! W7 @. Q/ E4 svoid inter0()interrupt 11 }* ]1 Z" Y; V' K, b9 g1 B6 B8 E
{
( F" o+ t2 X( @# e        time++;: u$ u: w; H9 N1 E( F
        if(time==20)5 P3 `$ ~  i% {: ~( q/ J
        {
' F& h: L" ]/ k$ w$ X9 I) U. R. t                time=0;+ n! S2 \; K7 B2 l
                second++;" O- n, p% S7 D) a
        }/ A; ?# D+ U* r6 k
        if(second==60)
- Q0 O4 Y. E& J4 J; \  e6 P$ k        {; X& b& P) S9 r. Y
                second =0;
+ j1 t" k2 j5 R1 L; Y                minute++;
& T. J9 v7 O) _- W2 ^# N6 l        }
3 x- @# A/ K, h6 N$ G7 G& F9 ^        if(minute==60)
, ^+ ^1 }# U8 ?  b/ m        {
4 t0 Y7 h$ ^5 \                minute=0;
! ]  ]! \4 m2 q                hour++;& Z8 K# r+ f8 S% c
        }' z: E% J7 i. Z7 g, N1 p8 l: V
        if(hour==24)( B; Q& q6 H, G+ @
        {2 r8 f! e9 N1 \8 ?
                hour=0;8 b. \+ U  Z4 F5 Y! C+ w4 @
        }
  y% ^+ |' D% L9 l        TH0=(65536-46083)/256;                          //赋初值% I' Z' ]( @) l& k
        TL0=(65536-46083)%256;        " g! ^+ N" |0 W$ Y% L; i/ B
}

该用户从未签到

2#
发表于 2012-2-21 20:06 | 只看该作者
本帖最后由 ArthurGXH 于 2012-2-21 22:39 编辑 6 l  J+ J) ?1 [5 n5 q6 R3 I

; I9 ]8 m4 X* r9 R2 T2 K: F兄弟,我来说说你的问题: & s6 l6 n, j  g# O4 R& o! {2 w
  displaysecond、displayminute、displayhour几个函数的参数请用指针吧。C语言的函数是传值的。比如:hour = 10;  displayhour(hour)  == displayhour(10)。是将当hour为10时,就将10传到displayhour函数。
4 V0 h. T) K( A9 B! n  改成如下: 定义时:   displaysecond(unsigned char *pucData)
. z4 a) c4 c! w4 E                     调用时这样:displaysecond(&second);* P4 [) s8 O6 Y
1 H/ v/ m" z8 g. O) k7 A6 {, l5 l
  请好好学一下C语言吧。
2 J1 E3 u* Y' L9 |- Z  {! b+ ^' O5 d
还有几个问题:% L# G, [. }7 F8 J+ B
  1. 定时器,请用自动重装载的工作模式。程序在每次中断赋值会有误差,会积累啊。
# K8 m$ ]- v; J  2. 读按键的程序应该与显示的分开,不要写在显示里面。2 F% f/ ^  g  Z  A2 Q- b
  3. 按键的去抖动不充分。
' [: m5 N- V2 F, v8 y+ h4 h       4. 定义uchar 最好用typedef。
* V/ W- x9 S4 V2 K( q" m        
3 L- p( F1 X$ N, A- w. x* Q
) ?; U3 G% F6 T* T: j. h6 j& w- [) n: P

6 @. t1 J8 d% ?, z' [2 J) s
5 _' y, a/ i* w/ H

该用户从未签到

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-9-4 10:12 , Processed in 0.140625 second(s), 27 queries , Gzip On.

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

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

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