找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

2

主题

10

帖子

163

积分

二级会员(20)

Rank: 2Rank: 2

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

EDA365欢迎您!

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

x
以下是我写的定时器电子钟程序,按键功能不起作用,哪位帮忙看一下。% d' ]; \, N/ B* z9 o
/***************************************************************************
3 R/ k, F7 h4 t  i& s4 Q: k名称:用定时器定时做时钟
9 `/ |0 m7 z+ H/ G1 }$ x1 J$ A内容,自动从00-00-00开始,有按键功能
: O! k4 G6 N- @6 a: l& {芯片型号:STC89C52RC1 f2 f+ g5 D# P% [, j, T; V
功能脚说明: P0为段选脚,P3为位选脚,所有引脚低电平有效.) y- L: J4 q- `9 O; i$ R9 M) ^  m: C
程序员:玄溪& U' H" ~+ ~9 r0 {0 a2 ~0 J" |
日期:2012.2.6( d2 i% B/ T% M5 B1 K9 `
/***************************************************************************/" n4 c8 ~) u; q
#include <reg52.h>
# H% U# Q$ {7 L/ m9 T#define uchar unsigned char * B9 G! e4 }* p; Y: b# R3 m
#define uint  unsigned int
+ x  T  Z: w7 r7 m* Q, b0 C. n
: F0 k, M6 Q) ]/ r, Zuchar code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};7 _4 R, |9 C& [1 K3 }
sbit K1=P1^0;                          //分+: ?! Y) r1 G1 L3 k: O
sbit K2=P1^1;                          //分-
0 N* w1 ?7 I" Z2 u3 Ysbit K3=P1^2;                          //时+& W% q8 F) X4 [6 s9 |2 K& A
sbit K4=P1^3;                          //时-' g6 d. {/ {* o1 i) X( \, J" ]
+ l. t$ Z- ]+ s2 {9 y
uchar time;                                   //定义中断时间次数
( D3 |1 n/ J' duchar second;                           //定义秒
: j5 ?5 l" Z; Y, Z/ J& _5 r, M1 ^. U' _uchar minute;                           //定义分& T$ H% S* w3 w; v) S- e5 a' h8 c
uchar hour;                                   //定义时
2 n; J; q1 _3 J+ t# n//===========延时函数============//
; u; ]* I+ G* y9 v. [void delay()
7 q( e* v& ^$ C8 q: \8 C$ y: o$ n{
4 j2 \  x4 s) d+ P. Q6 l# @        uchar j;5 K1 ]' U+ [; f& J9 Q2 W# k1 E
                for(j=0;j<200;j++);; |% v9 }% a9 h1 D0 [% F! m
}
9 h# P  w" a, {& p( P9 w//=========显示秒函数=======//
( j' l* l( E9 X5 z6 E" a! |, [void displaysecond(uchar s)                         //带返回值
/ T* D/ n+ I( J" a- V{, H* N: E' [) P; H
        P3=0xbf;. ~3 N$ U  w1 w* Z) W0 x0 G7 x2 f
        P0=du[s/10];5 w0 h: c, @6 V$ T  W2 f" B, J7 v% [
        delay();
, w7 j5 M  p$ K- }8 V, ~        P3=0x7f;
; M, z+ A3 A/ f* A$ ]3 j        P0=du[s%10];7 d0 j* w9 H6 B3 I- f0 G% a1 a" }
        delay();& i) h0 U  \6 C& Q2 P
        P3=0xff;$ X; }5 N* Z4 G% x8 b3 m2 v" H
        if(K2==0)3 `! |8 X( L' C/ s  x% W
        {
9 J0 _7 a; H% x/ O+ d                s++;% L3 M% E. [! C7 e4 b6 i+ _4 \. [! m
                if(s==60)
% \0 W, C  ?  w$ O  s/ Y, H                {7 m2 P8 s) K6 z9 V* x& p5 Y- n/ r# E
                        s=0;
: t# V' O6 U( G; v/ P4 l: w0 |                }
, ]! Q* m" z7 P5 V# d, W, G        }1 L' _; U" C( q, c1 H" m
}2 s, m5 u( Z& g
//========显示分函数=============//  i  y! O( d1 S. Q) r
void displayminute(uchar m)! H! I" v  m# M% \6 p4 l
{
1 g- R/ ?6 q( Y        P3=0xf7;
3 H+ a) L* }8 G" R* F! y8 X4 x( J        P0=du[m/10];
$ N1 B+ Q/ R: f; \0 T" r* ?- F/ F3 r) ^        delay();/ K% y9 ]' H, g9 I' g9 q
        P3=0xef;( m- a* D" m% t2 G. u+ n' D
        P0=du[m%10];$ Z: O, c1 @% d- S; t' b8 n
        delay();. U9 ~) _$ Q4 F4 T$ g1 Q, E
        P3=0xdf;" f# `# m7 ~  P( t2 ?# A
        P0=0xbf;
