找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

2

主题

10

帖子

163

积分

二级会员(20)

Rank: 2Rank: 2

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

EDA365欢迎您!

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

x
以下是我写的定时器电子钟程序,按键功能不起作用,哪位帮忙看一下。$ f4 w) g: \" S! F+ i5 b
/***************************************************************************3 z9 b) A$ K$ `6 j% i% n
名称:用定时器定时做时钟: X* U0 Z# M7 m4 C% a2 L( t
内容,自动从00-00-00开始,有按键功能" W  p, I6 K  F$ q* v" J
芯片型号:STC89C52RC- L/ |; D: C: f( U
功能脚说明: P0为段选脚,P3为位选脚,所有引脚低电平有效.# `0 g* i  y0 T: B2 Z( l4 x' g
程序员:玄溪
+ s! C1 ^0 d  `9 X" Q1 y, B0 E日期:2012.2.6
- _. z( Z- K3 v9 J0 o! |) I9 i/***************************************************************************/5 h* l" S' g9 [# i* u2 `3 f
#include <reg52.h>+ }+ ^+ w, L, ?' b( I$ {5 L
#define uchar unsigned char
/ \' z. y- x3 W. C#define uint  unsigned int
( }9 U) L6 C  x( X$ {- k- b6 z. n# V& y* U- P
uchar code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};9 J! K% L4 ]( e9 S$ B6 l% w* E# `; B5 o; D
sbit K1=P1^0;                          //分+
4 b! T- b, Q$ u, Y" Qsbit K2=P1^1;                          //分-% _* u9 G7 t. d/ O, _+ N3 u3 R
sbit K3=P1^2;                          //时+! u/ w! ]. w0 X+ m& L# Z+ b
sbit K4=P1^3;                          //时-
* }# d, D% E$ W
. g8 }" _5 L  o  Juchar time;                                   //定义中断时间次数9 n, k5 Z! y' B& w; c4 |/ `$ L' Z
uchar second;                           //定义秒
# W6 u9 k1 [: B1 n: z% |! Fuchar minute;                           //定义分
( p' k" k. {. u9 Juchar hour;                                   //定义时
7 A0 L6 C; I0 i' f1 e" f& P//===========延时函数============//1 R8 m5 s( I" j% f
void delay()
  L0 o$ T4 z( H9 c. g% J{! p& J! Z# Q, ]: |. T
        uchar j;6 r8 A; _9 F. c7 B5 P# l2 V# M
                for(j=0;j<200;j++);
2 x& M9 C1 H) o}
( a4 s# m* ~( u/ c- _1 C//=========显示秒函数=======//
, A% M7 G- ]4 g* E% tvoid displaysecond(uchar s)                         //带返回值( m2 L9 T# }0 H
{
! p, \3 u4 [2 Y  i& }; Q        P3=0xbf;
; [3 V( G5 V# Z4 o/ n# J  t+ z        P0=du[s/10];
9 Q" S" [& Y: U& P& P        delay();4 F( d/ Q" f2 e- T& |( s
        P3=0x7f;
3 i  u5 c( s& P! _% }( }& {0 Q  b        P0=du[s%10];
! f  u9 q4 e3 E; x2 ]9 T: m+ V% Y        delay();" J. {" `3 o! c6 [
        P3=0xff;
  o2 L; g( }' ]8 W9 g, c/ r% _3 G        if(K2==0)! S/ |( |/ y" d, s9 \* W0 H
        {/ \4 V1 d* e2 g; N/ q- A
                s++;9 q$ ~/ a$ J! @8 F; O$ ~
                if(s==60)
  Z2 c; j% N' I9 F( G- E7 f                {
" Y2 {6 g0 @9 I                        s=0;
, U& z6 `4 W  Y6 g( `                }
/ N3 }- B/ P3 {# n        }8 p; b& S3 \( Q6 H: r
}
0 q" m: K8 H4 j; V) s//========显示分函数=============//
3 Y( E) ~7 p  g& N9 `) Gvoid displayminute(uchar m)1 N; t5 U: @$ T
{
3 t- L$ c0 e+ S; f( A! D        P3=0xf7;6 |* g  p& q  l" \$ C+ N
        P0=du[m/10];
( |1 [0 J- {  z. {& r8 `" ]        delay();
6 z7 W/ P  u; [" h! }        P3=0xef;
( V4 j1 L8 A2 Y! n9 Z        P0=du[m%10];
- t/ r6 C" a; u, x" s        delay();' R- m( }: {6 j
        P3=0xdf;3 t0 |  g0 G6 h6 e
        P0=0xbf;
8 C5 A/ y9 ]3 V' s; l* j        delay();9 I/ b7 K  P9 j1 d, G9 `+ g
        P3=0xff;3 y: r3 k6 ~+ i: z1 d6 P- c# Q
        if(!K1)2 i% H. ?! y( r* v2 `8 E
        {
& r9 k6 B' R/ g  R& q; y                delay();  {" ?3 i4 N1 b1 c9 U- b' x& r
                if(!K1)
' O. y1 M9 A9 R& J                {
5 ~; b8 |- Q* q% Q; {% g                        TR0=0;
7 Z5 S9 f$ q1 I/ J                        m++;2 s5 |7 S: T9 b% R. t
                        if(m==60)2 U2 D% c6 H9 o" Z6 H3 _
                        m=0;/ t$ v- e0 Q1 v# n0 ]  h: E. [
                }0 [4 j7 u! y8 c* n( c" q
        }
& e( d, ^. k1 z* l% l        if(!K2)
: N1 e) J" s9 h        {( V) F* \. |1 L. i9 ^% t
                delay();
0 x  b' |9 c/ ]                if(!K2)/ e; q- y0 _8 ?. g0 J- N" u' s5 S
                {% J* S7 j2 M8 n8 |8 A
                        TR0=0;6 X9 L' G  A7 z+ F
                        m--;
6 d; }0 o% s# m0 D; s' H                        if(m==0)
3 e' O* _  V/ \  ~. X: M! @! s                        m=59;
/ S" N0 v8 T1 T+ m9 K$ B/ K                }4 p3 P( _5 }" ~) h* E$ ^2 x" O
        }
  ^. M% }2 a7 f- W8 S/ B        TR0=1;
% y- f) s9 L& c6 j2 U6 H; G" I) Z}
: x' j# I  c, T0 O//========显示时函数==============//
; A5 T9 t% L1 q1 Ivoid displayhour(uchar h). y, P7 D! [1 m3 H: M8 w
{3 V! u( G4 Y  N2 y0 g
        P3=0xfe;; V' C; m5 L$ A- O, E6 G  v
        P0=du[h/10];" H/ z& {& G5 M. k6 Z7 g
        delay();& h* ~3 t) V9 J$ c. U- ~3 h  d- K
        P3=0xfd;
( R7 V. a+ T: O: i        P0=du[h%10];
3 U; e7 K; \6 ?, u' T        delay();
! X4 W" j3 X: [4 U7 ~) D8 S        P3=0xfb;
3 `  w; s& j" W$ o! K: x0 M        P0=0xbf;
2 i1 g; b) F5 H2 f- V' z        delay();7 S1 k8 d. q# s# ^" ?* R* R5 J
        P3=0xff;: J0 a% b  V; O. m
        if(!K3)! {! G' X6 a/ `: M$ x. s) ^
        {
: E9 [" ?5 A* L& \* h, w7 n* `                delay();
# w* F. ^) B( v# u7 d4 I" ~; o3 w                if(!K3)
% j/ i6 _6 W3 X* I2 a                {
  E1 H, c$ u' w7 e3 h                        TR0=0;
; d& Y6 \8 e" {, n                        h++;. V, i0 M# w% L' q  ^
                        if(h==24)
- R! t0 S: {* Z9 B; X" Z4 G                        h=0;
* e" _- j4 a( e8 g                }
# L% u2 Z, A6 m) R        }
; V1 q: _  o6 `- k5 w5 |        if(!K4)
/ V( o& J4 x$ R$ d! N/ k  E        {* i: r  l; ?# E3 V2 d  ]
                TR0=0;$ m6 [4 f) I7 Q; R/ Z
                delay();
9 D! A3 P) a2 N" `                if(!K4)3 e) J( n: U* K( R- |
                {
0 b8 k  e$ `* q/ E! g0 n                        h--;
/ ~" J3 p2 N, g* o: T                        if(h==0)4 X/ V) S( m/ u( h, q; g- o
                        h=23;/ i; k* A) h* t  w1 I; T
                }8 l/ P9 @2 m2 @/ }0 v
        }9 ^+ z5 }, C* ]% ]. d
        TR0=1;
  b8 S/ f' \- T, q  p}
* x& k6 G) g' m) S8 h. i5 Z% y2 }  t; c" s- A+ H
//=============主函数============//
: l$ `0 A0 v. ?void main(void)
0 H' w) F4 |9 k+ E6 S- j3 I) O" }3 k{: `" g& R: ~9 i
        TMOD=0x01;
4 ~0 J- J: W- j8 V7 g0 w) F/ U        EA=1;) R7 _8 {7 }. i/ U, \3 [1 ?; I
        ET0=1;- c; A" r& C* Q* y* h7 E, \' J
        TH0=(65536-46083)/256;                          //赋初值
5 C" z9 W/ Z% G        TL0=(65536-46083)%256;       
0 Y2 J2 R8 c( R/ j/ U        TR0=1;7 k+ @# v0 }+ S: J/ O
        while(1)/ o% ]" L, b& [4 {3 N; x9 s
        {& v' z8 H  n  f) @. @8 l
                displaysecond(second);1 S% g( q+ f2 @7 N
                delay();+ x) T5 x# @7 t% x' t$ o/ h
                displayminute(minute);' ]1 f( d$ _9 ^  t
                delay();  N. D) z; P: R! ]( m3 x5 [
                displayhour(hour);
; J9 q  K% S$ y0 K                delay();' G2 t& A% }% x% y! j" R- v, t
        }8 t4 [8 G% W1 }  [: A
}
* t7 [& J5 s+ k5 W4 T5 s3 M//=======定时器中断子函数=================//6 j  ]3 g- l# B2 i& d
void inter0()interrupt 1, D1 ^: W$ U. F" l  ?
{
7 z2 Y1 b6 \& M, B0 j        time++;1 y" A( e5 j  I  J6 r! N) _5 Q
        if(time==20)
- `$ g% w+ g* L+ Q        {
5 }# ^. I! T# \. H                time=0;
1 C& `! z+ _3 B# z9 ~) r                second++;
& s6 M) u- p4 X        }
& G0 s/ ?, h" o% h  A        if(second==60)
+ R" v8 ]$ b0 s$ b  |: n        {
; R7 h0 g& q! C8 G. T                second =0;
. d" |  n6 [, o6 q3 _/ ^9 Z8 m                minute++;! m0 \- \7 z; c* T* J
        }
' m# o, ~8 ^! l7 ?- _        if(minute==60)# u+ m$ `6 W* F- W8 e2 w
        {
! k# z& z4 m( v9 x                minute=0;: ?) [! I* P( w' s1 \
                hour++;1 V+ j9 r$ G9 l4 Z2 d
        }
% w' d7 w6 {8 G" V+ _  l  g: P1 ~1 g/ X        if(hour==24)0 x; M" G& l" ]/ F
        {
5 a3 g9 r, S# F/ Y5 \                hour=0;
# B8 x5 c9 ~$ {5 p3 j+ @* F$ f  c        }" P& o9 s! ^) q( R5 b- u) {
        TH0=(65536-46083)/256;                          //赋初值* g4 r9 Z, P; y. e2 L0 q* a
        TL0=(65536-46083)%256;        3 b( C4 i) }2 t" {! y9 n6 q
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

12

主题

418

帖子

3623

积分

EDA365版主(50)

Rank: 5

积分
3623
2#
发表于 2012-2-21 20:06 | 只看该作者
本帖最后由 ArthurGXH 于 2012-2-21 22:39 编辑
+ w* ^2 k$ k( s% y" c! P3 b, h) ^
兄弟,我来说说你的问题: 
4 S; j9 t. Y/ ]6 o4 g" h: d* d% N  displaysecond、displayminute、displayhour几个函数的参数请用指针吧。C语言的函数是传值的。比如:hour = 10;  displayhour(hour)  == displayhour(10)。是将当hour为10时,就将10传到displayhour函数。" v; \: p  l* R$ M
  改成如下: 定义时:   displaysecond(unsigned char *pucData)- n" O/ n* S0 ]! f7 |2 P8 s) L
                     调用时这样:displaysecond(&second);6 {# |( o1 k0 Z
6 n- j4 `; J+ Y. d
  请好好学一下C语言吧。
1 P! k  c0 q9 }2 V0 b9 I! @. R6 [: Y, j# `. O; X3 q9 e6 ^
还有几个问题:
- F0 ~0 t' p: T# G  1. 定时器,请用自动重装载的工作模式。程序在每次中断赋值会有误差,会积累啊。
, ^" v& r' s3 j( \& g. i) L4 F* N3 {- z  2. 读按键的程序应该与显示的分开,不要写在显示里面。) C  x# X( j( l, b* j
  3. 按键的去抖动不充分。& H- ~2 L+ ]2 A- s0 d6 b# F
       4. 定义uchar 最好用typedef。
. P. d4 S3 l  b+ L5 A        1 Q, I" W+ l6 \& S& H
& M4 Z+ }8 X, ^% ?, x: w' ]* q

' ^) h( f% L  ?' a# ]; E1 j. b  v8 a+ u6 p) y

: D1 v1 }2 l% m/ J$ R; A9 {

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-19 07:13 , Processed in 0.059889 second(s), 36 queries , Gzip On.

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

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

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