找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

2

主题

10

帖子

163

积分

二级会员(20)

Rank: 2Rank: 2

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

EDA365欢迎您!

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

x
以下是我写的定时器电子钟程序,按键功能不起作用,哪位帮忙看一下。
; V) B4 q" R* ?  c/ Y' t/***************************************************************************! I$ W: z% W( f- b/ D  p
名称:用定时器定时做时钟
6 f8 ^/ @+ |" n1 `0 g% k内容,自动从00-00-00开始,有按键功能2 ^, m+ q$ Y0 d7 O1 M
芯片型号:STC89C52RC& e* W7 i  L7 S9 b+ ~# _
功能脚说明: P0为段选脚,P3为位选脚,所有引脚低电平有效.* L. c/ i9 ^3 I+ K( B3 m
程序员:玄溪
0 d" y8 x; U- b; ?8 e日期:2012.2.6
4 j, P4 k! X  i5 d/***************************************************************************/
5 |( z7 f1 S4 `9 x1 f: L#include <reg52.h>+ \2 P% H: z" Y$ x0 _' |; M
#define uchar unsigned char ) d; b+ X. o& r8 I- B
#define uint  unsigned int0 H+ @7 \( w: Q: O

+ `/ h7 W1 ]7 q, Q$ ]$ s/ K3 I! @uchar code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};6 p  }" `8 o5 ]' J3 g
sbit K1=P1^0;                          //分+7 l' |& I7 l: g6 ^; A9 G% f
sbit K2=P1^1;                          //分-
$ S' U; Y5 I. l! fsbit K3=P1^2;                          //时+
5 a" p; Y+ a3 Xsbit K4=P1^3;                          //时-
, J9 E( z" g) _& S' T& ~+ l" a4 Q9 ?. e' ~
uchar time;                                   //定义中断时间次数0 }2 \/ C# _3 [+ f8 f2 w. \* W
uchar second;                           //定义秒8 i/ N; l: P; c8 b: k# i
uchar minute;                           //定义分" @5 G6 J/ E" n4 {  q. O
uchar hour;                                   //定义时8 l! d3 b1 a$ v- p5 ]" ^! A
//===========延时函数============//6 p% p+ s+ X; H
void delay()7 H! S8 T( y: K- @
{
: K5 R- x1 v' p# n3 \" K5 c& h        uchar j;1 q' ?0 F. ~7 m
                for(j=0;j<200;j++);
, c3 J1 \  B% n1 P. r. [  Y}3 \! F) R! |" I& [- N% Y9 `# ?
//=========显示秒函数=======//
: z1 ?; b5 I+ _) uvoid displaysecond(uchar s)                         //带返回值- ~- n# s3 Y3 C$ s0 O9 l; @
{# v8 N! M" O+ {- ~' _4 ~/ @5 b, s
        P3=0xbf;& N3 M5 d8 i! d0 P9 @9 I% Y
        P0=du[s/10];
* d$ m7 L) |/ t9 a8 a3 l- b- b        delay();$ B- e& y; G) {; Q: e' _& _* y
        P3=0x7f;, |. [0 @/ Z) H2 Z# S
        P0=du[s%10];, R+ r* |: l7 K5 ?$ {& U
        delay();, h! z/ H- o8 i/ g
        P3=0xff;
' j6 i% R9 Z3 O; s        if(K2==0)! k  h8 q: P9 R9 w! `6 y
        {% Z$ d+ f3 F% ~# i
                s++;
0 w$ s4 v7 ?0 h: t                if(s==60)0 U5 b, Q4 [5 |. k
                {
/ l) y9 u% e& i" q                        s=0;
1 ]1 Y6 ~# I2 M% ~, {' \                }
, Z4 ~* h5 X! l' x( s$ u) E        }
5 N# e( B) O: U) m" h0 ^}: P. b4 V* W$ f1 d5 }) [/ {
//========显示分函数=============/// z4 g  C& Z$ L' c9 w
void displayminute(uchar m)
2 U% y" w' |+ s8 \% s, a8 T{
9 g6 C% s, j5 r+ [        P3=0xf7;' U; W+ D1 X4 b) M/ {+ a! R* d
        P0=du[m/10];, [' v% ^" x9 [8 J
        delay();
6 U" l7 j% \; I  R$ C2 ^3 |) L        P3=0xef;1 ?( ]8 G% P/ R" Z0 s" `
        P0=du[m%10];* s4 h2 c- n; s4 G
        delay();
' `" M8 X( [* v        P3=0xdf;
, D% }1 \# w- {& s; T! s5 D        P0=0xbf;0 n1 |+ |4 E1 b) \  I! W0 l
        delay();8 k0 Z9 z: E& x" B
        P3=0xff;" k. c2 A. K+ U2 \
        if(!K1)
% q& U! c- F0 u        {
; W3 M- W9 q" y* `! @8 Q                delay();, ^. j2 p' y% m+ D9 X) R4 [: M
                if(!K1)/ x1 p# A. L( K$ y' f* p8 p; t
                {
3 y  S0 N3 o, q                        TR0=0;3 U( |3 c3 q+ x( M* u- p
                        m++;9 ~5 E6 q( H/ I7 a5 a% X8 B
                        if(m==60)
3 D# c/ \; E& d                        m=0;
* X8 ~. M* U6 s2 _                }
* r+ \, H5 K1 b0 Y4 M        }, ]$ Q8 s! B3 m- Y. t
        if(!K2)2 W" T4 f/ ^+ ~: Z8 }" H1 P" b
        {. u+ d* m  f$ B9 w
                delay();$ I* F0 b5 \$ v. b2 g7 V
                if(!K2)
6 U! |9 u3 J8 [+ A( D                {( k; N7 N9 f  l7 S" U- j- f
                        TR0=0;% `( ~; S: x. Z/ X" v
                        m--;
/ w0 F9 q4 `, ], R  B* s                        if(m==0)
/ H0 g; O4 X1 [* o                        m=59;
, Y1 z+ W; t6 Q& H' E7 k                }
% u1 P1 u4 S) P; ^- A        }0 E0 ~/ C5 h, v. M- J4 N
        TR0=1;
" Y, `! D6 F2 X( D}/ y! w  h% ^! N: h% r" Y# d1 m$ k
//========显示时函数==============//
9 y7 A6 I( Y2 _, Z( nvoid displayhour(uchar h)
, z+ p/ x* C( B* }3 m/ m{$ l! q& v3 U) E
        P3=0xfe;5 {  ]2 W, j& k0 H" C( g, s  z
        P0=du[h/10];
3 ~; l, P; U7 c3 t, b, l        delay();! W, [. J# a  r# t) {
        P3=0xfd;
4 q$ a* x; K, T, {; k        P0=du[h%10];
1 S9 _6 C+ v% s$ ]        delay();
) G* h4 B5 w5 V- B" e! @        P3=0xfb;  K  S+ I# R4 `, H1 h
        P0=0xbf;. @# X9 Q3 s! m5 p3 W, S  ~
        delay();+ f+ N/ i0 q+ t" k, C6 s8 E
        P3=0xff;
, i# y* T% E' d3 [        if(!K3)8 t2 n1 G) u0 H) U9 ?
        {& P+ m0 F* E' t! t2 `% r+ X9 @
                delay();, z9 \, v7 V0 J3 T9 }% W( I0 o
                if(!K3)
! a9 z- F4 P9 A2 P: n; l; v                {: N& y7 a! ]0 @% F( Z# ?
                        TR0=0;; z1 {: E, h4 M; a& U7 B
                        h++;
7 ^! M2 l" W4 e! X' ]! n. ~                        if(h==24)2 U, h- a! F7 ?# e
                        h=0;1 W: L) r3 w& }( V" z
                }5 N+ y/ w* }3 t* s" Y& }
        }
, e5 X+ p8 O3 _, e        if(!K4), e+ s. {% F, k! r7 ~* h2 `
        {
& d7 F8 ~  ^% k                TR0=0;
; n6 ?3 l- S5 C) K9 G: Q                delay();
% Z) t) i: g# a' M                if(!K4)% {: {* [2 M  B: |* s6 M
                {% P1 Y7 T) K, `' U8 F
                        h--;
0 u7 D6 |! D8 f& Q9 M                        if(h==0)1 V! m2 p: E" W1 J
                        h=23;
% Q& x6 y+ @! i7 B) \2 A- g                }
4 B9 W( ^  V  H# u' e        }
; e  |6 p7 c" {8 V        TR0=1;4 O# @% b( l9 X3 S+ a
}( I5 x% a! |; `9 P0 @

# ^  E6 C7 H  x8 @' {0 {( f+ m: s//=============主函数============//- @( N; E" d: b9 A
void main(void)
7 l3 p( `3 ~* R$ l1 n& J: ]{. k7 z- J3 k; @- v6 ^. }7 \4 A
        TMOD=0x01;
6 W; J' j9 l" ?' {: [        EA=1;! N/ |& i. s4 u# ]- K% M
        ET0=1;% U, i' x! b: [# ^0 }; t8 c
        TH0=(65536-46083)/256;                          //赋初值
6 E+ [0 V; m1 F! h! u        TL0=(65536-46083)%256;        , |- U6 t; w, U+ @. h, O
        TR0=1;6 Y3 I; X. T8 T  c) |/ z. g8 x) G. K
        while(1)( X; T7 s4 T" |& K) ?
        {0 x2 l: ~6 ?4 X7 U2 ^8 `* z! I
                displaysecond(second);7 f+ q7 A8 _0 d. ~5 A$ w
                delay();; R- F; b. u% p. N( q
                displayminute(minute);4 C* g; ]3 w  w6 f" `) L
                delay();  ?( f9 p# S, E& [( s. _3 p3 }
                displayhour(hour);
2 N8 W' c& s$ t2 r6 U0 ]                delay();
, x8 U; c* W6 ]5 i8 n        }. G' `' F( u. E. x/ q8 V! Y# h" r
}
4 j! n! U$ C* O- f//=======定时器中断子函数=================//
! N6 L7 E5 V5 A* k6 i+ [; Pvoid inter0()interrupt 1( s, A0 K6 k8 S" Y9 Y1 f* v
{2 W/ f" {  y+ }5 F" Z- v2 c: n
        time++;2 H3 I' F: G$ E, f
        if(time==20)3 H( C4 r. Y3 Z. ]
        {
! }2 a0 |  d# _  M; a                time=0;
! J+ }1 R4 p- T1 o+ y' m  }" Y% a                second++;
: z9 c% v% i4 L0 [2 x$ ~0 Z8 h        }
! t6 b0 X1 G2 V, q) m4 A3 R$ P% f        if(second==60)
3 b! {8 d( J7 m7 L9 q- b3 @        {
' m% t7 I% w0 P$ M7 x. n# L                second =0;
/ Y7 N; W+ h* C6 ^8 F0 C: W3 }  J                minute++;* P6 Q7 b2 c, Y- ^3 v' j
        }
$ q$ f& F( E; _$ U1 r        if(minute==60)
! a, T3 l) s' j! i" s- \        {! V* E2 q$ b' j2 T8 g
                minute=0;
# n8 f4 S8 B$ l% C                hour++;& s4 H. \( n% c
        }! a4 V& O) R8 [6 r* O
        if(hour==24)' S* b  j. A) a! _3 ?9 f  Y
        {) J0 o; H1 f! t# C' e. F+ [
                hour=0;) w$ H; I* t, I/ h
        }
- O* n1 H! b) d$ {9 H4 i' W+ A        TH0=(65536-46083)/256;                          //赋初值% B$ O- L1 d5 V7 q
        TL0=(65536-46083)%256;       
- p! E& [% t; o- L4 G}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

0

主题

7

帖子

203

积分

三级会员(30)

Rank: 3Rank: 3Rank: 3

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

评分

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

查看全部评分

27

主题

159

帖子

1146

积分

四级会员(40)

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

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

Text1.c

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

代码

27

主题

159

帖子

1146

积分

四级会员(40)

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

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

2

主题

10

帖子

163

积分

二级会员(20)

Rank: 2Rank: 2

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

12

主题

418

帖子

3623

积分

EDA365版主(50)

Rank: 5

积分
3623
2#
发表于 2012-2-21 20:06 | 只看该作者
本帖最后由 ArthurGXH 于 2012-2-21 22:39 编辑
- u9 C& s  D2 g, i  z- X) g2 p+ c% U% T0 E6 d
兄弟,我来说说你的问题: 1 \" k  A! B( Q
  displaysecond、displayminute、displayhour几个函数的参数请用指针吧。C语言的函数是传值的。比如:hour = 10;  displayhour(hour)  == displayhour(10)。是将当hour为10时,就将10传到displayhour函数。
! E5 G) `1 ?7 j  改成如下: 定义时:   displaysecond(unsigned char *pucData)
4 a( @8 K" R' D                     调用时这样:displaysecond(&second);
0 i+ ~$ V7 D3 o( E& G6 W5 |1 }
% m0 J, ~, e  ?9 f  s2 A+ n  请好好学一下C语言吧。
$ t: _+ N6 j" ^2 v
9 \) [9 Z1 I* e# r' g. y- w: n还有几个问题:4 N. k0 M. f" L1 Y# W6 k8 R
  1. 定时器,请用自动重装载的工作模式。程序在每次中断赋值会有误差,会积累啊。
, o( N+ w: m8 H/ t4 a1 D+ Y  2. 读按键的程序应该与显示的分开,不要写在显示里面。6 B; t0 r) `, q' U1 z! A9 _8 |
  3. 按键的去抖动不充分。
1 b! F1 M& C) ~" W& D- w       4. 定义uchar 最好用typedef。/ y& {0 L. h) z5 l1 v9 G
        
% I2 c% H+ p) ?" c3 z& ]5 @% B+ X" p3 _1 P" O- [
" G7 ~% c: _- l; R0 K6 `3 }4 C' Y

) |& s, ?/ z/ H/ E" O, }
+ R* [2 F# }6 m& K  Q4 {* C
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2024-11-28 08:59 , Processed in 0.070712 second(s), 39 queries , Gzip On.

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

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

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