找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

2

主题

10

帖子

163

积分

二级会员(20)

Rank: 2Rank: 2

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

EDA365欢迎您!

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

x
以下是我写的定时器电子钟程序,按键功能不起作用,哪位帮忙看一下。
: r; B- ^' H+ D, |/***************************************************************************
- B8 ]% b' H; ?( y名称:用定时器定时做时钟
& R  Q. Q/ t. J1 Y内容,自动从00-00-00开始,有按键功能
5 I- _# T' J( l% k+ S芯片型号:STC89C52RC
% \$ x" I/ F0 H+ F$ J8 h: e( R功能脚说明: P0为段选脚,P3为位选脚,所有引脚低电平有效.
& Z( {' g4 z2 |程序员:玄溪& ]& e/ Y* B% H! M1 P( d
日期:2012.2.6
& V. x7 |( Q# d/***************************************************************************/
) v3 ~! c6 Y  |#include <reg52.h>5 j1 L( s; H* m+ r& }
#define uchar unsigned char
( Q9 Z! j" f% T# Y. k#define uint  unsigned int
, V' w: D/ f+ e8 y: C% F9 W/ E( i
uchar code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};9 _7 G3 [  b- i3 G. F
sbit K1=P1^0;                          //分+, a; V) F! z, j+ f/ @
sbit K2=P1^1;                          //分-/ [: c- o9 s$ A5 k& e0 A
sbit K3=P1^2;                          //时+1 c% ^* X9 K/ b
sbit K4=P1^3;                          //时-
/ W; X# Q: l3 ]& n" D) b" {
3 f- K! h" D! J, V' h! m$ V0 Nuchar time;                                   //定义中断时间次数: ^7 w$ q4 e' v. b
uchar second;                           //定义秒
# H0 {' E0 q4 _" f/ v! A, T1 Q9 u$ euchar minute;                           //定义分
8 q# t5 U7 c8 C' n8 @! [0 e- huchar hour;                                   //定义时& R$ t5 b  j) q- f
//===========延时函数============//) D7 x' I, m# u0 a7 p' n% b
void delay()
* |8 ~7 ^! b2 p( M{
: u8 q" @; q/ K0 o        uchar j;. v7 G# u! Y' `" a
                for(j=0;j<200;j++);1 p9 U1 {8 j- v- R& q
}$ Z0 m, d# \3 M! ?
//=========显示秒函数=======//, _* n; O) `- O! g
void displaysecond(uchar s)                         //带返回值( \; |1 I  Z+ `8 \5 ~7 F/ x$ W) V
{% |& O4 p( I$ `6 o, S
        P3=0xbf;! [8 X; Q) X7 z6 B& C8 A  `
        P0=du[s/10];, t+ ~' S: R0 Q* Q3 @
        delay();
, K6 ]3 J/ N! h+ v& h$ b% x        P3=0x7f;
, {2 i, p0 J0 K        P0=du[s%10];
+ y. c$ y  J5 p, O3 R        delay();
' \0 S! G$ W$ a; Z% P" g: |. `        P3=0xff;' m! `3 J) z$ `5 {3 N4 J' p' t( H' |
        if(K2==0): Q8 c# A+ e0 d. j, r
        {# s! _) b) M: x/ c8 }9 q7 ?
                s++;, K) q& r. j6 x% C% a
                if(s==60)& K2 ?8 q. p! W6 k' t
                {4 v2 U4 `* e$ g; j$ o
                        s=0;' U- h" @# p  y
                }9 P, q8 x8 C) L, H5 x
        }
( ?: L& m) w% ?}
; @1 ]' b  h6 b& y! i//========显示分函数=============//: o# b8 ]" O; _) q/ H% S
void displayminute(uchar m)7 {" Q$ p+ }6 c4 ~- }+ d' F) l% v( K0 t+ [
{8 p2 N4 U0 |# O6 j/ L# D
        P3=0xf7;
" r7 U( v! `: `! [- T  v        P0=du[m/10];
4 F0 @. U  B+ s& g        delay();
* |6 w( |8 }4 j% T        P3=0xef;
) A% r* q; H9 V5 ^& G3 h        P0=du[m%10];
5 d! N- h' ^: h$ `9 ~/ Y7 G7 N        delay();9 o6 a6 O: y& L/ S1 C1 G- K9 ?/ I* z
        P3=0xdf;
- J. R( n: ?5 l- b+ T5 p4 Q        P0=0xbf;' p8 _0 e8 I3 `; C) I2 n! D- [
        delay();9 c0 Y3 l- w: L5 D. `
        P3=0xff;* I5 x8 ^8 z  D+ w; |) \0 ]0 l
        if(!K1): F. E( m* ?/ A0 {9 e/ I# o
        {* c; X6 f  ]0 I6 w( U; S7 ?5 I6 ^6 K
                delay();6 s/ F1 ~% {  t0 |
                if(!K1)8 ?. `5 V! ?3 h1 D: |! k
                {1 j" ^2 b3 {( C" k' c9 L
                        TR0=0;$ ?& u0 u! R# [
                        m++;" y5 i3 |+ E0 f. M4 ?
                        if(m==60)
% S$ \. I! V, D. l; \! d                        m=0;: G- U2 z8 I$ L+ L- u1 ]
                }
+ t* G3 u- b  U8 k1 J: K- ^        }
6 N3 ~  g& b3 p& k0 y        if(!K2)
# a0 e$ F$ z% H, B% |7 {        {
% G) R# ]9 j) A) @2 ~! C                delay();! W1 |: D1 z) J: ~% ~
                if(!K2)# |& J4 I2 R) J
                {! w8 n0 n& H; h6 v( G1 k# ~
                        TR0=0;( m, f7 A0 Z: g
                        m--;
$ F" d" Q- n/ ~  m  S                        if(m==0)
. a1 a. }4 @2 {/ [6 Y, M- `                        m=59;' U0 E1 Q: M- T* c
                }8 m( q4 {4 J% h- w) W# E
        }' g# X' M) d. y! d* H
        TR0=1;
% ]; J6 T  i8 [( ^( E1 |}( X' i5 n, R9 J7 A9 R) ?7 e
//========显示时函数==============//0 V* e9 L- A9 l4 ?1 z
void displayhour(uchar h)9 l  _% V# m, ?
{
. \& _; [0 M# S# k- a4 h4 F  z- Y6 {        P3=0xfe;
& I  F5 D( V, u5 _        P0=du[h/10];
: R# P; a& [; \' @        delay();
. I, m6 X2 X: Q1 Z0 [' k        P3=0xfd;/ }3 z8 x7 ]1 n6 ?  w( e# f
        P0=du[h%10];
# \9 f% c# ?- N, [        delay();! A- i0 `( K  o* S) C
        P3=0xfb;( d3 U$ o9 H' i1 R
        P0=0xbf;) s. C! s% S# o" k6 G
        delay();
% u8 p, n( o% E  [3 y! Y6 ?        P3=0xff;
; L, G2 \6 |5 z; C8 S- f, U2 B        if(!K3)5 U) e% Q8 F3 |" f
        {
: E# {5 L( E: u                delay();% _  d* p7 v8 ]1 [
                if(!K3), b- I4 q, Y: t0 {# b# h) _( ^
                {+ s; [, f0 L' C% O9 M
                        TR0=0;0 X+ V* f2 g" v- d7 A
                        h++;
' Y& U/ z# g$ y; s6 P$ L' I  P                        if(h==24)
3 P" T; ?4 ]+ j- @8 ^- S. V1 V                        h=0;+ F5 O+ _& P0 j3 }
                }
3 {9 G, ?  S  C" @* P3 F6 J        }: i: W0 c' A1 `  K5 n$ Z
        if(!K4)6 c# M, K, S1 h3 Q
        {
9 r7 ]! p& m0 _                TR0=0;
0 U6 t0 H) O! t1 E                delay();0 b5 ?! [& w% B( y* [
                if(!K4)
3 V& B$ \8 l$ F4 l                {
/ ^/ Q: {4 s' P: P                        h--;
$ e2 I- M- l4 t, B! n1 J                        if(h==0)5 X3 B" g: n" I7 F& d# `+ g
                        h=23;
$ ^; D* C( b: G0 @0 e6 b; Q                }! A! P; w: o/ U; U, \0 n* a3 e$ W
        }
" F, i% T- S, T( I( _        TR0=1;7 ]) p" {/ V) L$ D( G8 d9 h2 r
}
6 A6 [6 n1 m! d/ G: L, R( D& k4 l$ q& X6 }2 J5 ^
//=============主函数============//: ]; v8 O9 g2 }6 v
void main(void)
3 U/ J, x, K2 R5 C5 Q3 C{" }4 H2 W5 g. j: e! S3 I, F
        TMOD=0x01;5 E$ @2 {. Z2 D; N3 K
        EA=1;
+ Q* g! R" |1 L$ i8 m        ET0=1;: {$ K/ i9 o. r7 e
        TH0=(65536-46083)/256;                          //赋初值
5 S7 G$ A1 M/ V0 @: U        TL0=(65536-46083)%256;       
$ C9 v9 {0 e+ z. Q  ^        TR0=1;6 \3 D3 P2 g2 O( t
        while(1)" H: N3 ]: V& p& m* y1 q
        {
: c  y& g0 ]: T$ X' \" p( o8 [                displaysecond(second);3 v" \: o- \) e. v# A9 m
                delay();0 r! k2 q# O* S$ J9 J' n
                displayminute(minute);
& {+ w4 F, E# l, E0 F% U                delay();% |( G. ~6 k, u" F- [
                displayhour(hour);
1 }& G4 U3 u& E' {, l0 m- m6 I$ W                delay();! v  i  }- H" M; r
        }
$ S' J5 p* Y/ n# D8 ^7 c  h7 ~}$ |0 R/ J" z4 ^  c0 C; p0 U
//=======定时器中断子函数=================//
. \: B# }& Q7 |/ [. Y3 J2 svoid inter0()interrupt 19 o1 O$ K9 ^  i
{; q8 O4 i% C- W- P/ ?' }
        time++;2 Q( b2 r/ F5 [
        if(time==20)! s4 J& M2 p& W' E5 |. l" T7 Q
        {; f6 b) B' m1 ]' ]+ v0 Z3 j# D
                time=0;; `. a! z0 v$ j* P1 G
                second++;5 |  W' Q% l& r" h
        }$ V0 R9 X) @) z$ @: O. [
        if(second==60)
; [, J! N) Y3 w1 L: H        {9 u$ _5 s6 A& ]! n% o7 j( C! X
                second =0;* M& S; E% H- z) ^4 X3 e6 H
                minute++;
, J6 H' {5 y, b# I6 ^  N        }" ?" T7 E' ?' l- o
        if(minute==60); ]/ {8 `5 C+ Q5 H
        {+ o. a+ X- m$ K' j
                minute=0;; i( w; B/ K8 S+ S* L
                hour++;
7 f) E% h$ _- H/ K8 R; g        }; M+ j- J, b0 x: U  F7 H7 @$ p
        if(hour==24)
$ U; z1 v5 ~  Y; b  N6 M; U        {1 g0 p2 `2 Q! y' Y: r
                hour=0;$ N* H0 ?" I: E$ p3 j1 X; _; e
        }' ^' i: Z3 Q0 d) C! A- u/ d% D! H* T3 f
        TH0=(65536-46083)/256;                          //赋初值  D1 m# U# I3 w, X/ p- N: K+ k
        TL0=(65536-46083)%256;       
! E4 d0 T7 s& N8 x1 z/ K: M9 H}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

12

主题

418

帖子

3623

积分

EDA365版主(50)

Rank: 5

积分
3623
2#
发表于 2012-2-21 20:06 | 只看该作者
本帖最后由 ArthurGXH 于 2012-2-21 22:39 编辑
3 V5 a# F, ?8 X' R+ e
$ c6 S( @9 _# {2 x3 I5 o$ N" ~' T* \/ O兄弟,我来说说你的问题: ) t5 H1 X, z- N9 g1 S; i/ S! x6 ~
  displaysecond、displayminute、displayhour几个函数的参数请用指针吧。C语言的函数是传值的。比如:hour = 10;  displayhour(hour)  == displayhour(10)。是将当hour为10时,就将10传到displayhour函数。
. W1 \! q: h! j5 T0 ]1 L: i* C  改成如下: 定义时:   displaysecond(unsigned char *pucData)
. s6 K+ I9 R% D) P5 G3 P  |                     调用时这样:displaysecond(&second);* n& r7 q( U0 u' m% J" u: S9 A
) r# _$ g! Z+ s! N
  请好好学一下C语言吧。
$ X; ]5 e3 r0 O' [, H, u1 c. {! ~. d: _
# q9 v% ^+ e' |$ S! D( Y还有几个问题:0 E5 J3 w3 h6 r. v' M5 K
  1. 定时器,请用自动重装载的工作模式。程序在每次中断赋值会有误差,会积累啊。1 J7 t" }$ v% {  S
  2. 读按键的程序应该与显示的分开,不要写在显示里面。
/ M' K# w1 N1 f  3. 按键的去抖动不充分。& ^6 M0 ]4 G; U, ^* E" K
       4. 定义uchar 最好用typedef。" _+ h, |& T+ n/ x
        
% r) S. x9 c% b8 p& x  h
  A8 P/ f8 M3 l: n2 a: t; C% ]! z

! `* A  ?9 B4 d4 G  k" X( y
, L5 k8 d$ Z' ?  f1 w  C% e

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-7-1 05:38 , Processed in 0.064201 second(s), 36 queries , Gzip On.

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

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

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