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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
以下是我写的定时器电子钟程序,按键功能不起作用,哪位帮忙看一下。
/ S9 ^$ h/ @# k' O! Z: r* h7 c6 H/***************************************************************************
" V  v) a" h7 Z0 f9 m0 J, x名称:用定时器定时做时钟
% z" O& f5 I6 E4 M& q, ~内容,自动从00-00-00开始,有按键功能
8 r( G$ ?# P6 `# h芯片型号:STC89C52RC% e  d: I. K$ s, @. h! [" b9 ^1 t
功能脚说明: P0为段选脚,P3为位选脚,所有引脚低电平有效.# I6 [  Q3 g* l! S4 L: l
程序员:玄溪% {3 r4 ^/ w4 w
日期:2012.2.68 a  F3 E9 @. V! B; F
/***************************************************************************/
* b  z4 G/ k, Y% r#include <reg52.h>
8 ~* n' J: M! e) \#define uchar unsigned char
4 I4 g* t( Q+ @& z# s+ G4 t#define uint  unsigned int
) c6 d' ]- G: ?$ U+ S$ h
" |- a) u3 G7 n  }: Yuchar code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};$ v$ s7 G! C$ w9 Q
sbit K1=P1^0;                          //分+
( f) F6 P* ?# n" E! Lsbit K2=P1^1;                          //分-
4 X! c: e4 }2 C4 p# X) Msbit K3=P1^2;                          //时+
) D+ V1 R  M- e* qsbit K4=P1^3;                          //时-
5 _+ Z8 N% l5 K% [
5 a( L* _1 W8 Y: R" f! R% s1 ^uchar time;                                   //定义中断时间次数4 z* N' x3 n: W2 w5 J
uchar second;                           //定义秒
  ~% I- `) C2 H/ cuchar minute;                           //定义分
/ O/ n1 V, ~) _; |4 H" u# Fuchar hour;                                   //定义时
+ P, U/ s7 ?3 i* S//===========延时函数============/// z& Y" c9 b7 g, Q) B/ s
void delay(), P& ?/ ?1 y8 f8 z6 p
{2 H! ]+ G. D0 W9 i( D3 F+ D
        uchar j;/ `0 n1 w/ w; t6 D1 v0 l$ T
                for(j=0;j<200;j++);
  `+ f* c2 |8 ]# n3 ~}
/ E; h, S% T# W* W6 s  |$ d//=========显示秒函数=======//, O/ d! G* ^$ e0 k
void displaysecond(uchar s)                         //带返回值
& O  l" a% X* z8 P# c{
0 @- q2 \, B. N1 t: f7 C        P3=0xbf;
0 u9 |! v9 R( {' U5 X5 e6 o" v* t        P0=du[s/10];
4 C- ]" \$ l* i3 i        delay();
9 r0 ^. y- m& d        P3=0x7f;" B- e; I8 @0 n
        P0=du[s%10];" K, D, G  @5 R7 d3 n
        delay();
6 d0 f3 g! a3 }  m! B% [        P3=0xff;
. J6 ^# t8 u5 {( I' V7 y  ]        if(K2==0)7 n& n: g$ I( j: e; a
        {
& Q" t* |- u: J. F- x                s++;% b( m' X9 T. K3 L. I# g: q
                if(s==60)0 v5 G/ @8 t+ h! C* a
                {- q- u# ?7 F' r
                        s=0;
% ?$ A) d  ?# Y3 R8 Z                }6 d! i/ _" c7 h' N
        }
3 W0 I# y$ m. i2 C# `3 A% b& T}
) F5 @5 ]5 |8 T: B' i//========显示分函数=============//
0 r3 K* B: ?# h9 e! P! p; ovoid displayminute(uchar m)
6 t2 P! s6 n$ k{
# h& ]. p6 G+ Q6 n4 K9 _+ r# }        P3=0xf7;# e* h) L2 L7 n: H* ]2 m  i/ N
        P0=du[m/10];
  L8 M9 n9 n6 }: E        delay();
