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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
以下是我写的定时器电子钟程序,按键功能不起作用,哪位帮忙看一下。$ m- y# b5 y; m- T4 \" i( ?
/***************************************************************************. l* O; |5 h* e+ w3 @0 t
名称:用定时器定时做时钟
# Y) R% _4 D* x- ]内容,自动从00-00-00开始,有按键功能: _' E3 C( g/ C; b! v9 w
芯片型号:STC89C52RC
* X' b5 A/ o9 d) z/ y% Q. j功能脚说明: P0为段选脚,P3为位选脚,所有引脚低电平有效.+ Q& Q+ H4 H- D; u! `) }9 `, L
程序员:玄溪/ P+ a, c6 I4 D
日期:2012.2.6) `; b% `$ z8 E$ q, {) {) o6 k
/***************************************************************************/
3 R, x# J, J, W$ @. w: b#include <reg52.h>
- g4 U0 R! ~% Q  f6 ~: V#define uchar unsigned char 0 o8 \) L. g, D+ i, g
#define uint  unsigned int
: c6 S' o& Z" f) B! a+ _; k% |  N6 ~/ p- u5 J7 L! ?
uchar code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
! `" B1 f$ @  O; F; f9 E$ O( tsbit K1=P1^0;                          //分+
6 ~. E! ^- N. l  l5 K/ tsbit K2=P1^1;                          //分-
4 E3 d) h0 g3 _. i! U& m. ]; xsbit K3=P1^2;                          //时+- z; G+ {) Y5 e$ h2 z6 J/ N( D
sbit K4=P1^3;                          //时-
, u1 D5 ^) C) |/ {' j
$ D. m. p) A; ]8 i' ]# kuchar time;                                   //定义中断时间次数1 c7 m, O) [( L, P! s
uchar second;                           //定义秒
$ C5 v  c$ e* v3 duchar minute;                           //定义分
5 s( N: \- \* U% O& Z; Quchar hour;                                   //定义时
& F/ _3 H/ d  a# o//===========延时函数============//7 m! o9 ?1 j; ]5 t- w4 ~
void delay()
# m7 H% T7 i- f{
( o1 |1 T3 K9 m        uchar j;
& b# i5 N! {) Q9 o7 m# Q- G                for(j=0;j<200;j++);% I* j9 E+ \9 Q$ {
}1 n* d8 H, Q1 f1 H
//=========显示秒函数=======//0 I) N! ?0 `1 z; I
void displaysecond(uchar s)                         //带返回值
8 q* ^* _4 p) U9 c{
9 S, R8 w6 Q: n8 l2 B9 n) [        P3=0xbf;
& u8 [- Q1 c0 Y; m5 a3 v        P0=du[s/10];" Q$ u0 i3 M6 @4 k4 r8 `3 D
        delay();& q, Y: h: A* A1 p* n& X; H  a% z
        P3=0x7f;
% A- W7 o6 X  w# [/ w2 w        P0=du[s%10];8 B1 ?$ n+ S4 n; {8 ~. b
        delay();
0 L6 m# V1 A6 ~. |. _        P3=0xff;
! T& C# y& F& o, b* ~5 \3 Y( K        if(K2==0)
, R  x1 S1 @) M' @        {
/ h* ~: s, w1 p' ?  Q                s++;* ]$ l% R; k0 A# P* Z6 }; n4 Z
                if(s==60)
7 S; W# N5 z/ B9 S& q                {
8 _, t4 F+ u- r7 B                        s=0;# b( t8 K  ]( Q7 ]
                }# a2 k6 R) M3 Z  A7 l6 }( A& U
        }! G9 ]6 q* S' J
}
9 s/ z7 X" f3 p, O& D8 f# e* a//========显示分函数=============//
' d% k4 F( b$ V% ?void displayminute(uchar m)5 _: l' Y& m7 F" \
{0 W5 z% z' P. D& d
        P3=0xf7;8 |- r3 o0 Q3 s
        P0=du[m/10];# U4 H) T& H7 n' E! {/ ?4 l' e9 U  j
        delay();