5 R) ]; N+ U1 W0 f7 o- R2 d        delay();
% s" S# q* p! o& ^, d        P3=0xff;
. l  b5 n7 v: z9 m( w+ q        if(!K1)
, r' D5 V0 U; Q/ \& f2 {  X9 X        {/ x) U6 d3 k* ?
                delay();
$ ?4 i  n+ N# u1 G7 Q3 u: \* v( x                if(!K1)
- O7 M5 k; ~+ [2 Q. |" L                {
* ?2 X. T1 ~2 P- p/ Z                        TR0=0;7 X1 t) u5 d' m$ h7 L/ q8 H5 @) R
                        m++;9 I- [6 E" B/ ?& y
                        if(m==60). i1 L! r- D. j( e" K9 u) n$ {
                        m=0;
; |" O3 n8 D, e- o* j' D' _                }! w# F- H! g5 G$ G* u, Y' _8 D# a
        }1 \) J7 o7 H' W8 F
        if(!K2)
& r/ v2 F0 a9 ~& |) z! j        {/ I* \* ~/ o1 {' ~* n
                delay();
- S1 S  C2 W7 g/ O& \                if(!K2)5 U/ H2 U% Q9 D; q( Z
                {" c  n1 T* S% o, U
                        TR0=0;( B: w8 ?; N1 |% W' g$ t
                        m--;, L0 X) o, @# X
                        if(m==0)5 P- Z; W4 n' h; T2 ]' v1 u
                        m=59;4 T/ U# R# K  `8 _! N% U0 L7 C
                }
& l. k2 p. H' B( v        }$ c' t$ X, c/ _$ Z# E8 X! f
        TR0=1;
% `7 ]9 T; s7 |# [$ X}4 O% A& I5 Z0 Q) t, @2 Y
//========显示时函数==============//
( Y( N$ L6 ?& @+ Y. Qvoid displayhour(uchar h)
; g: Z* d/ J. L/ s$ a3 `{
4 z+ U7 z' l4 }8 C- A3 M        P3=0xfe;4 N0 s% }8 q0 n. `, m+ A
        P0=du[h/10];
6 \; }3 Y$ y9 }+ l# j        delay();. `2 `) Z# `4 X) y
        P3=0xfd;
' t1 O7 |' }  A; g6 t        P0=du[h%10];9 q* U5 b3 x* [- o9 t% n1 r2 N# F
        delay();1 A7 D8 E  N7 ~; E- A2 k  y5 @
        P3=0xfb;0 `4 X2 E7 x  q% L
        P0=0xbf;0 y- O3 ~( a( U+ R. W: O
        delay();9 q; G; e5 `1 `8 E4 {
        P3=0xff;" B* d- R+ F1 d6 f
        if(!K3)7 n5 A. k3 Q% m: M$ r: W
        {6 y" D( I+ e+ x0 t' Q: G% l
                delay();
6 V! b/ G+ v. A! `2 i; |4 v                if(!K3)
* x! {! c6 E5 Q) O* k                {
# ?6 S% G' }) ]- n! \: ^                        TR0=0;
# @9 n* H: F- W: L                        h++;
6 Q# l. G$ k3 h. u                        if(h==24)
- c- Z  ?3 c3 g% S                        h=0;2 a0 p9 f; H  a! s+ T% D4 ~
                }: a4 W/ T3 P  Q" k# a# _
        }
, i; b4 M* }  z/ z+ V' k0 w5 W        if(!K4)3 i  j1 m; x) }' X0 `
        {
" h; g( K( Y* ~* @                TR0=0;
6 {, R* e1 _% b4 p9 I2 W" S                delay();
: z8 s- r3 G. b: [4 [# ]5 ]                if(!K4)
% A& o3 e! U: |8 x& |2 a                {0 q/ D& a  U/ y/ n% F6 {( g5 Q
                        h--;
' q5 I$ F  X) V4 U/ v% c! U                        if(h==0)
0 w( N4 U# z! }' F' w! S                        h=23;
" {% [4 Q0 e% k& v0 Z' V, {                }
/ e2 b" o2 q2 g% s3 g# y) U5 g! h        }$ K/ v0 t- L8 M
        TR0=1;/ q9 x0 }, d. @$ y' `5 q
}
4 h# a. Y0 T: c$ e* U" k0 P: i) p: A8 n6 `
//=============主函数============//  l' y# ?  g6 a+ t- i) Q6 f' N
void main(void)* f& P' V# V8 f3 z0 k; }
{
& M5 N4 S6 |6 c  X2 ^! q1 l6 [        TMOD=0x01;
6 R; F% A/ h+ {3 B4 Z        EA=1;: k9 z! n1 y& v& i+ b+ C
        ET0=1;
  [5 T$ P. z' c5 |7 F        TH0=(65536-46083)/256;                          //赋初值1 a9 x" \" O6 S3 Y
        TL0=(65536-46083)%256;        * I' ]  M/ c* u! y# s: x$ P8 O
        TR0=1;5 E. `+ W) C7 @- g- t5 _' f
        while(1)
. {8 @( Y: M' p* p6 O        {
6 b) j- Z5 }- @/ `$ u                displaysecond(second);' ^. A$ `' v3 g' \
                delay();
' h+ f, B. d7 f3 n                displayminute(minute);
3 s2 G2 U# L& @4 V3 V                delay();
6 m9 `5 N0 C1 s4 b$ X% u                displayhour(hour);
4 m4 }% e9 E1 w1 |: W                delay();
' Y: k9 R5 I2 S( ~& a) P$ b        }$ c, c' s9 \2 @$ }( `; G! j" _
}
+ h3 C# E+ W- Z# p( J//=======定时器中断子函数=================//
+ j8 ]! `, L+ lvoid inter0()interrupt 1) C6 j  c% i7 b/ v/ ]! d# P- ?  L4 J
{
7 \, u' [0 q- y& a) J; X) U  a        time++;
. D7 \4 ]% V( ~- ?3 x6 h        if(time==20)
! |  ^$ c9 U' }4 `$ E6 E        {$ ~( Q4 o% o/ q
                time=0;
& O/ T7 ?! P# S# S( y2 }) e                second++;
  w, x  o" {0 e2 n$ o1 ?: q        }1 ~( g4 s% X& y  g
        if(second==60)5 q, C" X) m; S0 V5 G0 u
        {/ K7 P4 w5 e7 U
                second =0;5 c* k0 p2 W  q% m  X" a
                minute++;; l/ d4 N6 U( g
        }6 b3 B7 m5 [1 A: B# D6 B- p
        if(minute==60)
) ?, w7 f- l# a2 O: y' m; ]" B5 }; i        {
% d4 h7 ^4 |! q: Q% c                minute=0;1 r! |$ Z) m8 P) r! l
                hour++;& n/ U- u* [# h! E
        }
$ g; r. c+ y8 y) t) ]        if(hour==24)$ }/ n3 s: y& h6 G+ ^
        {
3 x% l- b1 Q" k# i* U( D  t0 z6 w                hour=0;
. ^! S6 R# q2 r6 `( U4 Z        }
, G/ d1 H! b" m  i/ G$ `* O0 ?9 ^: D        TH0=(65536-46083)/256;                          //赋初值
8 [1 A5 W; u- t. d8 V        TL0=(65536-46083)%256;       
+ J" ?  R4 H$ l9 o' z' R8 L1 u}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

12

主题

418

帖子

3623

积分

EDA365版主(50)

Rank: 5

积分
3623
2#
发表于 2012-2-21 20:06 | 只看该作者
本帖最后由 ArthurGXH 于 2012-2-21 22:39 编辑 , G$ E; O+ @# i* ~
, i- l9 ]1 r$ u& b7 h4 X
兄弟,我来说说你的问题: 3 |, v  y/ ], R9 f
  displaysecond、displayminute、displayhour几个函数的参数请用指针吧。C语言的函数是传值的。比如:hour = 10;  displayhour(hour)  == displayhour(10)。是将当hour为10时,就将10传到displayhour函数。1 v5 n8 h! W1 ~  t7 z* e3 z) l" ^& F
  改成如下: 定义时:   displaysecond(unsigned char *pucData)
