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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
以下是我写的定时器电子钟程序,按键功能不起作用,哪位帮忙看一下。
4 p- R/ b8 t5 q6 L, h9 a3 U5 M/**************************************************************************** \! l* N4 i4 Z1 s2 l4 J. x1 U/ O
名称:用定时器定时做时钟* h+ D6 j8 z/ i; J& ~! \: l; u
内容,自动从00-00-00开始,有按键功能
7 L" m0 p( R$ m3 d芯片型号:STC89C52RC% I' E' |5 z5 D: {+ g+ R1 O
功能脚说明: P0为段选脚,P3为位选脚,所有引脚低电平有效.
) a" x+ ]3 z" h6 L& I9 A* v程序员:玄溪
* c' R8 r& s" `) m日期:2012.2.6
' I- M6 O; E5 _2 p" n2 x* x/***************************************************************************/1 s* D+ P  j* @' R; G
#include <reg52.h>
  g! g  r% F0 L#define uchar unsigned char
* \: F: o" G1 J$ I! ~' ?#define uint  unsigned int9 f. M. s. j  X9 @0 x  j
! w2 A3 Y4 ?: w6 e8 l- [% v% y% K! f
uchar code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
+ Y2 d2 ^- T5 Xsbit K1=P1^0;                          //分+
. G8 Z' ]: E7 t0 w5 E6 j1 P- Asbit K2=P1^1;                          //分-
0 @& p) p+ N& ^4 B2 x  j" f$ H; Tsbit K3=P1^2;                          //时+
1 o4 K5 m- _# `" J0 Z, |sbit K4=P1^3;                          //时-
/ i# E' i5 M7 y  {& b' s6 o/ `
7 c( T8 c) R4 k" @1 ^# Auchar time;                                   //定义中断时间次数  v6 M/ Y  F1 v
uchar second;                           //定义秒
% ?) N" n8 q% Z4 I' C6 ?0 zuchar minute;                           //定义分- E# c3 ?% J  z' w3 d1 T
uchar hour;                                   //定义时  p3 n0 v: r; F8 d' m
//===========延时函数============//3 ~0 C, U1 |; k8 G2 U  Q
void delay()/ d  u2 g3 L" h1 J% |' m- e
{
" J; P% i/ _2 Q9 w8 ~3 V        uchar j;/ }: [! `, R# k& E4 T) ^. U  B% Y, s9 [
                for(j=0;j<200;j++);2 O5 W9 r3 ~; K  b
}. M% U" m4 ]# j! ?9 ^4 ^; O* y1 K
//=========显示秒函数=======//6 a3 ]1 L1 F: I$ m: T! T! ]) E
void displaysecond(uchar s)                         //带返回值' W  T( c  W6 J3 [  b7 j
{
2 A4 j) Z( w, ^9 Y* G3 B# I        P3=0xbf;* C" Q$ q8 @! G7 S9 E" N( l8 G. Y
        P0=du[s/10];
% s1 }. f) v, U: `2 R. q" v        delay();
  M6 K1 ?% V0 r6 K, O        P3=0x7f;
* O' U3 c' m. W        P0=du[s%10];
! Z1 `4 X- P2 a        delay();+ o" V6 f9 f$ C) g' S; W
        P3=0xff;# a% m* {) p, M4 I
        if(K2==0): F# }6 X9 p- ^
        {
8 ~% r3 H6 Z* W7 N! f                s++;
$ f$ t: ]2 `- J- C1 }: Q2 _5 K                if(s==60)! ]. ?, y' L% K6 B6 j4 z6 q
                {
0 ?. W/ t+ _0 u6 T2 F6 r9 C, j- H- n' ~                        s=0;
: [/ t) O4 K* h. Q9 P; O                }
1 ^1 w. r  X. M8 c+ g7 j$ L  D' Z        }
- B0 A# q* k, i}
& Y- i6 a, B" b" m//========显示分函数=============//5 ~0 w$ V$ \# y9 z# D
void displayminute(uchar m)  }" r6 A# Z7 G/ A! ?! Q# k( m
{' v: i. e. ~2 t! @. z6 W9 ]/ z
        P3=0xf7;
1 s: @( Y; C! C3 E5 s; y        P0=du[m/10];3 g: W, d' R: Z8 n. W* p
        delay();, w, k* U  S( g: j. X2 O
        P3=0xef;+ [/ m2 A( n+ q* Q+ t
        P0=du[m%10];2 K  I7 L! t8 N
        delay();3 c: q4 Z: h$ W9 `3 N9 W
        P3=0xdf;. S6 j# c% V' ~4 m5 a' F
        P0=0xbf;! M* B, J' D5 U
        delay();0 M: I  T  s1 W( @4 h, S
        P3=0xff;2 z2 I0 [9 G. ]8 C: }
        if(!K1)+ ~: [, ]9 w' y6 L( e2 h$ M
        {! @) U* M7 D% k, M$ y2 q7 k
                delay();
