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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
以下是我写的定时器电子钟程序,按键功能不起作用,哪位帮忙看一下。: d; K& O& H2 f- K3 ?
/***************************************************************************
! [/ d" G. V9 k; U名称:用定时器定时做时钟' f+ k' x8 Q. r1 Q  Y5 o; _
内容,自动从00-00-00开始,有按键功能
+ A& T7 k* h+ M3 s芯片型号:STC89C52RC
$ x" }% ?( w3 Q. x功能脚说明: P0为段选脚,P3为位选脚,所有引脚低电平有效.
* f  z0 ]7 A4 H% k% ?$ k程序员:玄溪
/ x( U0 Y! C5 e+ z4 \; b% U日期:2012.2.6
$ `0 S. N& w" M2 s6 X/***************************************************************************/) Z" x4 s/ d8 [* K
#include <reg52.h>
( r! s( T) j5 `* G2 r- q#define uchar unsigned char
! e( Z' e3 A7 y, j! b- V6 f#define uint  unsigned int4 y8 m* V3 A4 @% X2 ^/ t

1 {) H$ b& _7 R% F1 N. Guchar code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
% X7 X2 t( [7 y; @0 D9 gsbit K1=P1^0;                          //分+
; L: i" E  u5 C0 _1 S1 k1 R6 H% osbit K2=P1^1;                          //分-5 x( L+ f+ @: R) y
sbit K3=P1^2;                          //时+; H+ t2 p0 }$ R, k& G
sbit K4=P1^3;                          //时-
$ [- s* A) Y" Q, _6 U" @1 I( U
+ I8 T' m( `; Y/ H* nuchar time;                                   //定义中断时间次数" G" p( K  ?: }, `+ D6 X
uchar second;                           //定义秒
; p4 M2 P- U$ v5 m2 ^3 a& t2 Puchar minute;                           //定义分
5 U; s3 Q% p4 Muchar hour;                                   //定义时
# d, c: ~# P/ L, G7 a. r  }: g//===========延时函数============//
( N5 I0 Y2 h8 S+ ovoid delay()8 A4 s# ^1 M& a, z
{# Y2 N( y6 S% ^9 J5 Z7 s; ^
        uchar j;; \9 W( P% S* y+ U
                for(j=0;j<200;j++);
2 I2 @4 a. R0 q9 d. W, }}7 l6 K4 y7 H2 Q* h# s* U. y( e
//=========显示秒函数=======//8 ]; G6 |/ N* c  ?2 [& P* h
void displaysecond(uchar s)                         //带返回值  W  e% F5 f( U1 K
{
/ ]3 z: j) V8 s1 T  U        P3=0xbf;4 S. B) @7 `, M4 l/ I' ]
        P0=du[s/10];# Q  c, R5 B" j4 S! {( j$ \
        delay();
0 V6 o0 f% Y- E2 C        P3=0x7f;- |2 d1 h. W, U
        P0=du[s%10];
4 G3 M; r2 j' P* y- _  b# t( s        delay();
, F, h5 \( G% _        P3=0xff;0 o) f  J0 ^) f8 b) t4 k2 r; x
        if(K2==0)( \# z  U% i4 l3 k
        {! x9 g) m5 g$ l  }& K% j3 A1 X
                s++;4 K) n! x3 M+ e6 j' B0 G* [
                if(s==60)7 z; D4 }% x% ^' Y. ~$ F. a- s
                {
+ x7 l4 V7 e5 H0 j$ v' ~                        s=0;
; N8 R/ ^/ v; R% _# R/ x                }" Z% S8 D+ Q, P% j1 E/ ?* U
        }
! {+ V1 ^& s& A: X* e}8 t1 ^2 ]/ f7 s2 z3 V$ }5 m: |
//========显示分函数=============//
6 E' R3 T" o  E1 ^# Hvoid displayminute(uchar m)
/ m" P; ?( o# N9 ~{
1 C6 {4 o! V: |/ S8 Y$ m* X+ t        P3=0xf7;  N" y! d* J" K6 |2 y5 G
        P0=du[m/10];
0 t6 C: P: h, c& e; ^        delay();
; y  i2 _! |9 y6 q        P3=0xef;* j$ C6 H8 K3 s; [1 G. P$ `
        P0=du[m%10];
