找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

2

主题

10

帖子

163

积分

二级会员(20)

Rank: 2Rank: 2

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

EDA365欢迎您!

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

x
以下是我写的定时器电子钟程序,按键功能不起作用,哪位帮忙看一下。# V8 q5 |7 S5 n3 t: y2 G
/***************************************************************************
- F3 a5 r0 M2 y. |' D$ i( n名称:用定时器定时做时钟4 f8 ^% {0 @6 @9 x
内容,自动从00-00-00开始,有按键功能" C+ y. f6 v' I7 I- X* S
芯片型号:STC89C52RC
" G& ^0 a- b! ^, J功能脚说明: P0为段选脚,P3为位选脚,所有引脚低电平有效.
8 ^# C8 H/ d, ]) F% A" N程序员:玄溪4 g8 o( K1 E' w- c. L) r8 p$ N
日期:2012.2.6( c2 l2 l7 _0 J1 }" }& Y
/***************************************************************************/5 h. l8 F, |( k+ K( ?* r
#include <reg52.h>
; L% l4 t7 t& R; n& B#define uchar unsigned char 7 o, T: v- C+ n+ d7 B/ P  D
#define uint  unsigned int
* i- Y: [4 m3 O) i+ O3 O7 a
7 y& B4 l+ m8 K4 D; ~9 xuchar code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};: T/ ~, ?/ n, r/ d3 ^% ~3 d1 ~; G
sbit K1=P1^0;                          //分+) f# |& B' W5 r3 Q4 x! u' d4 ~
sbit K2=P1^1;                          //分-' O6 z2 R) D# c- x8 |  v
sbit K3=P1^2;                          //时+
9 P5 f7 C7 T* M6 @4 b* b. q/ K( [sbit K4=P1^3;                          //时-
: A1 d3 S; n6 \# ]9 Y
; U2 {$ i9 O" U% R0 buchar time;                                   //定义中断时间次数
* D7 B+ F# U) ~* z  f# r% q/ ^uchar second;                           //定义秒6 a' r4 K  h) v$ \, c7 z1 u+ M+ b
uchar minute;                           //定义分
# T# |3 I! D* ?& n: _uchar hour;                                   //定义时
% ~2 D9 Y0 l* H7 C//===========延时函数============//7 ~* o. k0 k/ E
void delay()
9 P5 M* N- \1 B: U. ]) |{' b7 p+ l" Y, H! G; G6 z
        uchar j;
8 @& Z  V$ C/ _  I( b: N                for(j=0;j<200;j++);& u- k2 h$ a" |8 p1 J
}% O: f+ s+ j3 Q0 Q* @1 E
//=========显示秒函数=======//+ |: w# ^- n% i/ k- P4 v
void displaysecond(uchar s)                         //带返回值/ n. ~: T  L, C# _. U% O$ T( m, Z5 `
{0 l8 O; P6 Q5 c: Z8 M: @! {
        P3=0xbf;
" B3 A/ z) {1 G        P0=du[s/10];
; Y6 L0 L) n8 h1 d- D        delay();. c1 ?4 ~( ?1 u/ B1 x0 h) s
        P3=0x7f;
5 K* t8 E. G/ ^+ V- D) |0 W- }$ d        P0=du[s%10];% z. m, L* |% ]) G7 {# D" P2 s
        delay();1 ~$ d, B" J' k1 L& a( s# n" {/ `
        P3=0xff;  Z; o( b" k7 I1 o' z* Y2 Z, O
        if(K2==0)4 V% G- _# N$ l4 @. S
        {
+ _( q- Q+ D% K" t                s++;
  g8 _% e% j7 l/ j2 P$ f! |, Q                if(s==60)
. m; Y, \  G; w; L                {8 ~+ y! X+ c" ]; o2 C8 G
                        s=0;
# y* C; U4 c0 s) f+ a                }
1 B1 A( B+ \) W% F1 B1 x$ c        }
/ c; k; c$ o0 u}/ @5 V$ e5 q0 o% v% S* M
//========显示分函数=============//
( @8 I8 |  t, d' |# rvoid displayminute(uchar m)+ K; K9 |3 b7 i! }8 _( p
{( I, R3 y& N% s% o5 k$ Q2 Q3 z
        P3=0xf7;
) }7 C4 p- V) y0 ]* u        P0=du[m/10];
  Q! u$ O' M8 v$ \) x9 b+ Y        delay();5 C2 K8 S6 ^: x, e; p0 i
        P3=0xef;- d$ `* r% z. ?/ a
        P0=du[m%10];: ?7 _; M' W! o/ M" [
        delay();" S4 a2 h' E9 M& }) H1 O
        P3=0xdf;4 o7 P+ y' K6 e' D
        P0=0xbf;
- }+ Q1 A3 i# k- L9 C6 R2 i0 b        delay();
$ `% p' R: z* ]' H# ^        P3=0xff;
1 o7 N$ {' ^5 T1 L. [        if(!K1)" ^/ ?  }+ Y8 P* L
        {" a/ s5 ^! r/ R9 o% I2 }$ K
                delay();- T3 W# ^8 k( O( ?5 u" C5 f
                if(!K1)4 w# T2 n5 ?# g/ v
                {0 h% m4 B" C! e8 u( `9 m" v
                        TR0=0;' Y8 [& z7 \2 O9 C, e
                        m++;
$ Q3 T* Y4 h5 g4 _! |                        if(m==60)
0 g  s& B$ ~1 o7 R                        m=0;
! W* @4 \- K6 I                }
$ X  I4 a& r3 S! F! @+ w- ^        }$ V4 U, a( z: N3 f
        if(!K2): I$ h; Z0 S, G7 m' E8 X
        {- m2 Q. M- j1 C  A$ i. f
                delay();# g8 [' q% p8 e0 s+ Y. C3 x
                if(!K2)' o5 ~' q7 m: `. \# s% m: e
                {# n9 c/ P) n& \, Y+ \' n
                        TR0=0;
- \, N3 Y% V6 R! ?. S- Z' r                        m--;$ m5 G% p; t6 Q) |  Z8 G6 M
                        if(m==0)
6 q0 o  B1 x! N: v* p! c                        m=59;: M/ L7 k! H1 _! A8 f+ e+ |- L
                }/ I$ _8 X. F: E& w# W7 E  |; A
        }
1 ^9 _; g9 f- v: n1 `1 e" i        TR0=1;
8 G1 G" A+ p8 a- F* U. q( [}5 R+ z6 L' M# H7 _8 b) j
//========显示时函数==============//
8 P. N8 [, I5 {. h! T8 V% E% lvoid displayhour(uchar h)5 h. q& g& V# I- k6 g0 y
{
+ f9 b! |2 [/ N        P3=0xfe;
, ~3 {! N' X' W! ?9 P- Q        P0=du[h/10];! z) t* b# I7 q3 c
        delay();
9 _/ ?# R" D7 m        P3=0xfd;
9 Q* D/ [0 B9 d) y1 ~        P0=du[h%10];* R) x; {( S) J" r" Q
        delay();$ \6 \$ Y3 ]/ f+ t1 s' h
        P3=0xfb;# ?( j# T3 X- I
        P0=0xbf;
# X; j; V- X- a6 @1 |9 V        delay();* q2 l3 \: v  S$ T, ~3 {
        P3=0xff;
; m+ Z& f& `* b$ v4 M8 l; m& o+ Z* [7 z        if(!K3)/ [* i1 n$ K% S$ Y
        {  X2 z5 j( t) o- N1 I
                delay();
. u9 j9 d% Y5 L! A$ Q                if(!K3)
* `  _8 b3 s  J" _' K! t8 B                {6 [  R! V- F) k# w0 U# }$ u! @$ Q
                        TR0=0;# ]! j1 l, ]7 n& K, W1 q
                        h++;
4 Q# v) E7 |/ k  F- w) o' H                        if(h==24)
0 X- N. J# Q: L* F" U* A4 c# Y                        h=0;
2 x( Y; d4 E, X8 E$ b- v                }
, e! z% {6 p3 R' s, a. D4 }        }
, \# g3 w& ^9 Q& Q% S        if(!K4)
, M! O7 `' S( s0 M( f/ ~        {; ^9 {$ U/ }0 |$ y% u$ g0 u& Y
                TR0=0;' R- G5 H5 Y/ |8 t, i( Z% ]( D
                delay();0 n4 i- y; N4 w' z+ L
                if(!K4)
' c) c; P! {- ~9 p! h  G# M# X                {
, Z" Z. x. A4 @+ K4 N# c( ~                        h--;
" o' ^8 V8 Y/ u# B7 O                        if(h==0)+ s+ n0 k& l1 |! n: n  T" ~
                        h=23;
$ ~. _. t4 _( g% g                }
8 q3 Y- f0 u' B! s1 f. A  A        }
/ {& r$ y7 U3 w        TR0=1;
+ F, ~0 F9 L# T; K2 F5 `}, ]" f' S0 M( T8 x# s
5 b2 F( b; S7 q, i0 s
//=============主函数============//
) H5 [, r/ O3 v$ E7 cvoid main(void)
: z, G' Z0 c$ _{
/ f: G, _- Q& O* ]/ G  ?        TMOD=0x01;: w& ^# _: L0 P$ F" s
        EA=1;
, b5 C1 G: B2 }        ET0=1;
: x& {! T* J* n" H' i" C) r        TH0=(65536-46083)/256;                          //赋初值
& J+ z% I! x) o/ s$ p. e1 t9 z        TL0=(65536-46083)%256;       
+ [) n! ^- v* f$ r( H        TR0=1;3 U0 x7 g8 k1 @& y8 i* h# s$ L
        while(1)2 `/ M5 s2 ~* @, {
        {+ h, E% I/ b0 g' _6 V2 ~* ?
                displaysecond(second);& {7 o& l1 a4 ]
                delay();' }, ?- T# F( U: n/ G+ |
                displayminute(minute);
2 U7 M- P% A. [- f- X                delay();: u/ ^  Y  i8 t/ `8 L
                displayhour(hour);
' N: P+ F! M0 h/ H: n& @& b8 P                delay();; h4 d$ H* q; q9 ], Y
        }! @' g; G: L- x1 i5 F% M# q
}
+ e/ w, f9 {. [1 f% _. U//=======定时器中断子函数=================//6 V  o; {: L7 n2 k6 X. ?" |1 L
void inter0()interrupt 1
; c9 @# d# o3 X2 d7 o$ N6 M{
3 ]; u+ o/ ^5 L: @) B0 `7 N7 z        time++;' g/ J2 X  G5 d& r
        if(time==20)
, k3 _( l; y5 ]8 X3 h3 G) C        {
/ T( r7 G  R7 U! F                time=0;; t9 U( _* t5 V
                second++;
4 ^+ h( x1 \  w2 S; k! W        }3 J2 w- f- b6 D7 @$ a+ O" ]# U
        if(second==60). Z# I  O! l& x5 X: D
        {
3 F) l0 o. [' T  X: T4 _$ I9 }2 d                second =0;
3 i/ L4 k  [+ `) H) m1 q                minute++;
; ~3 R8 K/ P$ W$ R/ Q  N        }* V2 b% e! ~8 W' G  D5 F1 g
        if(minute==60)
