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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
以下是我写的定时器电子钟程序,按键功能不起作用,哪位帮忙看一下。$ L# f  w3 ~4 j. r% q
/***************************************************************************
- w/ T- G' A" t6 P! p+ i$ I名称:用定时器定时做时钟
1 i$ C+ _# C) V# k4 h& o内容,自动从00-00-00开始,有按键功能+ V$ M, Y9 f, ^' s
芯片型号:STC89C52RC: \; v1 R9 r: V
功能脚说明: P0为段选脚,P3为位选脚,所有引脚低电平有效., I0 t* p3 ?0 U- B2 B2 Y
程序员:玄溪
/ }" E; c1 }5 j  H8 F/ Z日期:2012.2.6. L+ c" g! Z" _+ B* m
/***************************************************************************/  A" i8 d% a3 v, J5 _4 d. c
#include <reg52.h>
& X$ }+ ]' Y. s6 C# k% t& T#define uchar unsigned char 4 P& D: M) a- t4 J; l4 V! O
#define uint  unsigned int/ n( Q# g9 N, e5 d1 R. G

6 C' p& y& {4 u. R2 q" B$ a) Buchar code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};" i3 B% N3 a# J( s' U
sbit K1=P1^0;                          //分+
6 }+ B* ^! q# `, l7 ysbit K2=P1^1;                          //分-
; K! W/ ]0 G& ?) T8 isbit K3=P1^2;                          //时+
0 U  i* r  ~  ~sbit K4=P1^3;                          //时-
2 Z! ^* O% |- a# @" C
+ P, J/ C7 q7 W; q/ _- Muchar time;                                   //定义中断时间次数
& W) [" g$ a: F6 X* cuchar second;                           //定义秒  T3 U  ?# B' C3 n
uchar minute;                           //定义分
. i/ O$ e  a2 ~uchar hour;                                   //定义时1 z4 |7 i! q7 r: q' v
//===========延时函数============//# P( A" l" \8 V  t" U5 i( _
void delay()1 e/ a- D$ K" E7 l2 Q1 i
{# V' L* P* N2 T0 R# p
        uchar j;
7 s0 Z" \% [8 U: l8 f                for(j=0;j<200;j++);, R: p7 n; Z5 d+ v! X
}: H0 y4 M$ c+ S# v# |* V% p% S
//=========显示秒函数=======//8 m7 n/ L1 g; `, D1 o7 R) K
void displaysecond(uchar s)                         //带返回值0 W/ Z4 Z* Z5 c. o
{
& M, p* I) d' w        P3=0xbf;( |0 V7 o+ |5 r2 V+ A" i' q
        P0=du[s/10];% @0 S9 t7 U9 @! _* R( m
        delay();
4 d- d/ r$ m2 r( [3 _" Y        P3=0x7f;
/ T. S" w$ l; {6 G7 Z& h        P0=du[s%10];9 u) Q5 F; C+ l9 X. l
        delay();
+ i3 a3 J' ]) }: Q1 I9 N" q2 W7 ]        P3=0xff;
' O' r3 v2 u5 k  L) M% s        if(K2==0)! i) G3 t( L  m% D  r
        {
& Z% ]* b$ }3 k4 l8 d, t                s++;
. t0 T2 ^& E% L6 G+ T3 r                if(s==60)0 p, L3 b& N# E2 P; H6 G
                {
1 ^2 q  v; k6 _/ Z1 Q6 P) ?+ V                        s=0;
. a9 H& }* X  g. p, r5 [* J                }
( R& D" d/ ^- C- g& h; B! c        }% p( \- J- T* c) E  v+ e
}
. L# L1 _, `! s+ D; u" O//========显示分函数=============//9 M" x- _" m6 U. p* H/ n  w
void displayminute(uchar m). v  Z8 \+ Q) F( P
{
$ t) c+ n0 O" k0 z/ l1 {        P3=0xf7;5 m' n+ h0 y$ V7 W2 U
        P0=du[m/10];) y9 \" k$ M( m9 T  e! H) g
        delay();