' ~3 K. f# f" U: z1 n3 U4 j                if(!K1)! p. ?) e' q$ D7 s6 o
                {  A8 [5 b" I. h& @6 ^3 }
                        TR0=0;
8 S7 q. @, C5 c7 ~                        m++;  N: P5 }- N9 N, O/ @, _( z
                        if(m==60)
2 q1 U6 y) z5 g" v  c2 T                        m=0;
# R0 z; T' T' H+ h* b# a. E                }! _4 y, v, P1 N1 [" V* z
        }& ?5 A$ ]: d) m% B
        if(!K2)
0 f( H; e+ K: O4 c" a0 n# _: d        {
  Z/ _, p4 y+ S% B' b( D, b                delay();6 M# v* Q# I( a) A
                if(!K2)
' s4 u  K' G$ x, K' L* g. j                {
/ _6 \% t) S6 V6 ]3 K/ X  Q3 n                        TR0=0;
0 t  k9 a2 i( Q6 I; f; A                        m--;2 z9 j+ _) J9 [+ c
                        if(m==0)
' y0 n2 e: x. g) b                        m=59;
) Y6 Z4 O3 ~' \. h! T! D7 o                }! H7 J& e2 C4 u
        }
0 }/ ~6 X& a- l$ a        TR0=1;" [( R) p$ m4 A$ j
}
$ y5 L9 d8 N1 a; j7 a& t//========显示时函数==============//
) `5 ~: j! M1 |void displayhour(uchar h)1 h' c. B, n. _5 @9 S. t/ A3 s
{
9 R; ^7 E2 ^2 l# R7 r& C! I, }        P3=0xfe;
( }# U, M) `" T' i2 A3 t        P0=du[h/10];
2 M$ S  ]) H; P8 O7 @2 c9 ~5 `# m4 T        delay();& w4 S9 w/ A8 J' `$ C6 A% N
        P3=0xfd;
8 f& J/ B: n- F* d! C* g        P0=du[h%10];! Z- k* }  c& I8 @
        delay();
: D/ e# B# _( U: L0 w) F) `        P3=0xfb;2 e* d# k7 R2 ?+ L; G0 W, j- P  ^
        P0=0xbf;) H! J1 z- ~2 H, U* P
        delay();% i, Z$ I) i) I" v3 `/ |( e
        P3=0xff;
; w' N: ]: w6 ~; T# p. N1 {) `2 }        if(!K3)
& ^7 ]! d- c" t' G, B        {
8 ^5 D2 Z/ ?) j- b# ]                delay();
0 Y9 _: z9 \2 r7 L, L                if(!K3)* F6 V0 u* C, G  w4 C6 n4 I/ x
                {* `* k$ Z7 f0 }+ g% k1 l; w* n9 s
                        TR0=0;2 J8 m1 Y4 R" I& |! S' W
                        h++;/ u5 X, t8 {/ D7 V# S6 X- V
                        if(h==24)& F2 f( u8 l- Q0 o
                        h=0;
) Q: }3 Z5 `1 G, _% l5 K, [  I                }  {4 Q5 w# `6 \* P/ o: @7 A8 f+ W
        }0 S3 l, _7 t' C
        if(!K4)
9 F: ]  u' D$ X% ?$ a  S        {) k% P2 I  {4 t' e9 c5 l
                TR0=0;6 O) x6 k, k" N# o
                delay();
