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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
以下是我写的定时器电子钟程序,按键功能不起作用,哪位帮忙看一下。% ?- X9 m9 A7 k' A( b0 c
/***************************************************************************
" I$ [( e# U* E1 A5 T名称:用定时器定时做时钟
& L0 D2 B5 R4 E0 G内容,自动从00-00-00开始,有按键功能
  b' ^1 V: ]" M' @. Q7 A芯片型号:STC89C52RC
! q3 M9 Z# Y9 ]9 P功能脚说明: P0为段选脚,P3为位选脚,所有引脚低电平有效.
" L$ \; a3 @1 a6 ~程序员:玄溪0 j4 U4 K* _- X1 b* C0 v: ^  a
日期:2012.2.6
% r& P5 w/ {& T+ p' Z9 m/***************************************************************************/
) N! Q2 R# e# W* ^$ k4 G0 g#include <reg52.h>+ t- f6 W, D  Y4 E
#define uchar unsigned char
" G0 ?0 F" ]( N# d$ @#define uint  unsigned int
; X& C9 e- B  {5 k" \# U  p
! X& b( \9 C2 Q8 m1 J! b% m% }% euchar code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
+ ?" `- R1 u. b& P6 }% l4 p3 S7 ^7 lsbit K1=P1^0;                          //分+% z- t5 E8 h: K* y
sbit K2=P1^1;                          //分-+ r! ~. _( {! m% H& s: {! a
sbit K3=P1^2;                          //时++ G9 Z: M; C- ?! v0 M; y
sbit K4=P1^3;                          //时-
* \5 \: b$ H; a% C" w
# m0 H) h4 @' d  z2 t: ?uchar time;                                   //定义中断时间次数
. l( f0 k7 Z+ r5 d" K; i% Cuchar second;                           //定义秒
2 _( R2 m  w- M% O. K: Puchar minute;                           //定义分
% l' D. \- A& }uchar hour;                                   //定义时# x  F4 }5 I0 ~
//===========延时函数============//
: ^* }) S) y8 E: ]void delay()
0 k* Q, @+ F5 C" P8 j" p{8 C/ n; q% H% I
        uchar j;
3 X" G4 M7 B" J8 M5 A$ X" |                for(j=0;j<200;j++);# m* ^5 L: W7 V! [
}
0 N9 T0 r9 {# ]. `( a& }! ?+ k" @//=========显示秒函数=======//6 [) i1 ^2 w' Q. E$ Y0 h! d0 c
void displaysecond(uchar s)                         //带返回值, G# M9 Z" V, h5 D
{
- R/ `. s6 s. p8 s" I# i9 w        P3=0xbf;7 @( v! z6 [# W% v
        P0=du[s/10];, c6 g; c. i* b: U5 w5 S
        delay();& Y7 t! j' ?  H/ {: A# Z  @
        P3=0x7f;# ], V6 s! T  l* ]# [
        P0=du[s%10];/ n# @9 h, W& I/ d) o7 {
        delay();
" M4 u9 C+ Y+ k! K5 R" M0 U' o) z        P3=0xff;  A, A  v2 P% r4 @( N1 ~! L4 I7 l* u* d
        if(K2==0)
. R: z. i# R! [9 `' j4 k1 G1 B        {
" h. J* _8 D* Q% M/ Y1 m                s++;- b3 I( k6 h2 r/ T3 f4 e0 j% g7 t4 P- S
                if(s==60)! Z( p" y1 I4 M5 C) L7 H6 [* ~
                {" f  s/ H: w8 ?3 e3 y& `  t+ J
                        s=0;
9 p& w* r4 c( F# r; S                }& E6 F; _) x1 |0 g( a
        }
4 F3 R! P+ i7 O+ X/ o9 J5 u}
& W9 m$ P8 _0 A) x8 e/ V( C//========显示分函数=============//
# `  p9 y0 P+ V# t% X# s" ]void displayminute(uchar m)
/ Y9 R; P" t6 w0 N/ _6 W{
% @0 ?/ h7 \: ?  @1 p3 H( ]        P3=0xf7;' v& }) s. K& i" O3 k
        P0=du[m/10];: e" r  @8 ^; U" ^2 s0 F7 b# J) g+ z
        delay();
' `3 |7 J% X; {5 l8 a6 W# u; l0 q        P3=0xef;0 _' q' Q+ e9 K  l1 U' g3 K% D
        P0=du[m%10];# N! s2 J3 }! N* z% l* R9 P
        delay();$ c, P1 R! M( U5 K
        P3=0xdf;8 j8 A; |% B8 |: E; `& D: a! o
        P0=0xbf;- p) C$ z2 z4 R' `
        delay();
( e5 F( S* D, B/ {" Q        P3=0xff;
- ^+ d) E: G: R5 c        if(!K1)
) c% @% [4 F9 k        {
% r8 M) L3 u" D6 S1 W7 T7 q                delay();  _# U* b+ g. e8 Z
                if(!K1)7 s8 b9 o; \  m7 s
                {
% L4 I! y5 {; r4 ?0 \, v- N                        TR0=0;6 S! s2 W: d# r( t2 {
                        m++;
9 k. d/ y6 U# E4 b) \                        if(m==60)6 {& j1 J$ k9 j6 y3 o$ f4 \
                        m=0;
& W, Z8 @3 H; Z                }# y( l( |3 ]! T! l9 W" L
        }
8 B0 y  @. X! B3 e0 T7 ~        if(!K2)
2 U5 ~; ?3 E, W7 [' v        {
! v: q9 F8 \, v& v, n$ q- ?                delay();6 @1 V- z; e- T' P% ^2 L/ w% W% @
                if(!K2)# Y' y8 v3 S1 M& ]% c# u# l
                {
( _" H" _! }: s% a$ f  ]! V% m                        TR0=0;
0 L, T; a, m& o9 b: i3 h* ]                        m--;
. M; x, A( _0 Q" a- F" m2 Z% J                        if(m==0)4 T- k3 p) M  Q0 m6 Y
                        m=59;
. ^9 t2 T- ?3 j2 [1 t2 Y8 z+ }                }
  F/ d- R  J; d6 A$ T: s9 V        }
! r& n+ k: y! y9 ^  V        TR0=1;; w5 O- T4 h7 r! _9 i' H
}
5 ^4 y5 O7 l+ Q; m8 V//========显示时函数==============//! `# p% l9 [; f, @6 c0 C4 b
void displayhour(uchar h)" d+ a( Q) w; V
{
5 o% X5 r8 h( M" ^8 z        P3=0xfe;5 d' w9 D0 {- p
        P0=du[h/10];
: k; A- c6 P- D& U7 e+ Y  {        delay();5 y3 a6 u. N; D1 T3 L: B
        P3=0xfd;
. b& y+ c3 }( j) R7 b) f        P0=du[h%10];4 i( W  [2 ?: u2 L2 u
        delay();
% p% V9 f3 v8 n        P3=0xfb;
- ?0 h% g7 ~$ A% f, i! x        P0=0xbf;  m# E6 k, ]# x; f
        delay();
( ^5 c5 J2 |. X, G        P3=0xff;
2 M7 V( h0 S6 C. q' @' U        if(!K3)
* j" m0 t) N0 I# P, I' L3 n3 k1 K& U        {
9 b( s- V+ W& S0 ^+ j: o; j                delay();% d5 e: l/ X6 K, c  N% O. A9 w
                if(!K3)
( Q, l' s( R* P% \& u0 i$ p% Q                {
/ N" X# o- n* c- q1 c                        TR0=0;
% \3 U' A  w6 Z' h                        h++;; u# g% {0 Y8 |) I  H. q0 \1 E
                        if(h==24)4 q4 D- K; H! j8 Z
                        h=0;
6 V( G5 f, t  e+ o                }
' l$ |% O( D# `" g        }5 C- {; _6 K: t, k- n" }6 t
        if(!K4)$ l" r& s* P+ v* l; C# [. j0 X
        {6 v6 x6 v; D1 c; Y" J
                TR0=0;
4 Q) C8 ?9 F* I0 K- ?! D' l/ G                delay();
; T  V7 T9 V4 v$ V& v- _+ @7 x                if(!K4)
+ _$ |) g$ v9 p2 V; C. \                {
9 T; D% g* B' }% b; F" N4 P                        h--;0 |7 v7 E* _1 L8 O
                        if(h==0)% N: ?; {0 q7 R) ?0 Q) y* l$ f
                        h=23;7 `1 Y: R/ C, m
                }, _7 N6 w+ G4 }6 k8 s; O9 W  @0 O
        }; e3 R" D: X5 Q0 b: F
        TR0=1;# d. }4 R, }% [! T( w- A
}
0 r: c; \9 ^: e8 S3 u8 j2 P
0 t8 X5 r+ O( p0 b//=============主函数============//9 f5 n0 m0 N3 f0 {0 U
void main(void)6 R7 }$ w+ G# `  w# x, M( c1 N: e
{
( E- q( N! R& N: E$ p        TMOD=0x01;3 ~7 p, X) h, }) y4 E
        EA=1;" C8 ^& @4 E# j
        ET0=1;3 X5 P! [5 Q1 h/ D( K* n; d
        TH0=(65536-46083)/256;                          //赋初值5 Y+ l& H0 Q2 `9 T4 F
        TL0=(65536-46083)%256;        0 m# }# |6 m4 @- `; m' h8 m
        TR0=1;
3 [6 a' X2 h" t7 o0 ^9 b- R. f5 k        while(1)0 G  b+ X& w; d) T6 g# R3 e. r
        {* E* t/ L1 s3 s& d
                displaysecond(second);) C1 h) v$ e9 B1 p8 z* Y! H8 k0 \( z
                delay();
- o7 J8 K9 y6 T8 j! S" B  z                displayminute(minute);
& n2 y* f  T2 a# O" m+ o, v- N/ r                delay();. i4 A+ B5 U7 }7 b+ a
                displayhour(hour);
9 f; a' `  z: ]* V! k+ |  _                delay();
7 f8 ?. C- q2 c+ S$ x" h7 v        }
  a  z+ S& n' C* z1 a* p}
2 ?6 i# m" H* I* C3 {//=======定时器中断子函数=================//8 _" @4 I' H3 x+ ]
void inter0()interrupt 1+ I2 ?- U( |# R. [% ?% A
{5 m. F& X) x- w9 \: f
        time++;
- G: B+ J) X1 Y* f0 T) I        if(time==20), O' I$ F  `4 Q: ~' X  {# p. @
        {
/ g7 n! a+ W" F& Y                time=0;' `( \9 q6 e% u, w% o1 y3 I
                second++;
) y& M/ u5 _  _( S! e0 \& }' f- E        }
% f6 q2 \+ H* K, k3 W" d        if(second==60)/ z  s. T' F9 I4 q% K
        {
: o6 ?, y( A* @& N" G! g                second =0;
' c/ m: C, I8 V, w" M1 b                minute++;. ^9 j7 j( T+ L# G# z3 T
        }) c+ p0 E2 M' W' s  E& P
        if(minute==60)
% ]  q; j- c0 }' D7 z. B1 I3 w- `        {
( G4 I. E$ t/ n% w8 N                minute=0;
' j4 F6 a( W" Y( c8 \                hour++;
+ ?" n9 J5 J* w) h6 ]        }
" J2 q. K1 }* y        if(hour==24)! N. F  D- a6 m' w" N* h
        {3 w! B! P. G+ m$ Q
                hour=0;4 |' K- G: N" C- b  j7 i- ?
        }
+ G5 @/ ?& z4 a: c3 n, P        TH0=(65536-46083)/256;                          //赋初值
+ \# m( Z* X* ~: [; U        TL0=(65536-46083)%256;        2 b; _, ]1 ]0 f5 V* k
}

该用户从未签到

2#
发表于 2012-2-21 20:06 | 只看该作者
本帖最后由 ArthurGXH 于 2012-2-21 22:39 编辑
+ L1 t. U- ]5 T) g) |' q4 G2 G: r- A' _3 `9 p; D1 ]& t0 N
兄弟,我来说说你的问题: ! d* q$ k; D  `: n4 F
  displaysecond、displayminute、displayhour几个函数的参数请用指针吧。C语言的函数是传值的。比如:hour = 10;  displayhour(hour)  == displayhour(10)。是将当hour为10时,就将10传到displayhour函数。
% |. M, V; y5 c/ [  改成如下: 定义时:   displaysecond(unsigned char *pucData)- d. M7 M" I4 _' C1 a
                     调用时这样:displaysecond(&second);" ?+ q& `4 x% j2 b

, N( C( v$ W' A. g5 l+ E7 x  请好好学一下C语言吧。( Z8 T7 d. x& O, k* A0 {
: Q. G* R6 ?3 e- y. f
还有几个问题:
$ g" C: m- N& J% v! o0 P  1. 定时器,请用自动重装载的工作模式。程序在每次中断赋值会有误差,会积累啊。2 n  r3 L/ ~- r* [( _
  2. 读按键的程序应该与显示的分开,不要写在显示里面。1 z; r  u  N, ^4 F, b
  3. 按键的去抖动不充分。
; {, m- q5 u8 |9 \       4. 定义uchar 最好用typedef。
& Q% h* s1 i, {, i5 \        
6 e. U7 t+ z. Y
" x3 A8 _4 B, y) m% ~* T! T$ W, Q" |% G% F; P& H; X% C6 y. {/ ^; r' B
& Y7 c+ t5 x1 K" f0 b# J
4 t. V& n2 J: t

该用户从未签到

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 14:42 , Processed in 0.171875 second(s), 27 queries , Gzip On.

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

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

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