/ u$ Q+ I5 }7 _6 E6 R; k/ |* n        P3=0xef;. K7 d% F7 }( q8 S, p
        P0=du[m%10];. U$ [4 s3 C. {; X0 _
        delay();0 k2 l$ y1 B" D6 X4 {' M" J% a! |
        P3=0xdf;
: T% ?3 d- j- c. T2 u& v        P0=0xbf;
/ [2 f6 A: k& K) k        delay();
* e& u7 A, ?" W& P' Z3 _2 y% U        P3=0xff;
& Y* J7 G" ^3 t" b% R4 D        if(!K1)6 q5 \. U3 N! E/ V# Z' b3 ^7 F
        {
6 c' A2 ~) n6 p  M" `' `2 G# }8 x5 P( P                delay();& F: O8 J% d1 X% Z3 ?" Y- B9 G7 k
                if(!K1): G% h. P0 O( V1 n. l
                {, G" C% @: C) L) I6 A
                        TR0=0;+ r+ U* v3 n/ f- M& P0 e# ~# F5 p; V
                        m++;
( R) N' v5 p! K. f                        if(m==60)
$ Y9 _7 g* J1 I6 {& J0 F8 Z                        m=0;/ b7 L: w' Y* a6 r! U( Y7 K  ~% f
                }
' V! i5 M% F7 y  m+ U        }
/ `1 V* B7 m7 I5 X: u        if(!K2)
9 R& a# g$ e9 @9 s4 k# h( S        {" N4 {' u( J  g) ~2 H' d
                delay();
/ n9 H6 Q# J' W9 `/ P. V% m- X                if(!K2)0 X+ Y1 |& ?; b5 r# w
                {
) F9 e$ E4 L( @( C# ~                        TR0=0;
! V9 D% e! X1 D, M, [                        m--;+ F+ U$ x1 R6 p) {( v& b: A- M
                        if(m==0)# w# ^" m6 J, W+ g
                        m=59;
4 ~0 n* G" k# |* E                }2 _* ~# Z: j+ A8 j
        }1 u+ Z( G9 v2 z7 X& c
        TR0=1;
, ?* W/ \+ n' c! T# j}2 U* r3 q; w& }( A& Z$ s4 U$ s( j
//========显示时函数==============//1 ]" j2 z& j% ]$ ?" w
void displayhour(uchar h)( m( c" Y( t0 |
{% ~# {7 i: A9 c
        P3=0xfe;4 G$ `0 A* g% ]
        P0=du[h/10];
2 ~! W+ [& x7 i* `* k        delay();8 z0 B" h4 l, p& `3 @
        P3=0xfd;- C; |7 Q! L( G# q! g; z% ~
        P0=du[h%10];$ x, j8 {7 @' q* `
        delay();
$ Y1 I: K3 s# u( d        P3=0xfb;- N, f, X& v, b. M6 K8 R
        P0=0xbf;/ V8 M! Z( G4 n: O( [* N
        delay();
' z* \  K; [6 K  u        P3=0xff;
2 ^: x- F2 f# V/ Q; l        if(!K3)# }/ O, F% N: K: ~; g; @
        {
" g% ]  b& @: c                delay();/ S# d1 y4 V' e* Y) u
                if(!K3)
+ S6 f1 p2 d) h                {- h6 @) ]' z+ L% u* L3 e
                        TR0=0;' [+ ]+ Y1 V" d& c% L7 d: q0 y' U
                        h++;3 i$ x% z3 ^% r  I
                        if(h==24)+ u$ [& V7 I0 D2 G( U8 D5 r
                        h=0;% t1 {; K: w7 W5 U: w
                }9 S: V* f$ \$ T5 [: V. N+ \
        }
5 Y: L8 p8 Y  \( T& E0 O1 q3 n        if(!K4)1 J- V# I- l2 v" H! ^: Q; L( h
        {
# c( z2 m! Z" z  S, Y5 Q# C% b                TR0=0;3 Q  y0 [: F6 G& |! D
                delay();
) \! R1 ^* Q) {: |! L1 k                if(!K4)4 ]5 \' S% M. i7 @# E$ I5 D
                {
2 }- g/ B) N  t+ ]- i5 ^& x                        h--;
- p' M, k9 `" ]# H8 k- t; ~$ |                        if(h==0)
# b; S- Q3 D$ T& ~! E                        h=23;
7 [$ K! \2 }; a! q0 D0 f                }2 A! f1 s& {( b1 y
        }7 [+ [7 t! H# O
        TR0=1;  L" v; M! u/ w: @
}8 N- D* v5 i' V& c: B9 V9 E; \1 i

* z. I* w( ~& q6 Q( s& O//=============主函数============//, ^4 C; U# T1 p2 Z6 l  v0 k
void main(void)1 A# l# R9 H$ d. H. i
{
0 s7 {8 X6 l( d! y8 G" d        TMOD=0x01;
% `( G# A" {4 g( w. Y        EA=1;/ G9 V7 m( J4 V% \' \) W
        ET0=1;
9 l5 F6 q" O0 \8 E1 {        TH0=(65536-46083)/256;                          //赋初值1 \5 W( H. Z. _( i5 s9 l2 v
        TL0=(65536-46083)%256;        # I; J1 \5 C9 V0 n7 A0 h
        TR0=1;, t7 W* ^4 f/ N/ j/ x9 W
        while(1)
9 `& X2 S" {6 l5 \; L3 a        {
6 n" l. O' J5 ?                displaysecond(second);+ _9 o6 ~5 u0 C# B
                delay();
, ~/ ^+ I8 }- W; z0 V9 Z                displayminute(minute);
; A. K5 h' I* p: J9 ?; G! l                delay();
4 v+ U7 ?$ D: B# B- ^                displayhour(hour);
: U) x/ y' `: ]( _                delay();0 s5 E( n' ^* `7 C% r
        }/ w* r% g- j& K
}" v, p$ G6 e& }# a' e( F# r
//=======定时器中断子函数=================//
1 F. I- `; O) G" l- z" t4 |* evoid inter0()interrupt 1' V' }, \$ |( h: u; T0 o
{2 {9 k6 z. k3 N! o# x* w
        time++;
# w( b% t3 w2 E, d( S- j        if(time==20)
4 E8 `8 U/ l* Y4 K- A' v0 F! j' [% Z6 B        {
# E% Z7 ?! C  [                time=0;& j* N, {1 y) P1 q
                second++;4 u% N+ g- V1 J4 ~" P$ @7 A$ I/ g  y
        }
" c  ^9 h& [; S# V3 z6 R0 x        if(second==60)& n2 L6 d; n2 X5 p$ F( ?/ z/ j
        {
2 e0 Z, Z+ ~" D8 B) |2 U( V                second =0;
0 Q/ o5 f( P9 B' K                minute++;( {  q* I  n+ `
        }$ c; y, n1 ?- {; g: O
        if(minute==60)
* C# J+ q: {/ U" s* i/ w        {
# z- I! {4 n8 v6 A' w                minute=0;
) a$ }0 n$ S8 q, S2 W) [# Z; z                hour++;
6 U, |5 N; B6 m6 A7 k$ K        }
. v' o$ s% i( J0 B2 M8 i' o        if(hour==24)4 G: K" R8 j* O$ u4 i
        {
7 V, W+ E( I$ ~+ @1 h                hour=0;
7 h8 ~( }6 z# D' T        }; \' }5 \0 ?7 _, ^% I
        TH0=(65536-46083)/256;                          //赋初值( u3 d6 O) U/ w6 U# `
        TL0=(65536-46083)%256;        4 f, N  _1 r3 g+ h
}

该用户从未签到

2#
发表于 2012-2-21 20:06 | 只看该作者
本帖最后由 ArthurGXH 于 2012-2-21 22:39 编辑
. q5 u9 ]+ B: Z. E" Z9 e. J* s
7 @9 w! x. ]. M; ~* m( X8 d兄弟,我来说说你的问题: 
; x# Y" j" t( p+ U' W9 e: {  displaysecond、displayminute、displayhour几个函数的参数请用指针吧。C语言的函数是传值的。比如:hour = 10;  displayhour(hour)  == displayhour(10)。是将当hour为10时,就将10传到displayhour函数。1 h1 n; O/ f- r
  改成如下: 定义时:   displaysecond(unsigned char *pucData)  E, \) u3 D" x; C
                     调用时这样:displaysecond(&second);
, P0 }# F7 n4 e5 C+ y
. K7 N$ C" k7 z; h, {# g5 e9 |  请好好学一下C语言吧。0 C: c7 o4 ^, t' U3 d0 v% M5 V
( K& }6 ^8 b& M/ e4 d, L
还有几个问题:1 [" n; p# V' B+ ~: ~& E& {$ u
  1. 定时器,请用自动重装载的工作模式。程序在每次中断赋值会有误差,会积累啊。" \- U9 z/ T6 C
  2. 读按键的程序应该与显示的分开,不要写在显示里面。9 I% v! V1 D9 s# q
  3. 按键的去抖动不充分。
2 u3 O7 J, E3 ^2 |       4. 定义uchar 最好用typedef。
" L' g$ D$ B; y/ w        
, _0 E: X/ A( B) n  ]7 A
& Q  S: j, G9 ]* k- D8 @6 J. w% D/ V8 I

1 A" l9 X* g$ p  O7 u
4 t# [5 l/ F' {) T' w3 d5 ^. }! 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-7-28 13:51 , Processed in 0.156250 second(s), 30 queries , Gzip On.

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

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

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