7 y! F2 E$ o4 E4 \: T        delay();
- j* o0 x3 i; n+ X        P3=0xdf;& [0 A0 r' d1 N. V  U
        P0=0xbf;5 \% n% \5 |" z1 n4 N0 J* ]
        delay();
# p9 m. C; `+ B% K        P3=0xff;
; H! Q# a. D; D, e: j0 m% Y        if(!K1)
8 S* q' U4 I- \; F' d: q# X1 q7 w        {. v9 b. p- M5 r6 T
                delay();
: w$ P' c* L" z4 `4 n) u                if(!K1)
0 o! L, G* [+ x; A( h6 f                {' K$ Q1 ^) e( t
                        TR0=0;& O: d' {+ ]: `6 t0 @- _7 }7 V3 |2 t
                        m++;
& M+ }& f, L% v5 o, E                        if(m==60)4 l5 Y& p  m/ J! C* Y$ S6 g/ A& V
                        m=0;9 N! s! a  V! F! N! `) `2 v
                }- V) a7 ^! `$ K' l+ K% ]; i
        }
# A& @3 I- a: `; k6 I        if(!K2)
" }5 }+ ], O2 u; L4 P        {% W" C8 h4 f* W! u% H- p. d
                delay();
: [  d( i! L4 A$ v% z9 J                if(!K2)0 M9 a# g3 y0 N7 _+ j2 K1 h9 J5 P
                {' E! o# {9 t2 R5 f% C+ ~
                        TR0=0;
8 q/ D; C2 S% R  C' w. P: i- @5 `                        m--;
! N6 E4 n$ Z: Z+ K                        if(m==0)
+ S" U3 T, d4 p6 V# {2 g                        m=59;
; \7 D, T6 s  r& {1 z  b9 }                }
0 u! x# A1 W! R6 ]  s- m: k6 H        }
" i+ M! ^- ]6 H' X5 n: O        TR0=1;
0 K  J3 a0 @7 X8 I2 j" f}  u# F* O4 }/ m5 }1 U$ p1 Z
//========显示时函数==============//
8 c  @0 ?: k) Z5 U& }1 a5 N# Bvoid displayhour(uchar h)! V# J! J6 z+ r2 |3 h1 B
{
* `' v+ N! C) }6 g1 e! a        P3=0xfe;* _% [' L. g. ^, P8 X, l
        P0=du[h/10];( @- ^6 n# Z2 B$ T: Y
        delay();
& C' }; D$ V' Y! l/ \3 F        P3=0xfd;4 X2 T1 ?0 c7 l
        P0=du[h%10];
8 \5 Z, w4 x; ^, B( ?        delay();
3 P7 ]- Z( R1 d# b7 x        P3=0xfb;
: \4 G2 K+ v& [- j) P3 ]' i5 I. P        P0=0xbf;
) `& F. A( q2 k! M        delay();* R5 B- U& h& B
        P3=0xff;9 L5 `9 i3 b! t6 y1 X. U7 _
        if(!K3)0 \4 g/ [8 l6 t9 O
        {
0 b6 u% B. p8 _) P                delay();
* N( o+ X/ @; y6 `$ M                if(!K3)
7 Q  M" t( v3 T1 l                {
! V* q$ L% M7 R  G) f2 d. m% c                        TR0=0;# v1 R2 `# K4 L3 l; A7 ?
                        h++;
( N# \4 h0 n( o- _0 T5 D) O$ g3 Z                        if(h==24)! J8 G+ |* o& C
                        h=0;: M- J! J& X1 E* D/ v
                }
  j/ c  }2 T. v3 ~        }
