找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

2

主题

10

帖子

163

积分

二级会员(20)

Rank: 2Rank: 2

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

EDA365欢迎您!

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

x
以下是我写的定时器电子钟程序,按键功能不起作用,哪位帮忙看一下。
" @" }$ m+ z% w6 t- i8 ^' W/***************************************************************************
. G- L  Y7 w8 |3 Z名称:用定时器定时做时钟
, @9 g. g; @8 |! d5 B3 g; u内容,自动从00-00-00开始,有按键功能
" d: o% Z- |* C( M; t芯片型号:STC89C52RC
' I- f1 r1 g0 P2 \9 {功能脚说明: P0为段选脚,P3为位选脚,所有引脚低电平有效.
+ U6 ]( C" R$ n- ^( V程序员:玄溪
) Z3 O4 z; S* O% F日期:2012.2.6
, l9 A4 A3 ~) f0 x7 E& V0 P6 \/***************************************************************************/
# {; G4 Y1 I, E* m4 Z* Y2 v#include <reg52.h>, n' T' ?* n6 j& r( b! ~2 K7 E
#define uchar unsigned char & i* ]) H' k9 s- e& F
#define uint  unsigned int! L4 i; P/ q& U# q' o
) J7 G. `( y/ i3 j8 p7 y
uchar code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};8 E0 z) L4 P! q! G/ w, O
sbit K1=P1^0;                          //分+' o7 q5 Y3 [% x/ \8 E5 o* A
sbit K2=P1^1;                          //分-! ?4 D/ k$ D# J6 c: D) h! E
sbit K3=P1^2;                          //时+
, v" M0 O6 j( D4 F0 H% g( L9 T$ xsbit K4=P1^3;                          //时-
  ~2 H  E! ~5 V0 }0 o
0 I5 G! z1 M! ]/ ^7 O- Xuchar time;                                   //定义中断时间次数
9 v% z& s* u0 ?# R0 Juchar second;                           //定义秒
2 P6 y, K. ^7 Suchar minute;                           //定义分1 ~5 `6 j8 f; ~$ B
uchar hour;                                   //定义时# j/ T7 M* x- Z% E$ s4 D- b
//===========延时函数============//
3 N' x( e. r5 n" C9 kvoid delay()4 M8 K0 u$ W7 u! i9 ?  n  Y" i+ t
{1 }$ T& S/ |' ~9 W  ^
        uchar j;4 K- j9 N# a; n) F$ ^& F
                for(j=0;j<200;j++);