! w- _! @6 [: Z                if(!K4)1 d# T" e9 [0 M  \6 L& K7 \
                {4 z. P- H/ Q# k( u
                        h--;
9 M* X! n" n$ p8 x                        if(h==0)
$ K. ~7 P2 E1 ~                        h=23;
) Y$ v1 L9 {* W0 {  x* p                }
# w& I8 V6 ^7 [2 N8 M! V        }
7 }+ v* \/ h* F" A# I        TR0=1;, ~; t) A) O. s9 U$ a, }2 E
}1 a2 N7 l6 \# M
" b3 z4 Z* l2 K1 F) m
//=============主函数============//% y( G* r: K: G. Q
void main(void)
( _0 s) j4 W# e  j; l* `% E4 j{' [' I8 G( N& `0 H5 f5 B" f7 w, Y
        TMOD=0x01;$ W. W( L6 X2 z
        EA=1;3 s9 c4 Z# W6 e) c! l! J2 q0 S1 V
        ET0=1;
( l" }- M( o6 m; ?8 s, s4 l        TH0=(65536-46083)/256;                          //赋初值
$ _5 \9 V) h0 R9 q$ [        TL0=(65536-46083)%256;       
: f2 e4 |! \) N! Z: N! y        TR0=1;1 d! \( X0 a& C9 b8 J5 D1 Y
        while(1)
$ t: p9 Z. ^8 v6 A; u, z        {
  a2 W0 m' j( N) O                displaysecond(second);$ R8 \5 ]; {. _3 A, i+ J8 {
                delay();
9 `8 \# O  v5 Y' t: x% P                displayminute(minute);
: j0 D9 a, q2 t  I. Z' i                delay();
0 Q0 a3 A: g/ X                displayhour(hour);' J2 z& v. H; a2 n# q8 O; j
                delay();+ n0 e& D  ~- z2 s. c! }6 ?: v' d: i
        }
6 D- E9 Q7 U2 m5 [: l}% i- V( B* U5 d$ l! q, |
//=======定时器中断子函数=================//+ C4 T5 Q  B' S+ a
void inter0()interrupt 16 {: @* h2 t* h! h- g+ l0 s
{8 V+ k* m+ ~4 x6 C* X8 G
        time++;
4 a" n! u* f; M7 ~5 M# O        if(time==20)7 f7 B5 ?% x4 [" g) g
        {
5 O5 H- Q4 k! F& \7 C1 c& [                time=0;
' i& f: a  `. w# ?) d. O3 y5 G                second++;7 J; b5 |: m6 p8 i: ^: T4 f
        }" j! T% L6 U( s. }& F& _. E
        if(second==60); H; I: r. `+ r& S3 F8 \7 U
        {
: C& F# o# y3 j1 P7 r8 [/ t                second =0;
: H* D! u* Y7 f: m: j/ r& _  C2 T                minute++;& v1 M/ _3 o0 u: w: i- i' t
        }+ O3 k$ `- K4 ?5 f
        if(minute==60)1 x9 u' L; J) i7 F  k  u; T7 c
        {
" R( D% y' c( N$ i& L& S                minute=0;6 `% u. z! s7 D
                hour++;+ ^0 s2 ]4 _" W( f
        }: f% b9 N0 p' m8 y+ {
        if(hour==24)7 i* A7 M+ l3 M; A4 E# a* ~
        {
3 a7 W9 q4 W+ H1 v                hour=0;
& u6 J& A% Q: k: K, _        }
, N& x* T3 z4 C! z0 k% f; [        TH0=(65536-46083)/256;                          //赋初值
3 f8 F, R* l- x. r        TL0=(65536-46083)%256;        2 a4 x. r4 N' `
}

该用户从未签到

2#
发表于 2012-2-21 20:06 | 只看该作者
本帖最后由 ArthurGXH 于 2012-2-21 22:39 编辑
. d0 m7 ]6 K, A/ I7 ?
5 {* f/ l$ v! e9 ]兄弟,我来说说你的问题: 3 y- E1 L3 Z) p9 e
  displaysecond、displayminute、displayhour几个函数的参数请用指针吧。C语言的函数是传值的。比如:hour = 10;  displayhour(hour)  == displayhour(10)。是将当hour为10时,就将10传到displayhour函数。8 @5 e% m7 X! _
  改成如下: 定义时:   displaysecond(unsigned char *pucData)
  l) Q( A" H8 d6 z                     调用时这样:displaysecond(&second);" i" g; E9 q& l) {# J

' Q8 N- E- h0 e1 L8 O8 p  请好好学一下C语言吧。
/ e/ m( e% P# g* x/ K3 y% J
6 _6 r$ |. b2 C还有几个问题:
# Z6 i# \6 e% p  p: x  1. 定时器,请用自动重装载的工作模式。程序在每次中断赋值会有误差,会积累啊。
/ B7 L1 ]8 n! ]& \5 o! ^  2. 读按键的程序应该与显示的分开,不要写在显示里面。9 n; b( }& e! P. H* k
  3. 按键的去抖动不充分。6 @& C0 e8 }2 g( r  Y
       4. 定义uchar 最好用typedef。7 Z* X' Z% R2 n
        
6 y% t5 x& b8 P. e% I1 ?3 |2 q9 \4 w) B" g! _3 C0 o) q
! ]' O) V' n0 |7 y1 V; u: Y# s, k

* z) K+ r. S3 S! H# }# K$ ~
8 _7 R, g5 q( W) C; m6 k4 }1 I

该用户从未签到

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 19:15 , Processed in 0.171875 second(s), 27 queries , Gzip On.

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

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

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