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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
以下是我写的定时器电子钟程序,按键功能不起作用,哪位帮忙看一下。
( e  p5 n% a: U6 Q/***************************************************************************
: U) b7 R1 o& W) t% Y名称:用定时器定时做时钟
/ |  M/ r" O. [1 ]& p8 H$ R内容,自动从00-00-00开始,有按键功能
! g' R! @2 x/ W! _0 _* G芯片型号:STC89C52RC: p9 N3 b; r3 B8 p3 q
功能脚说明: P0为段选脚,P3为位选脚,所有引脚低电平有效.7 K6 V& o* u0 z8 G  Y# H/ ~; E
程序员:玄溪
# Z+ b2 d+ Q& w% e日期:2012.2.6
$ i2 k* A5 O0 [  ?- N, ^, n9 ?/***************************************************************************/6 _- l. J7 ?3 L: n$ N
#include <reg52.h>8 U; X) y# z% S
#define uchar unsigned char / R' z* U+ r9 J) }
#define uint  unsigned int
9 Z" E& a3 G: L. d5 ^7 s  Q: o7 s# y: F) l. m, t
uchar code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};0 Z, B3 K$ w! V  O) ^" k) J
sbit K1=P1^0;                          //分+
- _( I! V9 d5 S$ Y( W8 zsbit K2=P1^1;                          //分-
5 J" s, L$ r3 x, n5 E' Csbit K3=P1^2;                          //时+
$ o3 N3 i% e' ~- Asbit K4=P1^3;                          //时-
! [+ J0 v- C: w  Z/ h8 F
- s$ J0 s" y& w6 y' puchar time;                                   //定义中断时间次数5 H$ F$ ^- I3 |* E. G" t# q, R
uchar second;                           //定义秒& z/ t6 a. v: t
uchar minute;                           //定义分
' n0 r) y4 d& V: a5 n1 V. Juchar hour;                                   //定义时# R" X$ Z( |5 i
//===========延时函数============//
0 p5 Y' ]' K; W% G2 }- ^void delay()
+ H6 I/ P& }+ y* p$ Q* N+ c{
& {. T' G: A9 t+ V% z* v! o        uchar j;
4 }9 `# I" P4 m. s$ ?8 |) X' q0 o                for(j=0;j<200;j++);
" m1 |9 ~: R+ S9 t1 W0 o3 a, r}( J  @( R: z' g& h. g, j& v
//=========显示秒函数=======//
# {5 `/ K" p! i* y& y" }: E4 p4 ?' {void displaysecond(uchar s)                         //带返回值& a- b! B  X& Y# B: B9 k3 C
{# u% m, ~/ o) Q, t
        P3=0xbf;
# ]6 W: h0 T( F: @3 @+ w6 A        P0=du[s/10];) T, h- E! M* R! y/ o
        delay();0 W& G- t' t! h
        P3=0x7f;
" s# N1 m, V7 @. [& k        P0=du[s%10];
+ _8 x. ~: V# I& _$ c# N+ L# a7 M        delay();
/ H9 x% Q+ a2 T  D        P3=0xff;7 c) i" \6 Z2 ~1 \# l/ V4 G
        if(K2==0)9 C5 Z% t0 m" P9 |9 D4 K
        {
! r. w- {: r5 T; T2 E' s+ N5 Z                s++;& x+ u) b5 v" X( I2 \- n
                if(s==60)1 O  S' A5 @1 p! }0 x
                {1 J/ k( R/ _) H& V- M8 i1 q
                        s=0;# k. I! }" G: y
                }
2 s. k! _. y1 P3 Y        }# h: t/ c1 G/ C% A! j' V/ O
}
# h, F  P, w$ B- x6 A& l: a//========显示分函数=============//5 n! @: V6 H# i* h! f( O
void displayminute(uchar m)/ F4 H" Q0 D2 [! ]" P0 n( t' j2 x
{3 K( M; x: h! @9 r
        P3=0xf7;4 S! v! e, {9 T$ G4 |& k+ c- g, y
        P0=du[m/10];. ^. b) t+ Q6 n: @: i  a; p% s
        delay();) M2 E& @6 R: q0 p. v6 S7 f
        P3=0xef;" E8 J3 D. R% u: L/ @
        P0=du[m%10];
% W- y- ^0 \, c6 ]% x3 ?        delay();  T3 B# ?# d3 T* w
        P3=0xdf;
9 ?- L3 L' |% A# g. m        P0=0xbf;5 o! H( y3 j: L0 l% D/ R3 o
        delay();
# B0 a( h- [! \) D' W  F        P3=0xff;
3 b" J; C3 f% I- B        if(!K1)4 _" I* v  K  N
        {7 ?- A3 g( O% I8 |7 }7 [; |
                delay();
5 W, P* l: }! W8 Z) }9 [                if(!K1)
- G8 k( I5 n3 ^8 ?/ ?" ~1 {+ a                {
/ g1 E0 n; x  h) [6 u) h. o                        TR0=0;; G4 s& G% U7 j. m2 w) n  h
                        m++;& W+ S' P- |! z4 J4 E. `
                        if(m==60)
; f  e. o! e- B                        m=0;
  \0 A# K! ?8 A% {  k8 T% _6 i$ s                }6 a9 c3 z: b6 U" ?7 Z* P$ d, c  b
        }