5 X0 D3 B$ k0 j. U6 P/ k}4 I5 n5 P3 f" l! Y$ T, m- R* t
//=========显示秒函数=======//4 l! _- g* b- e
void displaysecond(uchar s)                         //带返回值% }; [% ^2 K0 S% r; Y" I. _
{
6 M6 g" H  B; N" V# H) I        P3=0xbf;, |% C; |1 w4 P5 }6 P3 N
        P0=du[s/10];+ _3 {# w% I) E# ]' @
        delay();* R( K$ |9 @% ]* l0 i
        P3=0x7f;
4 F( f' D, j: u) ]7 f        P0=du[s%10];
( L4 V, A6 L$ ^7 T7 _        delay();
2 i8 g% H0 P' v. f  I% X+ i7 B: |        P3=0xff;, R7 q, T6 `% }' w; W( j
        if(K2==0)
5 P' i; ~' k# B) l        {: D" v& t7 A3 B6 d' \0 Z
                s++;9 N2 m- m  @' H7 m
                if(s==60)
% `3 y% t; \$ K  I8 U0 V5 |                {0 `7 y4 Y! a) u0 P* x1 {) W
                        s=0;8 i0 L7 t, D) Y$ k% b8 j" M
                }# V# e" v3 q) |# a' `
        }: z" t1 Y1 K7 K6 `2 s! M
}; e: A6 u  x9 z
//========显示分函数=============//5 _) A  X3 W2 K$ u% @
void displayminute(uchar m)
$ n1 V& j' `$ z4 K+ L{
* q% J7 P3 y% C0 D. b& \  F! u, z        P3=0xf7;- d, e; H/ L7 q
        P0=du[m/10];! I4 S3 E8 q; a0 s+ [+ P
        delay();( [3 @4 N8 C* l
        P3=0xef;5 s/ e  u" O- g  U
        P0=du[m%10];% Y7 ^7 x( b- J  d
        delay();. P( \9 _( L' m
        P3=0xdf;
0 K* y+ w, ]* b9 b1 ?        P0=0xbf;
  e6 o, K9 r! A% t        delay();3 W8 J3 c8 N1 m8 h) T$ Y
        P3=0xff;2 i4 y% o- o5 p  ^/ k, b
        if(!K1)
& M% _! w+ D- B3 u1 ~7 ~0 I5 q5 o        {& h2 P7 ]2 b& O& P* g
                delay();. {' M- [$ q1 v: k! D  D$ f
                if(!K1)
, p5 p! S) x% G# F. ^( J/ c# x                {
  f. d, X1 n5 n/ L+ P                        TR0=0;/ n7 ^$ r, i- P- f9 l8 A' D3 o4 H
                        m++;) P8 V) E) A6 _, [7 M) b
                        if(m==60)% d2 j! R4 J- j- w5 G( M; z2 ^
                        m=0;( `7 A; z) K  ~$ A9 T/ ~  ]! D
                }5 E( T7 d: D( c6 w9 i
        }3 u' \+ ^/ W) L' @$ p
        if(!K2)
2 Z, M2 W" X4 l+ S9 u        {
5 M3 l% I+ l! G2 Y% y                delay();5 A0 f# [& Q0 {
                if(!K2)
6 O+ [' A0 Q; r6 P8 Q; e4 \9 f& \$ V                {9 z, u. n# f& T
                        TR0=0;+ i- A( {4 |, D8 ?
                        m--;
" c- N0 P2 e* G0 w( j6 H  n                        if(m==0)2 O* l0 t2 A) m( Y( `- V
                        m=59;0 M+ U( P3 p( V( q$ p
                }1 [/ K3 @7 _* @+ m: J3 |
        }
$ Q9 N% q7 a% V. C7 j7 ?3 p! h4 K        TR0=1;  e) Y4 l9 x0 U. t  t
}
: o4 }( d6 a/ \; m3 H  L# q8 R//========显示时函数==============//
* g/ `& |% B; P4 n& n9 Qvoid displayhour(uchar h)
; v1 f+ A7 V+ ]- ]! e- S{- g% j9 k) W& ^! e; D
        P3=0xfe;8 q7 N% t( }. Y) z; G9 S( l; \, F
        P0=du[h/10];
/ p- ]* Q( J  `3 v% [) {2 S* G5 T7 a8 j' y        delay();3 u4 w$ |; [6 e- n, x3 b. D( t& _" D
        P3=0xfd;
  g- P2 n7 O: W- A- v( A        P0=du[h%10];; j5 X9 k8 B4 r# {( G! `
        delay();
' ?* n; u% {4 p6 v# T        P3=0xfb;
0 ~0 d' w  A' P  h6 ]        P0=0xbf;
1 p' m# V$ t# B8 R( l1 I" F' X        delay();
5 J  V; t( h* E        P3=0xff;
$ C4 |% K0 a* }9 U        if(!K3)
) i' b# c0 K) u8 w4 w% P0 _        {2 N8 m# D5 t  \% y* b: Q7 _
                delay();/ [+ q( B1 |3 F& j4 r
                if(!K3)
! p5 ^2 Q+ K0 g5 E1 k                {
- v7 y$ @7 G8 T( [                        TR0=0;; o& l5 j; p: Q' w
                        h++;# z# a: t/ i7 }" ?7 W2 O
                        if(h==24)
9 _( {$ f2 ?- l% Q$ K: H0 k! [                        h=0;
  r! C2 t# ?; |1 y& N5 }                }
- x6 R3 h: F5 @! ~! q  z        }! J. n- c/ J( B" k
        if(!K4)
- W% m  n& M# y8 c        {
9 l' k* M' q6 `) m8 p& ?  B                TR0=0;
" D8 K3 D. u: h3 i0 `                delay();0 _3 q6 F2 h% h& v9 B, X' [
                if(!K4)* p- p. K7 v# ~" ]( e9 u8 H
                {: V  y* @3 r7 h' n, A; }3 R" Q
                        h--;, N. c' j7 N, p: F+ H
                        if(h==0)* m* G+ b( y* _( ?
                        h=23;+ C$ h( n+ H6 T  D
                }$ b0 d# Y' X& y  K: p
        }6 p% N+ v* K( ^* M) a
        TR0=1;
3 d# t" V5 B* o: t' X}0 \. ?6 G4 |. P

" |4 M/ ^' B" Y' P+ s0 `4 r//=============主函数============//
7 [4 S8 O, u  i# gvoid main(void)
; P0 {1 t! ^& i7 d{1 H/ H; Z: f  x. {" U8 Q; {# X6 s
        TMOD=0x01;$ b" k' g% f" v
        EA=1;
- i) t- F& X7 |" P# D5 e        ET0=1;! ~" ~& s" b5 g8 @1 g9 F, S# i
        TH0=(65536-46083)/256;                          //赋初值
: f8 j1 o5 {$ K+ n& F1 @/ R3 R% S. A        TL0=(65536-46083)%256;       
& `' l, d/ I6 i9 d. @7 g7 J        TR0=1;
1 g! H  Q, K7 G& v: D7 P0 d# b        while(1)$ l. @0 w' _3 M; E8 ]- }! v
        {
6 \! G" K; \1 N2 i+ E                displaysecond(second);6 [! @% n0 i$ |, G
                delay();" z+ U- d, ~+ s/ k" r' z
                displayminute(minute);% E9 |$ Y5 [# y- \+ \
                delay();  H3 W. T* i% U9 v
                displayhour(hour);
0 \# b5 g! i9 J" ]5 e                delay();" k  i7 {, P3 o/ `( v$ v# X
        }
: B- P  d% d; F. e- [1 b}
4 {1 Q8 ^+ {5 ?: e7 U' [6 m//=======定时器中断子函数=================//
/ J5 H1 v. f5 t) z  r# z" Y4 Cvoid inter0()interrupt 1
0 F! C* m8 J& d6 g2 f( t( O{  d+ N, |) z( \# g; U; o
        time++;
# }% L" Q# D$ O- a% J& f+ ]" s        if(time==20)
" o. L3 N8 n5 U: U+ b4 H+ n        {
. S* Y* l5 j/ h                time=0;0 M$ u9 m9 C- b
                second++;
! d# \3 W1 [7 b        }' u" R, B; P6 M2 B3 B
        if(second==60)  e; d9 z6 _2 b6 a: v; d
        {) i, Y7 x$ \* _& y) x
                second =0;
6 s% f: H5 B5 F+ ^7 g6 f$ K# [                minute++;
1 y8 d! V" a: V0 o3 f        }0 ^8 B% ]1 O0 x" F2 O( V
        if(minute==60)6 r% U% B4 Y7 f+ \, C- t6 e
        {/ x' G) `; ^3 o6 s7 R
                minute=0;2 d. Y  k2 e! V+ X$ }- t' A
                hour++;9 d- _; h) A- u1 j% C
        }
4 X8 @5 e# d: s3 b9 P8 t3 r1 P        if(hour==24)1 h7 W& n  F% h  V, r* s' M
        {
. V1 c, F7 b1 h" z                hour=0;
/ t  n; Z7 B& m        }
0 b, r5 f2 Y# r8 Q        TH0=(65536-46083)/256;                          //赋初值
4 K; j9 b: M( m% w) V! e6 m        TL0=(65536-46083)%256;        : C/ g6 B" d5 Z
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

12

主题

418

帖子

3623

积分

EDA365版主(50)

Rank: 5

积分
3623
2#
发表于 2012-2-21 20:06 | 只看该作者
本帖最后由 ArthurGXH 于 2012-2-21 22:39 编辑 ( G* A- s  a6 ~5 _3 k" r

. J1 Q6 v% r) r9 E3 `* R% _# J兄弟,我来说说你的问题: & M8 j; I' t/ o6 `# b6 W/ v% y6 z
  displaysecond、displayminute、displayhour几个函数的参数请用指针吧。C语言的函数是传值的。比如:hour = 10;  displayhour(hour)  == displayhour(10)。是将当hour为10时,就将10传到displayhour函数。
# z/ w8 A" c1 v8 ~  改成如下: 定义时:   displaysecond(unsigned char *pucData)0 n: w% Q0 Q& L4 {- R4 Y& ]; _1 M
                     调用时这样:displaysecond(&second);
# P0 e9 `" X6 v3 K  P. K) a  }8 P. H4 O7 a4 T
  请好好学一下C语言吧。
4 g" Q  r/ p8 N9 q3 J0 y  F+ _6 t' x$ ]1 K0 q% A# v
还有几个问题:( u8 T* e# N# D% v  J5 y
  1. 定时器,请用自动重装载的工作模式。程序在每次中断赋值会有误差,会积累啊。
% o7 ^) Z9 C3 T% Y& B7 u  2. 读按键的程序应该与显示的分开,不要写在显示里面。
3 {$ S+ |% y* X. B  3. 按键的去抖动不充分。
  ]1 ]7 [% G+ Y3 k9 u8 E- p9 x8 n       4. 定义uchar 最好用typedef。
/ O' d  N4 ?6 Y        
( S- z( e( V, _6 i, a7 o( M. R& r0 [7 {7 h

% Y. s. s2 _5 f$ ?7 M( V2 U5 s; J1 y6 ?- Y$ r0 e5 L
3 P8 D/ E! k' e: U

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, 2024-9-19 10:11 , Processed in 0.066005 second(s), 39 queries , Gzip On.

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

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

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