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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
以下是我写的定时器电子钟程序,按键功能不起作用,哪位帮忙看一下。
7 h, B) J0 o! k7 k1 O3 d& ]# F/***************************************************************************7 T8 a0 l6 w& S$ K& Y
名称:用定时器定时做时钟
0 H' u) ]3 }$ A内容,自动从00-00-00开始,有按键功能
) Y8 m4 v# ~+ i, f芯片型号:STC89C52RC1 a' d9 `9 {8 f3 ~# c2 b
功能脚说明: P0为段选脚,P3为位选脚,所有引脚低电平有效.
* f$ D" K/ f& n) X* Y( i. x程序员:玄溪3 H! R3 P: R! q! v5 V+ T$ p; A  a
日期:2012.2.6" w. c+ g, k) L6 I* n( [+ a7 ]5 @: G
/***************************************************************************/
* [6 Q& i+ D$ F#include <reg52.h>
; X$ R% {1 K9 t6 v! C3 p: l#define uchar unsigned char ( w# e1 ^: Q4 }% c( w
#define uint  unsigned int
; I( j2 J0 }  d) K: v) b* q* j# f( I: e* s
uchar code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};0 h& Z- Z7 O1 h/ ?" `) |( I- q
sbit K1=P1^0;                          //分+
2 ^" s: m7 I+ h0 Q# g) S, z$ s- Osbit K2=P1^1;                          //分-, Y. A1 u: x0 M+ C. o; S, ^
sbit K3=P1^2;                          //时+* M& p3 d3 E1 T: i
sbit K4=P1^3;                          //时-  E: W: D* g% H, `$ O; R

) y2 z$ s0 M. a4 D7 C" |# Kuchar time;                                   //定义中断时间次数+ q8 L, s7 a7 `+ }1 q
uchar second;                           //定义秒
) X& f! q) P3 v% P# |+ ~/ G( s' Cuchar minute;                           //定义分
/ a! |! {9 q8 vuchar hour;                                   //定义时2 f; t' ]3 Y. o
//===========延时函数============//; m& H& U- y+ [7 R
void delay()) Z! E, n8 ^$ P- ]% n8 ~$ C8 L# _
{
$ }: v7 o6 [7 d* v        uchar j;
% c4 }! W& D/ m3 E0 S                for(j=0;j<200;j++);# d4 g7 e# E" O
}
( e) G- ?4 N$ r8 U, ?9 v* j//=========显示秒函数=======//
& v- H- K$ j( y" l4 v$ Qvoid displaysecond(uchar s)                         //带返回值+ j" X9 P5 K1 k
{
  Z* L% V5 s" B: Y% p1 ^* V8 `        P3=0xbf;
! h% K2 O+ u* b- ?8 ~3 C        P0=du[s/10];$ @$ b1 R& ~5 G# H/ Q
        delay();
  {5 p& `$ a+ _7 L. I' p        P3=0x7f;  F7 C: ?1 c. A* N: _
        P0=du[s%10];9 U3 m8 `, w2 b+ e( q- G$ `/ ]/ U* Q
        delay();. _" q6 I; I, m% K5 ]1 d3 s2 v
        P3=0xff;
6 s4 ?* J! ]7 o. ~        if(K2==0)) ^' f: Y: y- S# E% [; h$ k  Z
        {5 s$ Z% j2 Y' m, [  o, v, _
                s++;7 a, `9 G! m% p( j, }- s
                if(s==60)
$ N0 r2 z' ]# q( D, a$ t/ e3 s                {
! r* T8 J0 Q% k! s. {' K( h                        s=0;; f) a* t$ v5 ~% g, N  M/ A
                }
9 [4 T3 x% u8 K1 S5 B) F0 N2 Y        }$ h  d0 }  j8 F( v5 s( G
}
1 N& f  _1 \( ?- o- ?% s2 @//========显示分函数=============//
: Y3 q% u& y' Q- e. hvoid displayminute(uchar m)
1 j& ?+ c" p* z9 a: h{: V" f& E3 V8 x) R* j, U
        P3=0xf7;" e) f" K; |0 }# o5 V
        P0=du[m/10];
$ C' c. f' C% P  m4 U        delay();
+ ~. T0 F5 C/ y1 n  y, X        P3=0xef;/ }' l3 ]- Q! g% q$ f
        P0=du[m%10];9 d/ ~% d& s/ Z7 J+ K) H) q
        delay();
* o2 ]1 }6 [- T* k& ]: J        P3=0xdf;' g% h" [. ]% d* \
        P0=0xbf;# ^) y8 E" v$ X/ b9 ~1 E0 `
        delay();
