找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

2

主题

10

帖子

163

积分

二级会员(20)

Rank: 2Rank: 2

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

EDA365欢迎您!

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

x
以下是我写的定时器电子钟程序,按键功能不起作用,哪位帮忙看一下。5 F# m9 ~* X: W7 B' E
/***************************************************************************
! l/ ~9 Z: U- B  _名称:用定时器定时做时钟
. W% _. K) q, W3 y9 k1 r  i内容,自动从00-00-00开始,有按键功能
9 f9 d2 j) y" I7 M9 N, w芯片型号:STC89C52RC
. r1 X) `9 f. E功能脚说明: P0为段选脚,P3为位选脚,所有引脚低电平有效.
5 z0 s/ K- i7 d. k. h程序员:玄溪
' x" M. [2 ?. V' y( i日期:2012.2.64 t; \0 D5 C6 Q/ k% P0 E3 w
/***************************************************************************/" y% b2 f% |1 ^4 Z0 a+ E  ?
#include <reg52.h>
4 k& u  j% [- A# ^' Q) q#define uchar unsigned char # {+ @# \3 O4 t. I9 V: i
#define uint  unsigned int
: b9 x- Q! Y% K% t6 x9 w, w0 Y6 W" R0 Y7 k
uchar code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};0 h1 z; ]1 J; X+ w% J. ?
sbit K1=P1^0;                          //分+* }/ o5 c( N' t0 H
sbit K2=P1^1;                          //分-4 ?2 k0 Q. K2 T
sbit K3=P1^2;                          //时+
! M  W. \5 U6 x$ p" H. c8 Esbit K4=P1^3;                          //时-
( r6 K% h4 J* L5 y$ p% N5 e7 s1 ], P$ m) d: Q5 z
uchar time;                                   //定义中断时间次数6 C" {3 d" U8 J; G$ D1 Z
uchar second;                           //定义秒
- z& k  d" l* Zuchar minute;                           //定义分
2 _/ G: C# T, J, n1 {; Y$ T$ Ruchar hour;                                   //定义时! g9 Q* j4 k* k* E+ m' Z) i# O
//===========延时函数============//
* W' O$ R1 H9 }* f9 Nvoid delay()
3 Q2 _2 R- t2 O+ ^4 e2 J{
7 n: l; P6 K6 w6 {, \, c3 \0 u# P/ j        uchar j;  t; J. b; A8 v) o
                for(j=0;j<200;j++);
# j: |2 r  O8 `' d6 {}
9 U8 M+ y  h3 J" M//=========显示秒函数=======//
2 m. D: I/ c, q- nvoid displaysecond(uchar s)                         //带返回值
0 E% |, @( a; ^# L) z6 Z  i" {{" ]1 X8 u' I5 a% t
        P3=0xbf;4 R  T9 ^* l4 {" U- E
        P0=du[s/10];
, B$ l7 j8 o" y+ P8 F9 z8 s: U4 y        delay();
, [& C6 Q+ ]! w+ L- H        P3=0x7f;( y* P! z0 e+ P* T# W
        P0=du[s%10];
; K2 {7 h  C7 ~( I! a: k7 a" G( ^" ]        delay();
  y/ `7 f8 `; N3 C3 V        P3=0xff;
  ]: h7 w- v) j& n        if(K2==0)
" U9 h4 k" O, r5 W1 y9 X        {* ?- y, ~( S( h1 \$ P' K$ g
                s++;& q0 Z# p, d; T% ]% k, W& t4 ?( ~
                if(s==60)( \5 h  O- u. Z, q1 A; }* W$ z
                {) u% E/ z4 @8 Y$ b) b! ?
                        s=0;
3 c5 A6 S+ @  Q2 T5 p0 ~3 e5 f                }9 o; a9 k( H; k# E1 r
        }0 l' z+ V( B& J- S# t1 `8 [4 Q8 \
}
, H3 S5 h5 K# i0 l( s//========显示分函数=============//  y  V3 }: Q6 r  O. m) u: V- o
void displayminute(uchar m)" {7 \* t- u  j2 l! k+ A/ f
{
3 |1 O. Q8 S; j: `        P3=0xf7;
, b7 Z- L1 r* G) F5 M: Q        P0=du[m/10];
; L% A" G: j, _8 M. A8 T8 q- S        delay();7 f- o  l) I9 m' w* ^2 r
        P3=0xef;+ n1 R* q' o, t
        P0=du[m%10];
7 X  K2 D4 A, w+ `5 j        delay();1 I. A7 ^8 Z5 z2 E; D
        P3=0xdf;
. d, @  {$ y7 _) g* `        P0=0xbf;
$ T1 K! m4 x% V        delay();
3 v7 F* x9 n5 n6 E- x  L        P3=0xff;; X9 X: {6 B0 l) T7 @$ A+ _6 K
        if(!K1)
' j8 w& z! G4 L- g- P3 w# ^        {
; ^/ ]5 Y, d* I5 E& i3 `# \4 |1 U; F                delay();+ b+ }1 U, @8 \! Z% o; D. W
                if(!K1)* p) C0 d, M5 x, T4 P4 @. H
                {
: F0 E% L, l$ }% T# k" x4 r                        TR0=0;  w- r# V; Q4 X! R
                        m++;' |9 n7 c1 j0 W& m
                        if(m==60)
) `% [2 a3 k0 L) B5 [/ F: o3 h                        m=0;; |3 p! s' d7 y; Y; l
                }4 G  E1 k2 n$ C
        }5 Z8 a/ l, l  [) `. d- @& @0 \
        if(!K2)
4 N9 W. {& r! l8 h$ Y* Y        {
6 K/ ?1 J! T4 r( @                delay();) T- t* P) q. c2 C" A3 @0 C$ a
                if(!K2)# y. ]3 {' r; ^: {0 ?/ n
                {! z, L8 a8 Z6 k4 `, X) ~
                        TR0=0;
6 v. _2 V# v) Z1 ^! v                        m--;
3 J/ p( ^) C" w8 A+ r! t                        if(m==0)7 i8 A: L5 s8 v$ v9 |3 t
                        m=59;" [9 T$ j- M9 N# d
                }
$ X: o% \; O8 }9 e        }% r2 x$ [6 P( g: F' h7 Q+ _) I% B3 ?
        TR0=1;
! Y8 N# m) S3 {}
6 C6 c4 }- ~- y7 I' ?5 H: C//========显示时函数==============//
6 |* }' V, [& Rvoid displayhour(uchar h), o7 Q' c! M3 n1 s  ~4 m+ X
{- g2 k0 I0 p& t9 R  q
        P3=0xfe;
5 X' i% r7 S1 n3 d( G        P0=du[h/10];
$ u- M2 m' W0 }2 C. o# h        delay();
, ~8 ~' N1 r; E  q4 [        P3=0xfd;
% Y+ T* U2 c* \/ u' h        P0=du[h%10];/ C7 }4 x2 Y& z& m- {5 }6 p: L
        delay();
# u0 m4 c, \$ y; ^        P3=0xfb;
) b% T/ u; ]% m8 }        P0=0xbf;
8 O( V% ~% s4 X2 E# ^4 R! i2 i        delay();: e, Z% ], [+ i( L5 o0 K
        P3=0xff;# {1 a% ]1 e( Y( Q& _" R/ w3 z
        if(!K3)
! l( U# ~. E! C- V+ u9 g        {
! k6 N, D; i4 e                delay();# C. }, L! \5 O4 v
                if(!K3)
( b3 H4 V# t9 @  v                {4 d) ^9 F! g7 B8 f
                        TR0=0;# G. }- F0 T( x
                        h++;
- Q; N" p; T( @9 ^) p/ Q+ T                        if(h==24)
; L1 E" b' A6 {  E' Q0 I                        h=0;
6 b3 x1 h2 D$ x, p                }
! X+ N' B1 A' T( b        }
4 O  f) ~2 \6 X4 E* `4 w) _        if(!K4)0 \/ k  s, O6 x+ Z) C$ L
        {) ?4 ^7 Y- Q0 S, T
                TR0=0;, g8 s& K- I( u
                delay();
4 p& Y/ T1 a$ u                if(!K4)
: N4 ~0 b: h0 ~                {2 B. @$ g2 p" w, m5 j5 H% K- h, p
                        h--;
. O1 ~7 }8 r( Q  C                        if(h==0); |- }4 v/ W% ?! |
                        h=23;% D8 u7 m8 A! ~! W$ ^8 R# S; V
                }
# l/ }. P" I$ P        }
4 g% o' L6 M7 B. I' Q* N: _        TR0=1;" ^( S, K. q5 e9 {
}4 }% o2 I9 W" A: w0 k! d6 |

6 a" w# d* j' b0 d, {9 U//=============主函数============//" e4 \/ ]* W0 l5 B
void main(void)8 m; c# X+ @% U5 K0 c; D( ~
{' @7 ^/ s5 P" u; i1 d# k" H
        TMOD=0x01;7 U+ E' {3 t8 O+ e7 ?
        EA=1;
0 }: l/ p/ {2 I. d9 ]& n6 h        ET0=1;) m2 j+ q+ I( }
        TH0=(65536-46083)/256;                          //赋初值0 D6 }8 g5 r# T3 X, N8 L6 N$ d% i
        TL0=(65536-46083)%256;       
