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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
以下是我写的定时器电子钟程序,按键功能不起作用,哪位帮忙看一下。
+ X/ z( E4 F: J7 c/***************************************************************************: V2 g: a) g7 M! x3 G
名称:用定时器定时做时钟' `( |3 C) T5 O( j" Y
内容,自动从00-00-00开始,有按键功能7 O$ E2 }' Z$ [. w' {8 I7 G) u
芯片型号:STC89C52RC9 F, X- u9 I" ~4 @
功能脚说明: P0为段选脚,P3为位选脚,所有引脚低电平有效.
' F; Y# i1 J5 K: v; ?2 V" a程序员:玄溪
" f5 }, M3 s9 t: Q* ~日期:2012.2.6
) Z" a# \* ~9 h5 A/***************************************************************************/
2 o: \, f9 \9 j: K3 ~#include <reg52.h>, ]$ o7 D9 ]0 }0 Y/ I, ]
#define uchar unsigned char ! g7 j0 K* _& p: z8 h
#define uint  unsigned int0 X2 Y5 {$ ]/ P, H/ f1 t0 S4 z

5 d$ `1 g" X4 ?4 k7 Euchar code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};9 C. n# K8 Q* u! i5 l% e6 Z
sbit K1=P1^0;                          //分+
  i+ U( p. \) F- }, Q3 _( vsbit K2=P1^1;                          //分-
2 C* ~' l! o; D# C  e  l, R4 W$ ?sbit K3=P1^2;                          //时+
; u, o$ H  i! p5 Fsbit K4=P1^3;                          //时-1 t9 {5 e/ F# ^% b% }8 q4 b& A
5 ~+ m8 {+ D) }" U
uchar time;                                   //定义中断时间次数. {# P. v, F! p: `0 M, J8 x* Y
uchar second;                           //定义秒1 A; ]1 A! {2 H3 [8 j$ g8 [2 `4 l$ z
uchar minute;                           //定义分8 ~" ]( M" j" H* M2 q; c, P3 `8 C
uchar hour;                                   //定义时5 r1 k& K2 c* z+ \7 S. J
//===========延时函数============//
  x. c) ?' p3 x8 Y: B  [$ Xvoid delay()