& A' U# x" ]! @# h! ^8 a6 h& A        P3=0xef;
) o; \5 G! R0 a7 ]3 `/ f* D        P0=du[m%10];
* {! c; R- H# [0 ~$ N) G        delay();; {" I! j8 v0 [0 x
        P3=0xdf;
, ~5 w  F4 E' T( r) `3 e        P0=0xbf;
& r" r2 D6 k1 o: y7 ?* @+ D  Z        delay();
- r, ~6 O& B# l0 J3 ]( K3 }# i        P3=0xff;3 @0 ]" t0 G) ^- b6 e  W- t
        if(!K1); T$ r+ J$ V* Q( o9 B$ ]- J
        {
( l* K# G0 Y8 Q                delay();
1 p8 P- J8 n9 f6 q  T, w0 O                if(!K1)
. l) N5 J2 [% O2 @" S                {) `1 U4 K; X3 }- T+ Y
                        TR0=0;" ^/ Q( t1 L+ J) E
                        m++;
# X. r8 Z% N3 q& ]2 ~( g                        if(m==60)
2 l3 j4 z! T5 l; e& U                        m=0;
( O! W* ?3 C2 f) }" F" z4 |( P8 j                }
2 D  |, e* l& q  |5 q; u% T" [- \        }+ q  [6 p& y: `4 M( T6 J
        if(!K2)
' [% X9 @  e. ]        {
+ v% E; w# }/ O0 N/ G2 s, R1 V                delay();6 |( q- r3 o3 X. v. i8 p
                if(!K2)
+ X4 ]$ N+ H" {, z& b1 _# q: @% m                {3 t8 ^- J2 e% Y1 W. G5 d
                        TR0=0;
$ T- Y& C0 o5 ?7 `% H2 x6 N, W/ G                        m--;( j4 z4 W$ n9 G4 R' f
                        if(m==0)
6 W  U9 j1 h; k+ n1 H" C, ?' U% {                        m=59;' D- }( g4 M5 I
                }
' @9 [8 Q2 w3 Z: W2 T7 B        }0 R: M, K. ~, O4 ~( f
        TR0=1;' a/ ~; h) y# ]6 U
}% i7 D' b6 P, L0 q
//========显示时函数==============//: L: U; U8 u! F8 [! V
void displayhour(uchar h)& ~  w6 a: n# R" M
{
0 k5 c8 ?/ Q3 h* j% _+ z$ N        P3=0xfe;
# T( y# _  w' V- u7 [) N4 T+ m( b. ~        P0=du[h/10];9 [' K9 V3 y& k4 S1 _) D
        delay();
! K( x, j0 T* W& A        P3=0xfd;
( s7 X6 X+ a5 [0 e0 }2 z* I* C        P0=du[h%10];: K# {# P0 r, H4 {
        delay();
) Z/ I! [; ~5 g( t# n        P3=0xfb;1 T- j: \- U3 m. n- q
        P0=0xbf;  x# Z: X) d; D- b# S; N+ T
        delay();
, e( x0 L# a! |        P3=0xff;" `( _/ ]. v& E. `2 a
        if(!K3)
, D0 i1 N8 R# }) E7 s        {
% e$ j/ c# e/ O6 T2 v+ H& h                delay();8 C" E: I+ j6 f7 s& w! d1 X
                if(!K3)' r. o# ~/ |1 K5 G
                {) T1 p  ?8 D3 P, L: O# {
                        TR0=0;
! Z0 r3 H& _* z; a0 I8 ~                        h++;
& L1 z% p% x( \2 ~  l$ e6 e                        if(h==24)
6 [/ y# P# O. h" z+ o- K                        h=0;) ^  I! k5 t7 e: s
                }" h  Y% f& n8 N5 p/ z
        }
6 f' o% g# T' \, ?        if(!K4)
0 A1 e* T6 L* J9 [; d9 j        {
% }; g8 S8 y* m5 X5 o# p; k, T  @                TR0=0;4 B9 ]4 M& [; Z# k: x0 y# ?+ T
                delay();
/ R- c* R9 Z& b                if(!K4)$ t+ v; B8 T# W" ^3 y+ S6 l
                {
% U5 r4 E1 @) |                        h--;1 Z5 b! a2 J/ `# b2 a
                        if(h==0)/ v( L& a! e# T8 Z9 T( _, ]
                        h=23;
6 m- o7 I% u" }: P7 p" X                }+ X* V! b2 Y' t- h# Q4 Z: w7 D
        }, v" I7 X  Z8 S. m7 U2 z2 R
        TR0=1;
8 M# Z+ w. W" E: p}
# {: A9 L) V  b5 R: q' _2 P; q% I
//=============主函数============//
0 Q1 x# u  ~8 ?4 C8 D* rvoid main(void)
2 d- P: e1 t8 n{
% b; I9 F, a; x7 J4 d: S        TMOD=0x01;
+ w7 v$ s5 s& G8 J3 f        EA=1;
/ o: L$ z: w) T0 c0 ?        ET0=1;( i, W' s) x) L4 t+ z; p+ o
        TH0=(65536-46083)/256;                          //赋初值
/ l: ]/ b+ H5 X& \% S        TL0=(65536-46083)%256;        7 R1 z, w9 x6 |$ h  i4 p" X
        TR0=1;/ f! b0 J( C9 z- G
        while(1)* ]9 s0 N/ }! W* ?& f, |+ u  w$ {" {. X
        {+ x6 Q* Y4 c  h, c* b
                displaysecond(second);+ t& \3 m& N: l, m
                delay();: }, v2 ?4 a' e: f' h) i
                displayminute(minute);3 h4 _- G, N1 S
                delay();