$ o: y/ O( G" i        TR0=1;, J6 M0 c3 ^' v: }
        while(1)8 Y, y( W+ ~1 U1 Y" C
        {
$ F7 d* i7 t; {* I9 t0 C                displaysecond(second);
) w4 B1 P" D: [/ X* O                delay();
" j$ \8 t4 Q) q! V- F- T2 u% P                displayminute(minute);
- m3 B* {2 i: @( D4 J                delay();
& N% [9 I2 f% v' K* t( ]* k                displayhour(hour);
6 m1 a& T- s0 ]; U$ Q* k. a. j                delay();
2 ]) l4 M" B  P. ~3 z        }4 Q. ^% z0 r5 \6 g
}8 N* W6 a. i1 H
//=======定时器中断子函数=================//5 \$ [  b7 b0 [; Z2 W
void inter0()interrupt 1! |. E4 a+ {- c' }% v( B2 s( {
{
- m" N' A4 w& G, a, l& j  W        time++;) s( J% ^2 b8 _, b) f( |7 a8 C
        if(time==20)
, e3 v; |! _. I. D        {$ Z6 Q& a5 h' S9 w. a
                time=0;$ k2 v# W7 C9 B+ G. O
                second++;1 D5 F6 P( f& `% A3 C" N* @0 F
        }
4 n9 z4 f  C2 w1 [2 }        if(second==60), `9 G7 ?. W9 s/ D' {
        {6 d, q' n! |8 L, W4 z5 u
                second =0;
7 p/ b% B% i' L/ D: Y                minute++;& R4 a6 K" q& [( F
        }
7 K' P3 }% C3 ?  [        if(minute==60)0 j  a% l1 \" u; d2 ]9 L
        {
- c% o4 k- [% E' ~! ~                minute=0;! w* n- D& V2 I  M% w) c7 e5 V$ f
                hour++;& d- R2 y4 w( W. u
        }+ u  j0 U8 U7 Y( Q7 z
        if(hour==24)
" B/ |  t. S+ [        {/ T  w8 }) s! \' n% O  r
                hour=0;
4 k. ?. ?' F5 B* i8 N$ j3 d        }
- T) [5 N2 S! |* }6 o        TH0=(65536-46083)/256;                          //赋初值/ S) s/ Z) Y6 C- k/ y8 w/ r' \
        TL0=(65536-46083)%256;       
# l& m. ?7 z% l}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

12

主题

418

帖子

3623

积分

EDA365版主(50)

Rank: 5

积分
3623
2#
发表于 2012-2-21 20:06 | 只看该作者
本帖最后由 ArthurGXH 于 2012-2-21 22:39 编辑
% f& N+ F0 p2 b- _% q' b7 ?# l7 _3 k# u
兄弟,我来说说你的问题: " ~0 I/ X; m7 l+ Z- {$ Z( j
  displaysecond、displayminute、displayhour几个函数的参数请用指针吧。C语言的函数是传值的。比如:hour = 10;  displayhour(hour)  == displayhour(10)。是将当hour为10时,就将10传到displayhour函数。+ b* T4 K+ s+ J* [
  改成如下: 定义时:   displaysecond(unsigned char *pucData)+ ^/ L& r' S! E6 g
                     调用时这样:displaysecond(&second);
/ k8 z" M7 u" ~; @/ k. z7 c9 H1 x% k1 o; T8 ]
  请好好学一下C语言吧。
8 G8 N- H* H9 \. T; R: v  N7 p- K, ~6 x
还有几个问题:/ e  Y  Z  }: k/ Q9 P5 C& F/ V9 v7 n
  1. 定时器,请用自动重装载的工作模式。程序在每次中断赋值会有误差,会积累啊。1 O9 H! Y/ P/ B: m* u! b
  2. 读按键的程序应该与显示的分开,不要写在显示里面。
. x" h! I! Q$ ^: u  3. 按键的去抖动不充分。
$ z3 t/ \/ T7 F, M1 f       4. 定义uchar 最好用typedef。
. \* I/ Z* F$ F* L  v: U        
6 f2 i6 [. t1 ?$ U- F9 [( j$ c% }$ J3 w) J: L" B

# C2 ^3 o5 i" o9 @5 G1 G6 R; r9 p1 f, c! W8 Z* R+ |

; {  H- Y! q$ t! \( x- d9 b

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-20 00:48 , Processed in 0.072605 second(s), 36 queries , Gzip On.

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

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

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