找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

巢课
电巢直播8月计划
查看: 1184|回复: 5
打印 上一主题 下一主题

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

[复制链接]

2

主题

10

帖子

163

积分

二级会员(20)

Rank: 2Rank: 2

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

EDA365欢迎您!

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

x
以下是我写的定时器电子钟程序,按键功能不起作用,哪位帮忙看一下。* R5 R- m" }& G/ R2 w- h3 L* M$ s
/***************************************************************************
/ [( ]7 [( e3 {$ ^6 @名称:用定时器定时做时钟
6 i; j, t6 J) Y  K2 j5 M9 i内容,自动从00-00-00开始,有按键功能5 \2 ^6 H3 q0 y2 \* K& ?: ?
芯片型号:STC89C52RC- t5 s% w# ?) x( ?6 P+ u% t$ J
功能脚说明: P0为段选脚,P3为位选脚,所有引脚低电平有效.; {2 f( k# x  y7 a' A
程序员:玄溪
# z  d4 N0 ~+ J: G: X日期:2012.2.6
% f1 N6 s: p# h, f/***************************************************************************/. Z! ~" W, V! \# |( q6 Q
#include <reg52.h>
) h- W$ i; i- c5 P; M( S#define uchar unsigned char 8 @, p' Z4 Z/ Z" L
#define uint  unsigned int
: G: H( l; f# R5 S
1 }1 }4 a  m  ^: y/ n7 l. R# I, b3 f% Ruchar code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};" X# U/ ~3 E* Z5 W1 o
sbit K1=P1^0;                          //分+
3 `  B. m, U- tsbit K2=P1^1;                          //分-
( ]$ q2 |& v2 ssbit K3=P1^2;                          //时+
9 A7 g) u: v% U6 K, Y: @6 Qsbit K4=P1^3;                          //时-
) b" J4 @+ t) A# M4 z" p$ v, i+ J0 i5 w# R
uchar time;                                   //定义中断时间次数  o# n* |  ?2 f
uchar second;                           //定义秒% ]6 Z: x6 G* D" N$ y/ L
uchar minute;                           //定义分
( A0 ?1 g# ]( R% O( |; R& ?uchar hour;                                   //定义时
) q7 ], V) V" ]1 E: p//===========延时函数============//
2 N! J3 c4 {# Z! s, m; bvoid delay()6 ~: Y* W3 d0 J
{: G! f3 b. _, O7 k0 `
        uchar j;
, y1 w7 h- X2 X" }9 ?                for(j=0;j<200;j++);
. k2 {5 p7 D1 N8 m}. Q( \8 b5 z  M& D, F, i
//=========显示秒函数=======//
8 j2 ~+ m2 I1 m8 U0 ]7 x. ]void displaysecond(uchar s)                         //带返回值1 N+ D9 V& |* F* D
{
$ a! [1 i5 L- W        P3=0xbf;4 D( j9 R/ M; v7 V* ~" T, S% v( L
        P0=du[s/10];8 X% L$ q  ~/ p  J% u1 t
        delay();9 R5 o- k6 }8 g( j, r+ q
        P3=0x7f;* @8 [, q' b! E
        P0=du[s%10];
% ^- f3 v! b1 [/ `, ~        delay();
; b% l" E" G) Q        P3=0xff;
% p# @' ~$ p- g& h        if(K2==0)% L' i' L* F2 o- d9 K
        {
$ c, @/ W/ n+ y( f) i% ]  @5 I+ @, {                s++;
; D/ h& y, b- C& h                if(s==60)
) m, W% M& }& F/ c: {& p                {- g$ K7 t6 p* _
                        s=0;
7 P. z3 _' I2 F                }* |0 H. f6 U& e3 e: q+ u
        }
& y7 n+ {7 l$ ~! g}
# ]5 w8 d! H; k* E$ G//========显示分函数=============/// a9 m9 Z, Q' f. P! p
void displayminute(uchar m)( y5 w9 J5 ]2 c9 p& A3 {
{! C' ?$ J0 k& Z
        P3=0xf7;7 F  u- X* e! r- `8 z8 q2 b
        P0=du[m/10];
/ p) V- k' i5 ?, y9 j6 t        delay();8 v0 X1 u2 A! a6 W: c0 Z
        P3=0xef;: c1 w' i& v) v8 X
        P0=du[m%10];, V3 J6 N. J* h& m' @+ l
        delay();
  u$ y8 f& t. r1 a" I        P3=0xdf;
) B0 C" v0 C5 W1 y% O        P0=0xbf;
3 F* x$ }% t# Y' N! U7 w8 m        delay();% g8 b" u  {: A3 h) w' U- r
        P3=0xff;4 \5 O  U/ q0 R: a
        if(!K1)* H7 }0 o% P- f- p
        {; |& m4 r6 `, B
                delay();
9 A9 ~& U3 |& Q+ r: C6 r9 ^, |1 T                if(!K1); o6 l8 ?6 B: G  r+ m7 W( c  D2 O2 `
                {, ^" r# ~+ q+ ^8 \( K' j0 C
                        TR0=0;
( l* V7 a/ }7 i: Z1 h1 I: N3 m! G6 R                        m++;4 I) _/ u8 N/ ~2 ]
                        if(m==60)+ S! k9 E# v+ }/ m, x7 e
                        m=0;6 d8 a3 S7 d4 |5 O" |) R
                }& L  w; d# ^0 Y
        }+ K  Q! @6 O5 \3 O5 V) i
        if(!K2)