( F8 ?: B1 {+ {; c! x! [/ N{  x7 O6 j3 `6 R% b* C+ D6 j+ M
        uchar j;' u. ~) a( X/ b& I# ?
                for(j=0;j<200;j++);
7 v, O6 c3 @" q$ X}3 d# Q" {; ?- k- [7 [5 }; d  `
//=========显示秒函数=======//( X9 T2 `6 k" J8 G
void displaysecond(uchar s)                         //带返回值
0 r6 d% ~. F6 ~7 K! D{
9 W' t2 U& P0 V        P3=0xbf;, s/ z& B9 ^1 N' E
        P0=du[s/10];
0 }; X6 h% T% e1 ~7 r        delay();, h" w% x! u: l  x2 P
        P3=0x7f;$ q# f; T$ P5 g% P. D) N
        P0=du[s%10];
. }- a: i6 u1 d  D3 r        delay();
+ j8 \0 O: I8 o& w        P3=0xff;
7 t% ^. v5 }# N2 r8 V+ n        if(K2==0)2 p8 D# V+ G- T2 |. U9 [2 J$ ^4 O
        {+ I% k: T; P. v
                s++;
& d/ G& n+ K9 m/ b. [& b0 K                if(s==60)
+ k3 b! [, x" m  J, d) u0 a4 d                {
% ~" |6 @) G# E  E0 N; Z5 O                        s=0;; n6 [6 H" R3 E; ~# T" `5 p
                }5 E6 C5 U) J  r" c8 w8 [1 O: `: S0 B, H
        }
, y( E7 I  j/ u/ L7 e}; a# H- U( V6 k" k: ]5 D
//========显示分函数=============//
5 `, A, l+ R- T1 a5 f; uvoid displayminute(uchar m)5 j  A8 v0 E6 R* p/ E" {
{
2 ?1 \( {, V8 X' E        P3=0xf7;
2 G) @- f  n( t& v5 v4 @        P0=du[m/10];% s1 W5 B. ~& J9 U/ t. O$ V
        delay();$ v8 t8 m# k( N0 K% r# b; s
        P3=0xef;
6 i: C0 E3 J! P& P  @6 D- I        P0=du[m%10];& |3 W! ?3 P( J# T" ]& Z
        delay();! ?- a# a) L8 o- A
        P3=0xdf;
, p. D. q, x$ m, p' Q        P0=0xbf;9 @6 `# i) U/ w2 r& m. R
        delay();
) A( W/ F& Z0 G1 V2 S8 T2 G0 r' r! Q        P3=0xff;
% L7 s5 d" L+ T& y# }. L, E        if(!K1)$ }8 w2 a( V+ [5 A
        {2 x  m+ m3 p7 Y9 S  x; o0 K2 [
                delay();! I, f, c- w; j" K) H4 a% Z
                if(!K1)
5 _. C* |1 `' ?: ^: e9 o                {6 Z' g2 k/ G+ @4 ^, e5 U( O
                        TR0=0;, |$ _& t* j9 j) a  b
                        m++;' s# o, n  I, S* O1 u9 t
                        if(m==60)$ d% g0 x0 C: {- A; ^( F, X
                        m=0;
8 P. x2 v  m" W: M/ N* t+ }: R- Q                }' ?( R9 e2 \; r0 A2 N
        }$ Z6 R5 W) j( f0 z  P; t) X+ j3 ?
        if(!K2)- D$ P0 n9 q# H) G5 f# ]( D
        {$ a- U8 U& p8 Q" |3 ^
                delay();
7 K  N" a: X, D, @9 e                if(!K2)
8 y6 W9 p) S) D1 R                {
) S1 o6 O& k# l2 X! K: z                        TR0=0;
1 H' Q5 ]. L+ F: N3 f9 [                        m--;
) J  d3 R) n* _8 ]% h) N/ ^6 W                        if(m==0)
  q0 r" G  K* p8 W- w6 ^                        m=59;
+ k9 V. E; Q6 T# V" J! [                }
( {# X8 v9 g+ @% G6 a; a2 j        }
. \- K, a7 }: k        TR0=1;
; J# h5 U4 g% M: y2 m# H1 w}
) N+ n+ h1 p# F% b//========显示时函数==============//- K' T" M5 X2 m8 Q% n+ H
void displayhour(uchar h)$ }* E) e9 G9 L* F5 I, t
{/ d, S* Q& o! {: y' t' a$ d
        P3=0xfe;
1 r( V) l0 n+ r8 `4 |        P0=du[h/10];
% O6 G) K% m4 q2 f* c5 G# G        delay();
9 y& g5 f2 T" {3 h        P3=0xfd;* L' k# k& L; O, N: ^+ i6 b+ Y
        P0=du[h%10];+ C; `5 z/ J; u+ V# I9 u
        delay();4 x4 U. L& k4 S* n" L' C. a
        P3=0xfb;
6 t& v+ y" ~2 N4 X/ l% R' {        P0=0xbf;# k, @  A1 e7 ^
        delay();/ B$ |% G, y9 {4 T8 N
        P3=0xff;& y* L, D# ^! [% M" Y
        if(!K3)
$ ~2 |3 p2 }) q* n5 m/ q$ T, m        {
* T' `' a9 \/ @7 N* s6 O' U8 F                delay();4 ^4 A- E% ]+ C2 h6 l& z  l1 v
                if(!K3)
# O+ q0 j: \" u, I" a1 J                {
( ^& ^0 q, V6 b( g' ?                        TR0=0;
5 A# a# P% X; V* Q. b9 G) c                        h++;$ k/ l9 A+ \, k# m+ g: e. S
                        if(h==24)
3 Z4 e% f9 c8 R5 V$ Y* G. _0 Z/ O                        h=0;
4 C, T, y2 [4 Q  t8 y                }$ |1 M8 a) x9 |. o# D8 E
        }
( U" e& L" ^2 r' X        if(!K4)
8 _, Q! g6 N4 R" t        {
6 ]2 O) C+ k# t                TR0=0;
) M& H: A7 T" N2 s9 W                delay();
5 g8 L9 L6 ]$ g* }8 Z( X) s                if(!K4)* v& b7 b5 T% \: V. q
                {+ k5 N6 P& R4 K: X) ?7 e; }
                        h--;& P. \+ _% u  t2 x# f2 H. }
                        if(h==0)
7 O( G& |7 N5 G8 |8 M) u                        h=23;( C4 Z+ N. q! h. L
                }