5 G& Y, Q6 Q% f+ V+ u, T) F        {+ j, H  e7 X1 J5 J3 h3 @: G+ r
                minute=0;% y9 c3 W! m* _
                hour++;- E) P2 P; l7 Y5 e2 @/ s) d
        }- `4 A' n5 F  H* v# ^
        if(hour==24)
7 T( r$ _+ o0 W; x# S( N- @        {  H6 Y, E- q+ t3 Q
                hour=0;, ~& u7 B! F" j; r
        }5 P% T$ K8 c3 ?0 i
        TH0=(65536-46083)/256;                          //赋初值6 J  r0 A/ F; f; c  T' l
        TL0=(65536-46083)%256;        2 \9 S. U; G- z9 i/ w0 |* `
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

12

主题

418

帖子

3623

积分

EDA365版主(50)

Rank: 5

积分
3623
2#
发表于 2012-2-21 20:06 | 只看该作者
本帖最后由 ArthurGXH 于 2012-2-21 22:39 编辑
, X; a! @# ^4 {0 l9 @" S
- {0 H3 K7 ]" s兄弟,我来说说你的问题: ) v' O& l4 p8 I* G, N8 s, b/ Z
  displaysecond、displayminute、displayhour几个函数的参数请用指针吧。C语言的函数是传值的。比如:hour = 10;  displayhour(hour)  == displayhour(10)。是将当hour为10时,就将10传到displayhour函数。