& x6 ~0 N' X* z4 [        {1 s0 M! B+ k. }. X( m
                delay();9 z/ V  F  Z. z5 z2 Z9 t
                if(!K2)$ S& F; w% ]8 Y( K
                {' I* Z. T0 d( F" W7 R2 I  c
                        TR0=0;% G0 O7 d" P& v/ I* V! H$ s. F3 h
                        m--;( w# Z: U; Q8 w# C& V
                        if(m==0)0 U: }0 A/ E% w4 }8 L
                        m=59;
0 D8 \' R8 I& ^& i                }5 ~8 d9 D: W5 y" x: j5 a1 L
        }9 s' O( C' T7 `" C7 `
        TR0=1;
2 e3 x+ |% @7 _}: J! t' `9 D- C) C7 p) ?- y6 T
//========显示时函数==============//. ?: d# f* Q& u3 {
void displayhour(uchar h)
+ ]) B$ k: a* V5 L{
# L, D& I9 ~" S- X& g6 H# s5 w        P3=0xfe;
  _: M* x/ [' f        P0=du[h/10];2 D# J) a# V3 n) P) ^; }
        delay();3 v: t4 t9 V, K4 Q
        P3=0xfd;
7 f1 b5 n- k8 `, ^/ d* G$ @        P0=du[h%10];: l9 f$ p. e5 _6 n% q; u
        delay();
3 F4 G8 D8 w& i$ `" e! T/ L        P3=0xfb;1 v3 _( _) K" C  p8 L- B
        P0=0xbf;# m; o. |2 c0 z1 y  }
        delay();
4 _4 i' \+ C1 M# N; f        P3=0xff;
3 z2 X6 y- p8 w$ `6 _9 M        if(!K3)
; G* d4 A  G. K$ F) }, g) H        {
: b. I! w) |4 J! G/ d. k                delay();/ n  {7 g! ~* E: ~  V: d
                if(!K3)+ \: ^9 R. V9 `8 ?6 v8 R3 }
                {+ `9 e" B: W8 p5 s/ }( z( P# u& x" B: }
                        TR0=0;
! A, v( w: k( e7 F5 g                        h++;; k# L+ l" N( g8 Z( u! A
                        if(h==24). m# |: Z# c/ D+ y/ H4 n
                        h=0;, H; O" `; f& C( L; d
                }$ Y0 l7 Q# k1 H. e$ O7 B
        }
7 X8 c+ H' [4 D2 R& z( i. k5 g        if(!K4)
8 W5 t7 n, ]( h) f, [- G  D        {7 W, g' ~5 z) u& S# ?! Q
                TR0=0;
4 ]9 p$ s# M% h                delay();& ~! N- l1 a! i6 _; v9 n0 `- o: }
                if(!K4)- Q. z* ]" Z* s. R) S$ C8 p$ V. I
                {
6 B9 B5 m8 P8 j0 I; R+ q                        h--;% L  ]- I" E1 S1 A+ y
                        if(h==0)
4 H5 {4 e; ]9 n2 ?% D3 g4 }3 s                        h=23;
( c, I& U6 q# s  L6 S+ n7 m                }
3 W4 x0 S9 h% ^) l: }2 `+ q; ]        }  n- E) |0 F% g2 q& L) T% y
        TR0=1;
- U0 N0 X3 B5 S% a$ _}
, z: H1 H5 i6 E$ e# u: n
3 f- N! u+ j7 ?//=============主函数============//
2 v" k$ Q2 t2 N3 hvoid main(void)/ i" w( i! I* J: U5 R/ Q
{
$ I* R8 z. S) N5 k9 A/ L% R        TMOD=0x01;
9 c9 I$ _8 M5 k$ Y3 A        EA=1;& g1 r9 z3 w4 y' T
        ET0=1;
2 m1 X9 E' t- C* [. [        TH0=(65536-46083)/256;                          //赋初值
/ T6 z2 g" R5 V  g' z1 l        TL0=(65536-46083)%256;       
' n6 v8 Y# b& u! Q# e" J        TR0=1;( z& ?, K, C% q! N: x  b* W. H
        while(1)
5 _8 B' R7 d+ J: o8 S$ B        {
: ^/ \% d1 K/ I: P5 k, ?                displaysecond(second);% C: @1 g4 t" `, p8 g5 ^1 r4 i  o; x
                delay();# a/ K, J9 u' E
                displayminute(minute);