9 ]& s* Z, [# ^; c# _        }- t0 @; Q' \# D& X% J- z: u5 z
        TR0=1;
+ J) C9 G6 P0 Z  s! F" r}
& x: f. g+ ^5 H: {. F( @1 X$ {" Z
. p7 {8 y% `* H( l  {- o/ W//=============主函数============//7 y' l# u4 q) p: Q' W' Z
void main(void)0 C- b; q" A! h
{7 j9 s- Y6 z7 p/ ^3 k) y
        TMOD=0x01;
$ H' W  j. K7 A$ C        EA=1;
2 q. T1 Q/ Q- ]3 P* N( g        ET0=1;0 m$ X: W) o# m+ T% a/ P
        TH0=(65536-46083)/256;                          //赋初值
7 u0 F9 W' L0 A) l; L3 L5 i2 |        TL0=(65536-46083)%256;          h5 R. P& B6 ^7 g. M4 ~/ |" I9 ?
        TR0=1;
1 G7 ?0 f2 `' f! @/ b        while(1)
7 |+ y% Y% Z" m- {' F0 a        {
4 Q* G% v, w! W' q4 t                displaysecond(second);6 Z& t/ W: t: F- V8 A
                delay();
$ Q- F# ?6 N# f1 W* ^( y                displayminute(minute);
( T2 e( z" m, s7 N" `! n3 r  x* _                delay();1 M6 [0 {; r$ R0 m4 ]. S  Z
                displayhour(hour);
3 Y5 y  G$ I8 L- j; g                delay();
( q! y7 \$ d1 H/ }& g4 }0 n        }
* W& s' ^; X( M. x}
' M' J/ B" D6 s9 @3 B7 S& H+ V//=======定时器中断子函数=================//( H5 W# [' g# V4 _
void inter0()interrupt 1
7 b! R( A9 q4 g, Y* N{
# ~; N! R+ L+ R' s6 c1 u0 L        time++;3 E3 `/ C% `  Q7 v3 N+ j1 [
        if(time==20)
' v7 \1 b9 a3 G8 U9 Z" B$ n        {
4 E' p( }7 T% B* }) h* O: j                time=0;3 `% c% m( q+ A: l7 L% f# z
                second++;
7 p% T9 F0 @+ f7 T& W) ~7 K& H        }. D0 e8 u) j9 f
        if(second==60)- R, r& [3 @4 k0 g: V9 R. _! T* Y
        {
2 s0 }1 H* I% l& K9 Y                second =0;
! n# K! n5 Y2 |3 h- ~; G& ]/ s                minute++;& @/ [4 P  v: g, f- ?# b& u9 N8 a
        }
3 W2 t0 _! Q2 j: g, V' [6 k        if(minute==60): k4 }" W, G9 m
        {
6 W5 F$ F, |1 _                minute=0;; t" G8 ~" s+ |) N6 X+ B: E
                hour++;
4 A7 `8 b( _8 D# I% |  i2 t        }
1 M2 @) c7 }7 {2 |6 a6 w, x        if(hour==24)
$ r% d5 ~$ h5 S, w        {/ C' J* r8 [% ~* R
                hour=0;
" i; ]+ U( r* l  u        }
) X% X2 K$ [8 [% E% m8 W        TH0=(65536-46083)/256;                          //赋初值
6 M- Y* n1 Z! Z  e: f  x        TL0=(65536-46083)%256;        4 |8 g. W' A' w* @: H1 E
}

该用户从未签到

2#
发表于 2012-2-21 20:06 | 只看该作者
本帖最后由 ArthurGXH 于 2012-2-21 22:39 编辑 7 B4 I# P% ]& h+ x# m: X. O! q
# ]0 X3 _. K+ v) f" x
兄弟,我来说说你的问题: 
" H5 c. E. n$ s6 Y) N+ A7 {& D  displaysecond、displayminute、displayhour几个函数的参数请用指针吧。C语言的函数是传值的。比如:hour = 10;  displayhour(hour)  == displayhour(10)。是将当hour为10时,就将10传到displayhour函数。0 c' `6 V3 V6 k$ X. V2 B! `5 W" R
  改成如下: 定义时:   displaysecond(unsigned char *pucData)
3 O5 H3 k/ T) W. C  j' [5 H                     调用时这样:displaysecond(&second);/ P8 d  J) T6 _9 I( u+ c
  z* r5 G7 U) c0 C) n) F* t  N
  请好好学一下C语言吧。7 J  m# |9 l9 S7 ?4 {

5 I8 l' w8 |. E还有几个问题:
1 u8 r' E9 {" u  1. 定时器,请用自动重装载的工作模式。程序在每次中断赋值会有误差,会积累啊。
% _- z" T* t- o/ a2 c8 G' s8 D  2. 读按键的程序应该与显示的分开,不要写在显示里面。9 ^: M5 F! I0 O  y+ h8 @. b# N" C; R
  3. 按键的去抖动不充分。
# u2 G+ Z; s3 n" Z       4. 定义uchar 最好用typedef。
2 B% r* n# q1 x1 @4 |0 [        
* @4 U7 j  ~8 g4 \& Y3 X- _
, Z) o8 ]! {5 X: f3 X( @2 j# M2 m0 O

! |' i4 c( a) v6 B
+ r. u+ h( ?9 E2 P0 q3 P: Q8 r

该用户从未签到

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-20 10:35 , Processed in 0.140625 second(s), 27 queries , Gzip On.

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

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

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