3 ~. ^0 x) F6 j8 C  改成如下: 定义时:   displaysecond(unsigned char *pucData)
; A$ `. G9 K# p% u/ [% Z                     调用时这样:displaysecond(&second);2 j( A8 o; D2 N9 k: Z7 g
3 R& V  b% R8 F3 S# n6 T
  请好好学一下C语言吧。
. o; q" d0 n; O4 M0 D0 t# D# l) R3 U3 l( F6 v. ?
还有几个问题:( I- H% \" ]+ W* N0 g& F
  1. 定时器,请用自动重装载的工作模式。程序在每次中断赋值会有误差,会积累啊。$ P2 n  i4 l% R% i4 P
  2. 读按键的程序应该与显示的分开,不要写在显示里面。
5 }9 z) a2 S& ~  3. 按键的去抖动不充分。
* q# o- t& x4 T- z) `: P( r       4. 定义uchar 最好用typedef。" V1 b& ]' J5 p' z& h
        * N7 q8 Z8 ]5 Q% E2 A5 v$ o

  w; r  d; O& U7 d( V  R8 X( Y4 j, c% d$ A! n! Z( j3 }

# _$ L8 E. G1 p4 I, I3 {+ K8 |% I& P/ S# W% L3 k

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-11-10 01:15 , Processed in 0.064065 second(s), 38 queries , Gzip On.

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

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

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