. m- ^  ^. Z8 ]9 M" H+ p; |        if(!K2)3 {: Z5 @, \7 |( Q. \6 R
        {( K  _" ?' c% I1 s* Z
                delay();* ]/ u3 l# ~5 n% n
                if(!K2)+ Z' |6 K/ f9 g( q( l
                {' ]# d# @5 b9 n# S% D6 U9 R
                        TR0=0;9 ~* n% C+ E% N( ~: X
                        m--;/ ~; t" [8 b  p/ Y* |' b
                        if(m==0)
( E" L9 X8 _  ^$ p2 l, l# [+ l                        m=59;
" V* `1 y2 t7 O! d8 @                }
- X8 K- G0 ]7 U# Q& b        }- I3 R  J# r/ x% G2 c" @
        TR0=1;
) t0 t  s! l4 a& s& {6 O( e}- u6 n% d* X8 ]; U+ Y/ ^6 j, L
//========显示时函数==============//
) w8 z9 l3 Q* Q+ @! @" K+ Lvoid displayhour(uchar h)
( F. g8 P" x5 P{
: M9 l' Y2 a& [% g3 b! B' e5 {* {        P3=0xfe;8 i: Z/ M- \* b
        P0=du[h/10];" A6 m0 N6 N: R6 v) ~; F
        delay();
3 k% F) s2 E, i        P3=0xfd;5 B, d# p; ^; [- q
        P0=du[h%10];
3 a! j( `: k6 m, f$ N3 g        delay();
, _( q  }2 b  R0 [+ N! M        P3=0xfb;
  e, u  E- z. g5 Q% e        P0=0xbf;6 o- A/ g8 f1 `% z- S; M
        delay();
& u& p6 C4 ?, Q3 ]        P3=0xff;
8 o8 a8 E- q% L& G7 ~, m1 p        if(!K3)
+ k: V- ]3 ?' E7 D        {/ _8 w3 w0 j$ g' C7 D9 t
                delay();
' b( d% A& x* \1 O8 H8 F3 V                if(!K3)+ [0 I/ L- l  a2 i$ g
                {
; J8 r2 f" f$ F6 z1 a& S                        TR0=0;2 a: y! v' J6 H; E5 Y9 f; h
                        h++;
4 y* ?) J; u* m, b                        if(h==24)
) C$ ~- k. P  m$ o, M; l$ ]$ {                        h=0;
: e0 b# K, A+ i. v# C                }
2 {5 D* [& _7 n' V; k        }
% q* _( N! Z$ P( G+ r; E        if(!K4)
8 k( u! C8 r8 ~        {
9 e- G) L; t0 U- R                TR0=0;
3 g  o) C) |) v8 l) _1 ~                delay();( ?+ L2 t2 c% m; W& m3 v
                if(!K4)3 ]3 J9 P$ B( @9 n* D
                {" Z/ T' ?& q" b; t* L& a7 P
                        h--;% o& T. d; x% Z2 ^8 Y
                        if(h==0)) n* w: C8 l3 a1 X" g
                        h=23;
4 }; n/ o( v+ F5 n2 J                }, b3 ?2 L2 V, Y8 L  i
        }
! ?- h9 L. m$ }' B: d        TR0=1;
, s; P, C! T2 z, j}, `- L5 j% p4 T* j0 Z

: ~8 m+ v( ~! o9 c+ d% e+ |//=============主函数============//
" ]$ Y0 q* P. g7 jvoid main(void)5 q5 ]" h2 P, p. L- f* b- e9 i
{
: Q" t8 _+ T* U% `        TMOD=0x01;
5 g/ C8 x1 h3 \( f        EA=1;/ l& P. t( f" a, r5 [: ?
        ET0=1;
8 n, g: Y/ Y; \        TH0=(65536-46083)/256;                          //赋初值3 K# V: |2 a; K8 A! ?- }' n
        TL0=(65536-46083)%256;       
& e! @) h) t( M4 O        TR0=1;
0 h7 Q" U' Y1 i3 M. d        while(1)
& k9 x6 t5 E& x( g- x        {
7 j- v6 o# Q% N' A                displaysecond(second);0 `# [8 ?( P% o9 o4 [9 n1 d
                delay();
8 ]" d5 Y- |! a8 }5 D  T# a5 G& O                displayminute(minute);
; O  C% x6 H3 ?( ~1 I. l                delay();" o" t! z9 U- ~0 i- g, f
                displayhour(hour);
3 R. A+ y, S8 k. M5 u4 @                delay();
) I+ ]8 W: v6 i; s) V        }
: w# S0 |5 ^  X# L  y3 s}
$ @" b& s7 c! _* J  n- b//=======定时器中断子函数=================//
' B3 V! L' W( P: @void inter0()interrupt 1
+ U/ [- U8 N: h: g{
+ l  n  U+ ~( N5 T+ B, W        time++;
+ O2 o* h( W9 n4 f  v        if(time==20)
- y, a! q% _: i        {
4 V( B# ]/ n$ p# E" H4 [                time=0;* i9 b" Z! b' t
                second++;
. j! L0 |  m- h, L        }) G2 v, F) G# m( H$ ?
        if(second==60)
2 X  s/ m$ ?$ I! s" ]+ }        {! O) a2 C7 L2 w; o) m: i( H
                second =0;/ G" t& c' g! p
                minute++;  n2 G! w& `1 t7 ]  J
        }: ]9 k" U) i6 i
        if(minute==60)+ v: {7 m6 C& Y* i
        {! b5 X( W/ h' `  _2 B
                minute=0;6 r* S% o3 l2 H# m& C: _  U% Y
                hour++;- o0 m0 h; L% T; z0 A/ |
        }
3 v/ j# D1 o0 D; {        if(hour==24)- u' j" g% ]2 S. ?- V! I8 c, q* R; V4 T
        {( e0 z) N6 r, C6 `; e0 O
                hour=0;
* N& u; q5 P) Y( m4 D& B        }
/ r: M4 W! {' z, Q6 m' Q& x        TH0=(65536-46083)/256;                          //赋初值
1 @  t# U7 ]4 \  c3 h        TL0=(65536-46083)%256;        0 n: `* ^3 t( V  w3 i3 P( x( q
}

该用户从未签到

2#
发表于 2012-2-21 20:06 | 只看该作者
本帖最后由 ArthurGXH 于 2012-2-21 22:39 编辑 / ^6 L$ a  r$ m, F  n. v- p
8 G3 c% @6 W. M. |
兄弟,我来说说你的问题:   X4 E2 x8 Q% d0 |- D: t6 d) C6 b- Y2 ~
  displaysecond、displayminute、displayhour几个函数的参数请用指针吧。C语言的函数是传值的。比如:hour = 10;  displayhour(hour)  == displayhour(10)。是将当hour为10时,就将10传到displayhour函数。
$ w2 t! v! h: B9 F* _1 ^0 g+ i  改成如下: 定义时:   displaysecond(unsigned char *pucData), g, a  I* \: |8 }& \% E( ]; w- s! m
                     调用时这样:displaysecond(&second);
( _: j9 x$ [) y1 t1 G4 M5 O! t
/ b1 m* T8 M( a% Z3 l  f  请好好学一下C语言吧。
& A8 e, B( \4 x4 j
; w# u5 X2 f% V1 T+ L( S" H还有几个问题:# Y0 ~0 @( T- e) N7 B) c
  1. 定时器,请用自动重装载的工作模式。程序在每次中断赋值会有误差,会积累啊。( O) X+ N3 ~" r% A% a# X
  2. 读按键的程序应该与显示的分开,不要写在显示里面。
' E+ m$ T) l7 J( z- e3 Q4 q6 k5 j  3. 按键的去抖动不充分。5 b& b; K' _; J5 Z6 r
       4. 定义uchar 最好用typedef。
4 i# u/ t) [9 ~  M        + j- Z; X- ?/ U$ t  ?1 |$ W

; q$ N2 w9 h: ]' [5 x) D! z
5 ]; L4 V8 O9 ], X' l0 x
0 v" w, m7 k8 q4 U( ~; L. w* l# y3 M8 E; w7 Z* s; [+ {4 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-10-10 05:11 , Processed in 0.171875 second(s), 30 queries , Gzip On.

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

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

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