7 \/ a$ z# r2 a        P3=0xff;" T+ T# s" J3 {4 X2 T( T& ^3 h
        if(!K1)1 s( p: q2 l% D2 l! t1 J1 v
        {1 c* M8 ]/ w) S8 a1 H
                delay();
1 j' ]* H) i. o7 e* |                if(!K1)
7 U# h$ S, t9 O, H' o" r                {
; |( b3 s1 ^. x                        TR0=0;
. b% E7 k6 E3 d                        m++;1 |$ T0 `) \& L) i1 j. @
                        if(m==60)
( v( \/ P& U+ }( ^9 M) A3 V                        m=0;
' `7 F$ y) G  v- t+ g( T9 y                }
* T, g2 W: H0 H        }( R; v4 f( S! p, @5 i! f% e" }
        if(!K2)' u  s) V: d. T/ t) i; e
        {9 z$ X: g' A  V! o9 s! y
                delay();
4 K% t8 O0 X" K1 K: Z) n1 Y0 N                if(!K2)1 j, u# a% n" a+ m9 P! P- a7 K! L; }' E
                {- J) R4 b- u& `- T
                        TR0=0;
- d8 R7 z/ D' A% {                        m--;! D6 N6 R+ g" }5 A
                        if(m==0)  A8 u1 Z  G5 D$ |; I
                        m=59;
& s& C( a( u& w                }* q/ k( y  Y; b- ?0 h
        }$ Z# h- C0 V, x; w" [' \) f
        TR0=1;
9 p4 Z2 P; a# Y( F4 Q$ Y' S- {}
3 a7 l" ]6 N; A7 i1 b6 r; A$ t$ D, \//========显示时函数==============//6 @/ B' K( E. D: w
void displayhour(uchar h)
0 f+ z7 F4 K" d2 h( h$ Z8 F{
8 o- Q1 R8 I. {" l% A        P3=0xfe;
5 c6 I0 e( [% n8 u        P0=du[h/10];
3 z" j* D8 Y1 W& T2 Q3 J        delay();( k2 Y- q: }$ {& {! S
        P3=0xfd;
6 ~, D# }2 D9 r) @        P0=du[h%10];2 M% ?; }7 [( H0 r# s7 b
        delay();
4 E5 H& E: Y( i        P3=0xfb;
4 y- j3 P; p! S        P0=0xbf;
2 x, B/ N5 y$ m  E$ a5 a! o        delay();
2 D9 l, Z6 H7 S' A        P3=0xff;4 \, J$ R: f' F% B
        if(!K3)
  j( g  V) C5 V, t& k& g1 c/ C        {
- ?) T( O! f3 ~- _. }  H" g                delay();8 m0 M% \/ C9 I' C- \6 P0 G
                if(!K3)$ T4 ]+ q) V6 x$ _
                {8 E' X( w0 W/ P1 Y2 ~7 Q- O
                        TR0=0;2 P0 S  I  }1 Y. \
                        h++;
3 f0 E8 o* h. L: ^                        if(h==24)
5 g& B9 k# P# [                        h=0;
: D4 |0 d+ o: x* r6 |9 j                }
* \5 a7 |! S/ `5 W" h        }0 B! T% Y# h! p+ r" i3 p3 t, l6 z
        if(!K4)
4 D1 A, V" ?, E# i9 i+ T        {
* h) R& [, t8 F2 d* q$ q                TR0=0;
9 {8 i$ M  \- O% H                delay();) L. L: L. d$ K- r. K# m
                if(!K4). O; l% M9 k  F# C
                {
  u# ^: c, e$ A4 k$ n9 x                        h--;! ]" r" }) o5 @- k: g  `
                        if(h==0)
2 |  h1 ?. N" o& ^                        h=23;
  c! S/ B- L1 C$ m/ m$ `6 A                }3 h0 G3 c9 f4 Z, K: R
        }/ |, j' ]3 S2 l! I' k
        TR0=1;/ C+ @$ k5 K, T/ N' N
}
/ L4 t1 d( F& y9 P2 g
7 o/ V7 M7 m6 S+ u//=============主函数============//
8 |6 d' o, P6 J5 `; b: W7 Avoid main(void)1 }4 ^* n' M5 _- J4 J
{
/ i: j  f' j4 W! L0 k3 A  x( E        TMOD=0x01;
7 z# V2 o- n" ~% W( N2 s0 N( u        EA=1;
' _) J2 Z( k2 z# o        ET0=1;" p; {$ K% F6 L! h8 u6 t# h8 G. Z
        TH0=(65536-46083)/256;                          //赋初值
2 W9 F1 ?' S  }( r! Z        TL0=(65536-46083)%256;       
1 e$ K  W3 r9 N; {        TR0=1;
; C$ G# c( X: h' Z/ ]* o- Z        while(1)" a3 Z' m/ E  U6 g9 m- l1 g0 `
        {
6 |& t+ H# v8 i: T' E5 q: K0 y+ a+ O                displaysecond(second);7 i2 y/ C, g* q* O6 ]4 n0 u6 M& C8 Y
                delay();
" @/ V  U7 \# b  ?9 d% f: ]5 ^                displayminute(minute);
6 g3 z' `. Q" o3 d8 E9 o* o                delay();
3 @7 d% Y( e* I* J                displayhour(hour);
/ |& U  `& \% Q% S/ j                delay();: h' \8 ?1 j6 S; k$ ?
        }
" B, a0 b4 Y4 {. r1 p( R+ H}
0 V( _! L6 E6 ?# w3 }  N, u//=======定时器中断子函数=================//
) g- C8 h1 \$ I+ W, [6 Cvoid inter0()interrupt 1+ j; j$ w" w6 J" R6 R9 R  c
{
6 e0 J) |, A: f3 M' y        time++;
6 f* l& g, y9 P  n' N3 `        if(time==20)" e3 h: _7 d2 R
        {" x$ O$ W- ]$ S% v2 |
                time=0;
- U4 E2 ^& _1 J' w8 O# T- n5 A                second++;
! C- X6 Q) z: [& @        }
  ]+ c% J8 `1 T2 j        if(second==60)7 L/ o6 k! ~$ S8 @- ?( G! H) w
        {4 u' G9 |; ]: E5 h, U) _5 E
                second =0;
1 g% C: Z" E1 f, V( o3 F  t5 K                minute++;- V! V2 L6 U5 K5 @
        }: B6 p& u2 c: A
        if(minute==60)
0 ~+ ^# B  |1 {2 C9 A3 @        {
) F  i7 X+ S' A% S% k                minute=0;) m. C/ D0 l/ ]6 l; Q
                hour++;
/ k( y1 j! I( e, B3 o        }: W2 D' @9 w1 |% c& {7 k4 o4 \
        if(hour==24)% Z  U9 T9 Y: K4 V& D( p: c
        {* R1 \1 f+ R% Y* i$ w9 a
                hour=0;' c  Y' j/ r6 h2 ~
        }
8 W" ]! G+ C0 c6 L        TH0=(65536-46083)/256;                          //赋初值
6 _5 F. ]5 X0 X0 _0 [        TL0=(65536-46083)%256;       
0 B8 P- \0 Q5 [/ l}

该用户从未签到

2#
发表于 2012-2-21 20:06 | 只看该作者
本帖最后由 ArthurGXH 于 2012-2-21 22:39 编辑 , b  b2 @1 y, o1 \
8 Q6 B! F* D( k: N7 R& u' ?$ h
兄弟,我来说说你的问题: : c0 i! ?" l: n6 E
  displaysecond、displayminute、displayhour几个函数的参数请用指针吧。C语言的函数是传值的。比如:hour = 10;  displayhour(hour)  == displayhour(10)。是将当hour为10时,就将10传到displayhour函数。
' A6 y0 J1 H0 `8 o/ Q8 z$ w  改成如下: 定义时:   displaysecond(unsigned char *pucData). P$ l0 f/ {" a/ m- x
                     调用时这样:displaysecond(&second);
" \7 f& ]: I- v7 ~7 R6 h" U
; z& I  G/ S; s* j, q2 r  请好好学一下C语言吧。
3 R$ G( @4 B: X! Z$ @+ O" v
' |' b9 g* J0 K+ N5 [还有几个问题:
. s6 O) J5 R1 ~$ J  1. 定时器,请用自动重装载的工作模式。程序在每次中断赋值会有误差,会积累啊。/ V6 g# @9 \, |/ B$ f* M1 p, z
  2. 读按键的程序应该与显示的分开,不要写在显示里面。5 ~$ f, C6 }5 H9 j! E: K, V" N
  3. 按键的去抖动不充分。
. p7 h2 {/ ~8 K+ C- G/ R       4. 定义uchar 最好用typedef。
8 ^/ ?- Q3 r! R/ y0 i        # ]  }( f4 k/ p! p
& h8 v' K! X' c4 ^

( N9 c1 y/ [& B+ d4 u! Q
5 b$ [2 o0 `) j% b# B
6 k# s) C- Y1 N7 z$ g% Q

该用户从未签到

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-6-27 21:34 , Processed in 0.093750 second(s), 30 queries , Gzip On.

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

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

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