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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
以下是我写的定时器电子钟程序,按键功能不起作用,哪位帮忙看一下。
8 v& W/ G, H- D3 A/***************************************************************************5 B' Y+ f6 i2 s$ s+ I3 T
名称:用定时器定时做时钟) Q3 }  r0 J! T+ f
内容,自动从00-00-00开始,有按键功能) Q5 ?) X' |; J
芯片型号:STC89C52RC& R) J3 D! F* t/ }% F; N, `
功能脚说明: P0为段选脚,P3为位选脚,所有引脚低电平有效.
& Z1 i" }9 k) A( z程序员:玄溪
$ d/ @( u7 k5 b3 @5 u" M! d日期:2012.2.6" G1 |1 i7 y4 t; K$ ^
/***************************************************************************/% M# w: D3 h: ^; D
#include <reg52.h>0 E# F2 I: d+ q5 e0 j) C( D
#define uchar unsigned char
  R; r, J7 D( ^/ B$ a#define uint  unsigned int
! H' N/ r+ ^! @% G, p& Q
  |" _' ?3 {' E# z' U5 A0 {uchar code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};0 Q0 h8 l+ F; @% `" j
sbit K1=P1^0;                          //分+
3 D( ]+ n( T& Y" r4 l5 usbit K2=P1^1;                          //分-! B* a4 w; P6 M* W! E( l
sbit K3=P1^2;                          //时+$ M$ E5 W2 {0 Y' L, S
sbit K4=P1^3;                          //时-
; c3 N4 z6 w+ i1 N* c  N* _4 u! I$ l# a* O8 g( J' A
uchar time;                                   //定义中断时间次数) l1 y0 h3 J: ~7 q
uchar second;                           //定义秒
& E" f2 y+ w/ m) W; ouchar minute;                           //定义分( G4 R; R% q9 e2 X. j6 n
uchar hour;                                   //定义时- ?. j7 M+ D* x! w% T9 U) L
//===========延时函数============//) U# ^; r/ \6 w  `
void delay()0 _- B5 k. Q$ p
{) L6 y, d& }0 w$ g1 ~) `
        uchar j;# y. }7 [6 \! p: K3 C3 v
                for(j=0;j<200;j++);
. P$ t, P2 l. f) T}5 d; q1 |; J2 f( U) G! A0 w5 w/ j
//=========显示秒函数=======//* d6 h, ~! e: L) [
void displaysecond(uchar s)                         //带返回值
1 A4 y1 s3 a" H, W7 X{
, e8 H" R# _0 V' K        P3=0xbf;1 w" T& B. h6 W( \
        P0=du[s/10];- X  i3 J' v0 @* K
        delay();9 O+ P% T7 l" q# w* e+ ]
        P3=0x7f;
, e' Z, o3 V- D        P0=du[s%10];9 D$ a5 c% `, p9 V, N2 t3 \0 l
        delay();( S# \* X# ^! z1 \9 d: H2 [
        P3=0xff;" m4 z6 `& f1 m6 {2 q  M; w' q
        if(K2==0)
8 b: I* L' v; K# q' c% V        {
# R! \: r7 C% m4 j* ^6 b; j                s++;
5 c7 R& R- W# |6 ?, \% o                if(s==60)7 Y/ w- n0 k* f! ?0 l" f
                {% Z2 B* [6 e! E7 j+ Q$ Q5 T( c9 O
                        s=0;% ^6 W  ]* h7 }, H, Z  f
                }
; i* n+ C6 l, A# r* B& j. K; Z        }* V  w3 }$ ?2 K
}, z0 p  Z$ B" v, }9 ^
//========显示分函数=============//- v* O$ A$ [6 `# X# ~
void displayminute(uchar m)# l6 T6 J1 Q  j8 j7 f% z6 j
{! k) x3 y! G& ]+ k5 a
        P3=0xf7;
- r$ I7 c6 o8 n% T0 b# s. b7 H        P0=du[m/10];- [1 [7 H" h3 w2 l" w
        delay();0 m) E; ]  m( r4 L8 S* p1 M6 n
        P3=0xef;
& k2 w) N; X% R9 ]        P0=du[m%10];
- C* n8 ^" A" g        delay();
+ q  L6 t' J+ z+ q- _* a        P3=0xdf;. X4 F* R7 [2 J2 y9 H& b0 l% d
        P0=0xbf;