3 t; Z% s: j1 \2 y( ^" V: u        P3=0xef;9 j( y7 u# W* p' ?. j+ h' s
        P0=du[m%10];
$ W1 @* K% \- }% b# U        delay();
( X% W# G, x$ i. \% M        P3=0xdf;
2 ~' w( u( x. v( M/ `/ a8 c/ i        P0=0xbf;; A* \  F# \7 V) R
        delay();
7 B9 ]5 ]& F  [' x( C3 p; U7 q5 O        P3=0xff;
, D6 c" M, Y5 q9 ^8 j        if(!K1)
  R, H! L& q1 I        {5 s/ V' O: l6 M* y
                delay();
+ V* `' q9 o9 T1 N                if(!K1)0 ^8 L6 v: J7 K
                {9 `0 ~8 `5 V; _5 [: i4 O
                        TR0=0;5 J9 e+ M+ U7 v" N
                        m++;9 A, d- E. r  d% D, g7 {. S
                        if(m==60)% D& L: N! p9 r( F
                        m=0;
# `" F1 w. n: d                }
* n8 ?3 X2 H: }1 ?        }
# _# E0 D5 p7 ?, y+ x, L        if(!K2)/ r7 v9 |9 W; I# Y$ j# P
        {
" q1 e% b0 ~6 ]8 R/ y8 v+ m" m                delay();' s7 ?7 ]8 {5 z: {6 ?. {: z
                if(!K2)4 d/ E6 A) C2 a  p  L' Y7 e( R
                {
/ ^  T5 M! n8 U/ B9 L/ S% h                        TR0=0;
; v" E/ P4 n$ B9 H! S, h+ s+ \1 g8 z                        m--;6 l) o% @3 f) z; E; F! _& H, M
                        if(m==0)- ^8 `% z" q$ n9 a
                        m=59;
6 r3 f- }' E2 r% q9 D                }; O; R+ W) U# |7 o) V0 Q
        }
8 F5 I& f8 m/ `  {$ x/ a        TR0=1;
2 ^3 E4 l8 Z3 L& g; K# ~# ]}5 ?9 M4 t2 G) D3 M4 a& i
//========显示时函数==============//+ Z. Z* x" @6 w- T( F4 Z
void displayhour(uchar h)8 d! t1 K, K2 @3 _$ d% l
{
" B3 N3 |- K, B8 l+ R        P3=0xfe;
$ H2 V- G& X# n& L! `* X: }: x        P0=du[h/10];
" z1 y, l: k" N        delay();
+ R* j4 ?+ L3 @4 O4 m        P3=0xfd;# ^1 @0 R( X, ]6 c  p4 D: G! b
        P0=du[h%10];
# j4 h' P' v: S) T2 s        delay();
0 y5 g) x- z/ l# t! @- v        P3=0xfb;5 U$ `# L# ?# f3 j4 o# R+ s
        P0=0xbf;$ B5 y1 m3 O! X  M3 `2 L+ W
        delay();7 {( z; o, ]  [; J+ i$ \
        P3=0xff;$ r: }# I$ t7 p2 s3 a
        if(!K3)
; `) w) e- C( ~9 v7 X6 Y        {
2 H2 H, @" Y3 g; B: y0 V                delay();
4 K* ^2 M7 O# g3 U$ R: n  e                if(!K3)& k* H* K: H3 m8 S& b
                {1 w( E/ t. l9 p* j: Q' ~7 U
                        TR0=0;
  S  X( X6 S, C9 f5 {                        h++;: a- G% ~' W* _0 W( J: h  c3 L
                        if(h==24)
) n; @6 ~- X% `9 e8 p/ X- P, V                        h=0;
/ w( U3 _* G* Y( Y                }
+ z5 }' N& G$ `# h( Z- d        }7 W+ i4 u& x  M* I; K
        if(!K4)9 S, j7 t# D; Y- i
        {9 U! k$ v4 `- _- F( {5 w: S
                TR0=0;
% {: B9 @; q6 O  ~- g- C                delay();% b. o) `! v# f& L& q3 n8 z
                if(!K4)8 d9 [9 j8 H4 ^$ ^
                {
7 e) p$ e$ n" m, E' `: a5 I0 H                        h--;  d  r- Q/ V+ A8 y( m( L
                        if(h==0)7 |1 l$ ^  ~' d! L+ I
                        h=23;
$ G$ L! P, |' g7 o$ L4 z( b                }) u0 M: \2 K+ {3 K
        }3 o: B" z: l/ q
        TR0=1;
- t2 q$ D8 o1 O9 z$ H}: p  Z5 |" o" @

; R0 c7 @& A& x1 {/ ]//=============主函数============//' X- l( Q9 w% o2 M' P( c# o
void main(void)
; P- P8 ^0 \" X5 H{
1 O+ W. {5 U5 T7 m$ P' O6 F  p) X  C        TMOD=0x01;
! K8 [! A( S8 T; B1 Q' B3 v        EA=1;
8 W7 {# P0 ~, x        ET0=1;  D  T0 r' K- K; I0 |% A1 B# P0 ?
        TH0=(65536-46083)/256;                          //赋初值, ?, S4 e# d7 f& z' K" V
        TL0=(65536-46083)%256;       
- f, Z4 s" w% m& N        TR0=1;
- z( h8 r0 G) u( N) y        while(1)' p9 l0 |4 M( `2 p: s* Y( t4 x
        {7 r1 _, a" `+ p# p4 g/ B
                displaysecond(second);
# ^( l* s4 C3 J) Q* o! E" w5 l3 N                delay();7 `3 C6 O! i1 c# l7 S1 f$ P; }9 a/ ?
                displayminute(minute);& S% i$ I& G# z; n4 j
                delay();
0 T2 x6 N. B. n                displayhour(hour);4 W( A" i' }, G5 @2 j8 }$ T
                delay();
+ A7 ?1 k: Y- Q7 m* n" @/ ~        }2 ^3 g. ?3 }) S6 D5 }
}
6 z) g: `6 U8 p  B! X' C$ f! B/ X//=======定时器中断子函数=================//; }7 u3 J% D8 i& m
void inter0()interrupt 1; o% M2 ~# T2 I
{
! [9 D0 H3 G3 w) [' p/ p! V3 |        time++;: T" e# s$ Q% E8 X/ X
        if(time==20)9 ]' v, n  {1 f6 C0 n
        {
: q! ?- w7 z9 F; g0 h& y                time=0;  N6 S' }& W' d1 O
                second++;
5 q. l# Z, E) J6 U7 i3 |  C        }
- m: O5 ~4 o# d# g        if(second==60)
' ]/ l* h0 ?- F+ r        {. V7 o: w0 w( m2 e
                second =0;
/ ^& r6 s7 B. o: y                minute++;
& J  F* d" ?( F2 i  y        }8 f$ e% O! ?" @8 x6 O
        if(minute==60)
) V. U. f' }5 ]# @2 a1 Y        {
) U! E8 @* [' X+ G                minute=0;5 E- I( Z! c% ^  a
                hour++;
/ s/ n9 Z9 W; a# h, {  J        }; a" `, P, d. U; Y- K
        if(hour==24)
0 Y3 [9 m9 `' J) D/ ?- i        {
, A  k4 h- ]* D( ]* `' _$ h, j                hour=0;
1 a; ]+ S/ M. c. R3 I        }; N6 t, U' E, J( P' u) a6 b
        TH0=(65536-46083)/256;                          //赋初值2 q# v0 b5 R: J: d0 B0 ~5 f, Z
        TL0=(65536-46083)%256;        ' @  I9 ^: w+ n( Q
}

该用户从未签到

2#
发表于 2012-2-21 20:06 | 只看该作者
本帖最后由 ArthurGXH 于 2012-2-21 22:39 编辑
! i4 `8 s, y5 r. c; Z4 J) A& q5 h8 X9 G5 ~: I9 u. R
兄弟,我来说说你的问题: 
% u5 j0 ^' {! y: |/ W: S8 N. B; \  Z  displaysecond、displayminute、displayhour几个函数的参数请用指针吧。C语言的函数是传值的。比如:hour = 10;  displayhour(hour)  == displayhour(10)。是将当hour为10时,就将10传到displayhour函数。  A/ v9 Q4 Q; ?* K- R
  改成如下: 定义时:   displaysecond(unsigned char *pucData)7 ^0 `! W) s/ F# M; u  D
                     调用时这样:displaysecond(&second);, T# B9 Y0 C6 W

* N+ ]7 f; Y: q; t  请好好学一下C语言吧。- x: f1 ~$ z  m5 H

; C5 [, Z1 I. r( @% C还有几个问题:
% [. W$ U2 ^* x* t  1. 定时器,请用自动重装载的工作模式。程序在每次中断赋值会有误差,会积累啊。
% Y+ p7 x" u2 ^& l4 L2 a" f2 W( d  2. 读按键的程序应该与显示的分开,不要写在显示里面。
9 \/ [7 X0 b9 H0 H5 G  3. 按键的去抖动不充分。
7 w% {/ c7 M! ]5 g" V       4. 定义uchar 最好用typedef。
# t& {. l" p$ z8 K  C" {6 w        8 G5 x& i: D; ~! ^1 q' A

7 u) ]$ c0 p% K: Q+ A/ D
+ h' j/ L" c, Z+ v% l# x* ?8 k2 ~3 l0 Q" H, L6 T7 Y' j( L- v

6 P4 G7 D) O$ g- d) f+ c8 m

该用户从未签到

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

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

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

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