! R' u" {7 N7 w1 y/ V7 H                delay();! Z# B9 q9 C0 ~  _
                displayhour(hour);( i! p( C4 X. d% |) Z7 R. E
                delay();
. |. ]3 h, _) H! u7 X        }% M  X) V1 y4 n+ v; g- Y
}
/ F+ q) ^' c$ q8 J6 c$ c$ b//=======定时器中断子函数=================//
  _3 @0 U& _$ v, |; g8 i3 avoid inter0()interrupt 1: D: z9 U9 ?( V* ?: q7 `
{1 b9 q0 |$ d6 _3 C
        time++;, y2 a9 S5 H  d+ ]' m
        if(time==20)0 N7 b' |* T, q1 S
        {& E+ ^, X3 E" @6 J
                time=0;
; p* b9 k0 w# H* X' n( Q( n+ O1 T                second++;
+ S5 ~, R/ |7 w1 p' E* x9 `% Y9 A/ ^        }
/ C4 c2 y6 ]. O+ S7 n4 [1 t% m. S        if(second==60)
  T% l7 _$ x- B. X; a        {
. g: {& P8 [! g) H+ j/ Q                second =0;
+ v9 F, v( @& q, i. ]( j* K7 V                minute++;) ?1 I* m$ y% |6 V
        }
: h4 Q/ p$ O% J2 \$ P9 m$ h        if(minute==60)
6 B* t# e8 F* C9 X% a- G( S9 P        {0 ^. Z7 Z% q! i$ Y
                minute=0;) m( I7 s# \1 y, A& }$ S/ h
                hour++;
6 z9 F# S; u. o  ]6 d! @        }
0 {4 M; R- U: B        if(hour==24)7 c% n% v' J8 }2 T
        {8 E. u& K9 o( m0 H/ F  @2 \
                hour=0;
$ B  X  e9 u1 B" z) n0 D/ ?1 P        }7 }& i  n) e6 R# x$ |5 c: K
        TH0=(65536-46083)/256;                          //赋初值
' B7 N. J: p  @        TL0=(65536-46083)%256;       
& m1 n1 @% n+ ~, q' d" u+ E1 |# R$ h}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

12

主题

418

帖子

3623

积分

EDA365版主(50)

Rank: 5

积分
3623
2#
发表于 2012-2-21 20:06 | 只看该作者
本帖最后由 ArthurGXH 于 2012-2-21 22:39 编辑
) ]# t2 N3 g7 i* v. ?1 D
. Z* M1 Q* I4 t8 H6 d# A) i4 v3 n; f兄弟,我来说说你的问题: . u% l5 _- J# b; s" R2 X
  displaysecond、displayminute、displayhour几个函数的参数请用指针吧。C语言的函数是传值的。比如:hour = 10;  displayhour(hour)  == displayhour(10)。是将当hour为10时,就将10传到displayhour函数。
% J8 X$ H- ^3 [5 [& A  改成如下: 定义时:   displaysecond(unsigned char *pucData)& |! ~, ^* K8 d1 P) O. t
                     调用时这样:displaysecond(&second);
) P7 Q+ w' [1 k3 E: i  }9 p+ x2 N6 a* L
  请好好学一下C语言吧。
- l/ f- _# L2 G( h- L$ r  k0 I
4 U% B, h5 `/ V& K! r2 F还有几个问题:0 X6 }4 D7 v/ ?  v; S4 j
  1. 定时器,请用自动重装载的工作模式。程序在每次中断赋值会有误差,会积累啊。
2 S& Y" B# I2 p5 V# H6 t: L  2. 读按键的程序应该与显示的分开,不要写在显示里面。
! y' C- N. \% y5 j& a  3. 按键的去抖动不充分。) m2 m/ Q5 [7 B
       4. 定义uchar 最好用typedef。, L0 j7 n' }( o8 N- n1 r( ]
        
2 m5 H# Q6 u5 k
' X& x/ R' m! E- I+ E5 F
/ l4 j& x6 A/ u+ z4 U
" |! f/ u; ?4 ]$ [; g! E7 [% W& O* n0 J" ^, ^/ O

2

主题

10

帖子

163

积分

二级会员(20)

Rank: 2Rank: 2

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

27

主题

159

帖子

1146

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

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

27

主题

159

帖子

1146

积分

四级会员(40)

Rank: 4Rank: 4Rank: 4Rank: 4

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

Text1.c

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

代码

0

主题

7

帖子

203

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

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

评分

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

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

关于我们|手机版|EDA365 ( 粤ICP备18020198号 )

GMT+8, 2025-2-2 06:44 , Processed in 0.065927 second(s), 39 queries , Gzip On.

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

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

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