* m; s$ |) X6 F& S5 q$ ?9 l2 c        delay();
! j% U. \; Z3 ~+ t# Z        P3=0xff;4 H; H$ E' T' _1 u
        if(!K1)9 j# y& S0 H0 b7 j% ^1 U
        {) q& H! f% Z$ L2 |- D+ s! y1 S! }( B
                delay();: _( K+ A( l; v8 t; q
                if(!K1): ]: O% E5 T6 X+ O. h3 C' S! l
                {$ q6 B0 F+ Q: g8 j) d
                        TR0=0;. \. h. l" d0 \
                        m++;, m! ?0 V% D3 K: \1 B
                        if(m==60): r$ E$ p7 m' a! P; b9 h1 I- m- Q
                        m=0;
7 L5 k6 S8 }: L( v                }
  v4 a. O# q" D        }* T0 G, L; N3 D9 s! O
        if(!K2)
8 F! e! V( `7 o, n+ z" g2 ?' ~        {
5 m+ x0 l4 }2 b$ u) y) l                delay();" K& t/ c; _* m* R/ h
                if(!K2)
6 ^6 V5 c( Z! ~4 `# O# y% ]+ H                {
0 k) `' u4 L0 p6 a# H, N! Y                        TR0=0;% e, y% {; F0 u6 A9 A
                        m--;
# T' z/ v$ W9 s! Z                        if(m==0)
: c' U6 s8 w* h- S4 w* h, G                        m=59;" ^9 o" ?7 I5 A; Y
                }
; Z( _# a+ c) \$ ?/ r: B+ c& T        }
# H% m+ H/ L. \; S- Q# ~+ B6 l        TR0=1;+ {4 L% a+ p# @! M0 P' ~
}: U  T) ^) h1 M
//========显示时函数==============//  u% j, E6 `7 y% j1 G4 B/ \! o7 U
void displayhour(uchar h)9 L7 Z0 x: q4 j+ u1 z) \: k
{
7 e, R: G2 q. S+ a: j  P" x2 n/ t, U8 \        P3=0xfe;
/ ~; S4 }$ @  g4 ]2 V  G        P0=du[h/10];, n& B- J- _( p% }7 r; U3 @
        delay();
9 T  N( v1 b1 L( S9 v& l        P3=0xfd;
9 ]( a: C9 y5 \# d7 p        P0=du[h%10];& j8 z$ w/ N  f
        delay();
8 Y1 i- y4 `! w" F# t% `" h        P3=0xfb;( K/ e1 B1 Y' t+ O! f
        P0=0xbf;
2 `# y& |& ^" O- d        delay();5 E' _6 v6 s2 s
        P3=0xff;
, H( p  S& N+ |' R" ~0 K5 I        if(!K3)  b; R) C: s& |& a$ l
        {
" b$ G: |: L7 D" s                delay();0 h) ~5 I* B9 A3 L6 A4 m; U
                if(!K3)
3 U; `, Z; i  a) D& _# }2 _2 u# {                {
! X& r4 S% Y3 W/ j                        TR0=0;) k% e- Y1 b* q% C6 m$ v$ w
                        h++;
( R7 U5 Q. K% [2 g6 d0 W" S                        if(h==24)- C# l' J  B; a( L. \# c& q  ^
                        h=0;
* i) |2 J5 [; l  T& U8 D7 r                }" ~, d9 U  d- t. |# g6 \
        }
6 n1 z/ ~7 r9 ?0 G9 V; d        if(!K4)
) ^2 b+ \! r& A; `" ~1 m        {
' {8 o4 l) ~! F1 \8 m1 j( f                TR0=0;
, K, H4 n& W  G+ x                delay();$ L$ |4 R) O9 ~9 F, V" L
                if(!K4)
+ I2 t$ X, v+ ?+ s( m6 ]                {
6 B; f9 `# j( R( L6 m' _9 `# V                        h--;( E; L4 A% _7 g; t: v9 D" t
                        if(h==0)4 E9 }0 |7 K7 `5 x6 f
                        h=23;( U. e& n* U4 |/ k0 d* D, ]: A
                }
* S+ @1 M3 h. R        }( R) n3 N3 q6 V$ a  k$ R
        TR0=1;! g/ P* J0 i; _$ S% {3 i1 K
}
* E" [/ s* ?3 G4 J) z1 q; x  i2 M0 O- q/ [$ U: V. C% W8 p5 e
//=============主函数============//  l% t( s; A0 ~; o6 R: z
void main(void)4 F3 d* o' F: m6 S1 i1 g0 n; Q$ u
{
. z$ w3 {+ ]5 o        TMOD=0x01;
9 J4 d+ [  W. Y0 W        EA=1;0 e- [5 D$ f+ [- m# m: O# R& A' {
        ET0=1;& x' d& N  ?) d# I
        TH0=(65536-46083)/256;                          //赋初值
* F( {, x( S4 X# h$ n& u. L        TL0=(65536-46083)%256;       
& B$ H, X" e* L! Z& W        TR0=1;0 z6 p" Y% J; `7 F: j6 V
        while(1)6 v/ F6 M! R+ L+ [
        {
' {8 I( K) S% ~  ], w                displaysecond(second);; }0 D. L4 q6 `, Q
                delay();# W) z4 I( ~' x$ U; h# q8 [
                displayminute(minute);
9 [) _7 ~4 O$ h! U6 T                delay();& }% S2 I$ W3 w3 c4 j, X/ h
                displayhour(hour);
: }: B0 }9 X5 N  v9 t5 |1 `; N                delay();0 Z3 F2 {; F5 P+ @) N0 [
        }6 y) m* Y* e3 S8 i
}/ G* p$ ?: i1 c  K
//=======定时器中断子函数=================//
! j' Q+ f3 t  u: w( n2 W: C5 x5 Svoid inter0()interrupt 1
) i. g7 X% }+ S: x) Z{
- K& d# p1 F: j" W; r        time++;
. w' \. U3 @9 ]% f9 S+ Q        if(time==20)
4 P1 s$ K$ b7 P# M; h& R* ?& J        {4 s0 h& E# X* U; U  l
                time=0;8 z. R8 D" c) F3 S8 k3 k
                second++;
2 e* I# Y3 h" a7 V        }
1 O! [/ Y$ E- v/ {+ _! `! b        if(second==60)
' M) a1 `; l* O! e4 s        {/ w5 l0 z! ?5 z
                second =0;