3 k3 p. }" _& L2 u                     调用时这样:displaysecond(&second);! i& ]' W' Q+ N: u3 Y7 f/ }' @

: |0 j* r& p6 b1 h: X1 p  请好好学一下C语言吧。
  s* A: x$ E: Z0 W, w( R0 {9 _
/ D5 e% U( R5 P$ ~6 L还有几个问题:
& B- ], D+ U! ]  1. 定时器,请用自动重装载的工作模式。程序在每次中断赋值会有误差,会积累啊。
) t# b) n+ ^- h6 T2 O  2. 读按键的程序应该与显示的分开,不要写在显示里面。
' ?, h) {6 V' ?- S9 n4 U: L  3. 按键的去抖动不充分。* S/ B7 z' O: T6 E( W2 q
       4. 定义uchar 最好用typedef。) p: l1 E8 K- P" m/ u4 e5 _+ b( @
        4 ?. g4 G  R; ?' M+ I; d/ i
& o( g6 {- ~, \/ ^, ~
3 w- J# n! E3 A9 Q$ z  F# A. d

  C. _/ w" C% c! ]+ X; W! Y" K0 Y
; g$ @+ z; C5 s# c8 I. 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, 2025-2-19 07:01 , Processed in 0.066630 second(s), 36 queries , Gzip On.

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

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

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