2 k  X) L5 c/ ]% m  V                displayhour(hour);
$ _( d1 p9 U, ~0 M) {                delay();
( ]- y  q' k' E$ b0 U! Q        }6 _* J, }8 T8 M  N. j' l
}" e4 _2 f# y. v7 D8 ^) h6 z0 C
//=======定时器中断子函数=================//8 k0 e+ l' ]/ `9 j
void inter0()interrupt 1
  u2 m1 _# D% q{6 a" _/ `* X  ~, J* }, v+ N
        time++;
& i4 y. o9 M3 B9 t$ G  Y8 ]        if(time==20)4 i3 x+ P! t9 j1 B
        {' z: L/ O; L( h5 ~& n4 J: i+ w2 T- s
                time=0;7 L5 [8 s; d( p  _
                second++;
2 ^* `7 k: _+ j/ a7 A6 D+ [1 s) w) R        }
9 F! h0 K7 Q4 Y) M1 Z9 x  a        if(second==60)/ Q; d* H; k, s  Z- A9 g
        {0 ~( s8 D) q+ E1 ]/ s5 f  M3 t
                second =0;  S- n' y; f! v0 I: O
                minute++;
( X. Y+ Z9 e, i. |4 v& z' U6 ^        }1 r; z8 K6 M1 _5 b3 k9 t( w8 `
        if(minute==60)
- ]+ }+ w/ d7 @& ?2 H  ~& J8 q  g0 X# ?        {, w' R3 M- N8 m; e) K
                minute=0;
" k9 T% c" ^+ [6 b                hour++;
0 E  J/ E, k! E6 u4 J        }
9 s: \6 i7 C, o! U, r4 f8 V6 p! T        if(hour==24)
- F4 P  X& J; Y3 v4 K. ^        {
% r$ i+ Z/ M  p/ q: R                hour=0;
: G$ z% F3 y1 y$ f$ S1 L. A        }; b1 Z+ y, A0 t
        TH0=(65536-46083)/256;                          //赋初值
0 K% \/ u) T% _. V' s        TL0=(65536-46083)%256;       
2 c2 r3 Y- V! g; E: i" x& B}

该用户从未签到

2#
发表于 2012-2-21 20:06 | 只看该作者
本帖最后由 ArthurGXH 于 2012-2-21 22:39 编辑
2 e( G# y4 l; z' t+ ~/ V" D
" }# I8 K0 e. v( D. B兄弟,我来说说你的问题: 
1 ~% ^( S, q; v8 F2 ?  displaysecond、displayminute、displayhour几个函数的参数请用指针吧。C语言的函数是传值的。比如:hour = 10;  displayhour(hour)  == displayhour(10)。是将当hour为10时,就将10传到displayhour函数。2 T6 k. k8 U: M
  改成如下: 定义时:   displaysecond(unsigned char *pucData)$ ?; m, ^# q- O1 T- n  N
                     调用时这样:displaysecond(&second);
6 J! z  c- D/ G9 H' m; J9 j, Y$ @  f4 P
  请好好学一下C语言吧。2 v, L/ ~' p! u" _6 v# {7 f6 F
6 d4 P# \9 d  P; ?
还有几个问题:* a: ?9 C6 @  C
  1. 定时器,请用自动重装载的工作模式。程序在每次中断赋值会有误差,会积累啊。
: W5 n  t( q* `& `4 N# _  2. 读按键的程序应该与显示的分开,不要写在显示里面。9 t9 Q5 L! k  R9 C# F% G
  3. 按键的去抖动不充分。* F+ ^. P: \/ N: A# J
       4. 定义uchar 最好用typedef。
  H3 H. z0 D5 t; ~* b5 Y+ {; v& i        
. {) m' h7 G4 @* p6 F1 ^7 ?5 p$ v2 Q% M3 z9 k3 h
0 d  @$ @6 l$ l
% ^: f& }6 X4 u6 g9 Y
( a# D5 M6 R' z' k$ b5 W

该用户从未签到

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 13:24 , Processed in 0.171875 second(s), 31 queries , Gzip On.

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

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

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