$ y  b! O% r! e! A$ G4 ~* T0 v        if(!K4)
; A9 L6 b+ z3 U2 Y) V/ S( j& J        {
; n" R4 D( l, f0 S9 j  Z4 y9 A, ~                TR0=0;
' B3 x, F. h3 ~& \- ~. J                delay();- Y- I0 d3 b, d6 W
                if(!K4)
% o9 H" k9 Q$ B& U" A& g                {
6 B, D4 {8 m5 H& s. a                        h--;( d4 V6 F7 ]9 `8 P/ |! \2 f. t1 q
                        if(h==0)* [" {# r. j; ^9 |
                        h=23;
6 `+ {5 z. N7 G# R, _; I- f  X                }
5 E: p" b/ ~( j8 g, s. j$ ~, N        }
4 S' i2 c# Z/ s1 k        TR0=1;( ?3 a( `5 ^6 ?1 ~% |# R/ a/ V
}% J( C6 U+ k' v! B

+ n* b5 _9 D  `$ F//=============主函数============//5 e/ ~1 i" P* Q5 d
void main(void)' d& w" R5 X' [5 F* R# K3 C: @' S4 b& b
{
. k6 Y, }2 B* T6 u. G* g        TMOD=0x01;
" p9 X$ r$ w# f7 [        EA=1;
; ^. C# Q& J2 M, h% Y& c        ET0=1;
: `  M& ~7 _+ m+ B        TH0=(65536-46083)/256;                          //赋初值
+ z* w) S  x1 I6 U( X        TL0=(65536-46083)%256;        5 D$ Z2 K# ]9 f
        TR0=1;6 E2 h* _: Z  \9 N- [
        while(1)) B5 ^6 `0 }' o7 f
        {
5 |) @* Z0 B) W1 O                displaysecond(second);2 v& _$ H: R8 ?' e' Q
                delay();  ?8 Q( F, ^: {" m  v
                displayminute(minute);
8 a' m: i7 X3 g/ ]                delay();
* D5 Q+ t9 v3 W! S0 n                displayhour(hour);6 z9 `5 ^/ O3 G; @: m+ K/ N
                delay();* Z$ V* ^/ x4 s, F" ?
        }
% W' ~# X$ p% ?8 \* `}
+ i( @  d- n9 n+ M( a+ @7 ~" B//=======定时器中断子函数=================//1 p0 d& I8 g; X6 K. B5 v
void inter0()interrupt 1
5 I( l( L9 e" b{
) W1 s( Y. X. E4 {        time++;
1 b! `: e0 s; |2 R% v7 P        if(time==20)( Q% ^/ y, ^9 N- [4 s
        {
7 `  G# e" z3 `" D" j- n                time=0;
; X  }+ E2 G1 _+ b* U                second++;2 j% x! a0 u0 e  j
        }3 M( T$ T6 V: t/ O: S$ k
        if(second==60)
; O3 \' \. k$ `; W( e        {" `' c' V- [$ E9 Y. A- u
                second =0;
* N8 {. V; y3 _7 r                minute++;- u8 W; L  l2 I" }9 j+ n
        }
& c) A; {$ v4 G7 r0 Z" Y2 m+ q        if(minute==60); s7 K% w/ w* U5 D
        {
" M- E% i7 p# j, \5 ^5 _' l                minute=0;$ t+ A7 l% B$ x$ ]% J9 S, _: K9 @9 \2 p
                hour++;  h& T% h0 l. ]/ x6 K
        }
) p, y4 J! L5 V9 ^1 l        if(hour==24)7 F2 k; V7 y/ \" B, s* L
        {
3 N: u- k3 c8 Y( F1 r& k                hour=0;
, [' h8 r; z- a; r3 p& a! E        }
; {" z, ?3 L0 T# `9 `        TH0=(65536-46083)/256;                          //赋初值
4 i2 A- N+ W. z: {8 S# P8 `        TL0=(65536-46083)%256;        ( ~. x; C- v2 V% Y! `
}

该用户从未签到

2#
发表于 2012-2-21 20:06 | 只看该作者
本帖最后由 ArthurGXH 于 2012-2-21 22:39 编辑
" ]% C4 E* c9 z" U7 M. a
# f- s% r( _: A( s$ @兄弟,我来说说你的问题: 
; v# C8 e! e6 o, o9 S4 ]  D  displaysecond、displayminute、displayhour几个函数的参数请用指针吧。C语言的函数是传值的。比如:hour = 10;  displayhour(hour)  == displayhour(10)。是将当hour为10时,就将10传到displayhour函数。
# I4 Y! s) B7 [, D( [  改成如下: 定义时:   displaysecond(unsigned char *pucData)
2 U! @; q. f* }# `0 q, q" C# r$ z                     调用时这样:displaysecond(&second);. R; t  _! i# _! {% N( o

  q6 v2 P( j0 [" @1 x7 B/ _  请好好学一下C语言吧。
2 F5 F! }/ @- f8 }  c  D8 e- T2 Z. _) E+ o; [2 m: k  \
还有几个问题:5 s5 {  c! ?/ X" Q2 S* w
  1. 定时器,请用自动重装载的工作模式。程序在每次中断赋值会有误差,会积累啊。
& a' `1 K- p8 F% n0 w: L# v  2. 读按键的程序应该与显示的分开,不要写在显示里面。7 g  g% ]  q6 U+ M, s
  3. 按键的去抖动不充分。8 x: t* N+ v4 t: K- b( C! r, L
       4. 定义uchar 最好用typedef。
3 `, n. T' M" v- E8 s7 j/ z, D7 T        
" O/ |3 n6 `3 f$ ^$ l2 W5 b% c
5 k+ N3 N% }' B8 b) h1 t
8 N4 N" R, Y( Z# b. z$ N8 x+ I4 \0 H( w; {3 y. }% P2 `* k
4 ~! k1 f0 ]' ~5 b' H2 v! {- x

该用户从未签到

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-8-19 21:20 , Processed in 0.140625 second(s), 30 queries , Gzip On.

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

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

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