1 N# x+ I# c6 J2 g( X3 ^1 R9 e                minute++;
. l5 q: _! h) j: R. I% W3 P6 c: V        }9 N: Q1 c' R4 p( c
        if(minute==60)
' l. |; V' K0 K; [1 o" V9 ^3 W! p        {
, G8 b, T2 @2 f, Z                minute=0;0 w2 r$ s- P4 l8 ]
                hour++;: _$ U; b* n. P0 w' x  ~4 V: [" p
        }
7 `2 A& T) A4 s/ N2 K: p* K8 r. j- Q        if(hour==24)
6 k- A. G9 B9 F1 E4 {8 x        {
0 s* a- \2 D: L* X# Y7 Y" G                hour=0;) y9 v0 `7 B4 ~( _- {2 Z' R: s
        }
5 |7 [* @: a7 X4 v        TH0=(65536-46083)/256;                          //赋初值
! @! L8 i6 ]5 f. y4 @2 p9 Z        TL0=(65536-46083)%256;        / d4 d) o: T0 V
}

该用户从未签到

6#
发表于 2012-10-25 16:24 | 只看该作者
楼上的程序可以用

评分

参与人数 1贡献 +2 收起 理由
阿宽 + 2

查看全部评分

该用户从未签到

5#
发表于 2012-5-10 12:49 | 只看该作者
你看看吧,我是新来的 以后多多关照

Text1.c

1.54 KB, 下载次数: 42, 下载积分: 威望 -5

代码

该用户从未签到

4#
发表于 2012-5-10 12:48 | 只看该作者
我可以给你发一个  我自己写的 简单易懂   秒用发光二级管显示   分 时  用4为一体共阳极数码管显示

该用户从未签到

3#
 楼主| 发表于 2012-3-3 10:05 | 只看该作者
谢谢你的建议,新手很多不足的地方。以后一定加强

该用户从未签到

2#
发表于 2012-2-21 20:06 | 只看该作者
本帖最后由 ArthurGXH 于 2012-2-21 22:39 编辑 6 t2 d! Q) p9 W2 `0 \2 r

7 {0 R7 n, {$ ~" I: o兄弟,我来说说你的问题: 
, Y; K5 a9 v) E3 I  displaysecond、displayminute、displayhour几个函数的参数请用指针吧。C语言的函数是传值的。比如:hour = 10;  displayhour(hour)  == displayhour(10)。是将当hour为10时,就将10传到displayhour函数。
9 M5 e+ M+ M) a' d  改成如下: 定义时:   displaysecond(unsigned char *pucData)
8 ]5 L4 i, ^- f9 A, H  c                     调用时这样:displaysecond(&second);6 i. b8 M$ V* u6 O8 ?
* f5 a4 T$ r6 i; I6 R6 r+ L+ A9 F
  请好好学一下C语言吧。
) Q! h& r/ M: n' K* G1 J
$ ^9 [$ @( R1 R4 h: Z* [* G还有几个问题:
$ m0 |: A  r, ^9 h7 h  1. 定时器,请用自动重装载的工作模式。程序在每次中断赋值会有误差,会积累啊。2 y% Y! A9 ^7 ?
  2. 读按键的程序应该与显示的分开,不要写在显示里面。3 {& a/ p2 a6 y% b, E/ }2 @' \
  3. 按键的去抖动不充分。/ F% N, h& y; i7 j0 H6 ]
       4. 定义uchar 最好用typedef。9 J: J9 m4 P: @+ k( ^3 c5 g& \/ ~4 i
        5 p+ `- [2 ~7 z& {
. ~0 b. @/ k+ c3 S# G" k9 l: t

( L+ q$ v2 I/ f$ N0 U5 E( v+ M# X# d: U( n( N) a- U8 ^
7 _3 s: K( \4 j, _; ^/ m
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-23 20:10 , Processed in 0.187500 second(s), 28 queries , Gzip On.

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

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

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