找回密码
 注册
关于网站域名变更的通知
查看: 1750|回复: 5
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
以下是我写的定时器电子钟程序,按键功能不起作用,哪位帮忙看一下。1 f' W& E8 v$ t8 i" E# t
/***************************************************************************
  c  C: z. [2 {; R- E" [名称:用定时器定时做时钟
) e. i0 v. w1 q! L* s# K内容,自动从00-00-00开始,有按键功能8 k+ t% Y1 b" I4 |& g0 F( k5 P
芯片型号:STC89C52RC
8 L8 i6 k4 }( G# r0 T3 ]& F功能脚说明: P0为段选脚,P3为位选脚,所有引脚低电平有效.
/ t6 U, Q9 h" w5 c6 `  m, w程序员:玄溪
2 v/ D* X0 h" E: b( d+ }日期:2012.2.6
  n+ b6 }; ?! [: o. y* ]) _/***************************************************************************/
4 r6 f* ]' L. `9 g2 r! S#include <reg52.h>
& A0 \: ?- E: `#define uchar unsigned char 4 r  x9 B# p/ z) B4 |
#define uint  unsigned int
% h" ~. r2 r0 d3 x% H: v0 m" O1 @' H+ ]" I8 n* @/ P
uchar code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
( S7 H/ L% U$ f; B* k& x( Isbit K1=P1^0;                          //分+
" F/ l5 ?0 N' j7 ?5 Osbit K2=P1^1;                          //分-
4 Z% j# P. t. L$ k! P0 L) X/ t$ k; b: h1 xsbit K3=P1^2;                          //时+
2 S# h+ t' m6 osbit K4=P1^3;                          //时-
6 ~6 Y6 Q# U8 I& a0 q( \3 D# S: ^% m0 l
uchar time;                                   //定义中断时间次数
6 f: j/ ~/ P* {: v7 O; Suchar second;                           //定义秒" [9 q, P5 J* N
uchar minute;                           //定义分  ~! F! L: X1 E* N5 w8 L
uchar hour;                                   //定义时& u4 |% S+ a. Q9 r
//===========延时函数============//
, Q' T/ L3 R  S! r( U) X" M/ Yvoid delay(), L$ z% ]- i: W5 t
{
0 M5 q+ r! D7 l$ B        uchar j;
- B4 S$ Y: J9 F. t7 I                for(j=0;j<200;j++);2 C" Q5 \. C' W$ E
}: K# w6 p' f8 M. `: i, S
//=========显示秒函数=======//3 e9 K. A( C( D6 o7 i
void displaysecond(uchar s)                         //带返回值3 M# `: N3 O4 N/ }* L% J3 r
{# a$ N: x6 z, W0 E# v0 ?
        P3=0xbf;' R9 S( _4 C7 G) W& k& P
        P0=du[s/10];) K4 c6 [9 o1 O
        delay();( `7 X/ h+ b, e! B
        P3=0x7f;
, A/ C5 I; @# M4 w) K- n+ F. Y        P0=du[s%10];
" O4 C1 C" ?6 l        delay();
; q* U" q8 u# \. z2 I- R        P3=0xff;
3 q' d4 d) X) X% ?        if(K2==0)- t2 O# x; w+ |3 v) x
        {
2 R8 E, P2 M' D$ }                s++;
* G) p  E* I* _7 K' S- f                if(s==60)' f, e: n8 ?7 `9 O
                {
# }- o- l1 _7 U! R. E0 |% b                        s=0;
/ @5 B% }* S  g! @& k                }
+ y  V4 U* b; }* m6 C# E( _+ l        }8 K& v& z) S7 n: u+ y" y
}9 `2 V8 Z* E) f9 B5 W! Z
//========显示分函数=============//
9 c3 l5 W- a4 `6 u' Zvoid displayminute(uchar m)
% D4 i% ?5 f/ d" ?/ j2 M5 h{
/ B: S; H' l9 N4 ~# N, R+ t) k        P3=0xf7;
& o6 v: }! L$ Y6 f$ U        P0=du[m/10];
& Z3 B* c% S8 @+ w7 Y9 }        delay();
1 c* u3 R3 \1 {9 r# e( {        P3=0xef;2 t. N9 F6 L- L) r5 d+ M3 [
        P0=du[m%10];4 v! n# ~/ v1 _( S' ?  M& j
        delay();
* f) B! g% ^- @        P3=0xdf;9 H3 ]& L; J6 f  z3 N7 K+ J/ a
        P0=0xbf;0 M- G+ R6 n  D8 F) ~
        delay();
; F( p0 H/ r5 C8 X        P3=0xff;/ s# }, j) g5 `, V3 O' i, n4 O
        if(!K1)7 F1 D% R! X$ h* A3 o2 M
        {
0 c8 \' [$ ]& K$ c. m                delay();
& ^$ [4 _# ^. B1 n4 @6 a. x; l                if(!K1)
9 @/ w* o" e  R+ g                {
5 E$ Y0 K) m; M3 K                        TR0=0;
, t4 o6 q2 B2 i. u( @! h# {0 ~: v                        m++;$ _1 O. u* u$ B! u1 L8 c
                        if(m==60)
7 o$ B8 o( f' p, |& ?5 g; h                        m=0;
& B' N1 z/ J3 D+ C, A8 w2 M                }
3 I+ s- E# d/ }2 M+ [3 W        }
3 x! h2 H+ w8 m$ b3 L4 Y6 K        if(!K2)
6 g$ y, t8 U  X3 F        {
4 @& P6 J2 i5 W: ~! x                delay();8 ^# J4 k  \! T4 G* t3 V% [! n
                if(!K2)
# y/ V! D& S% c. c& t$ J                {3 d* d, H& U/ t6 v) @4 e6 ]
                        TR0=0;4 V/ Y+ H7 z  P& w
                        m--;# I* u& U2 b# s7 x9 ?$ s7 a; d. a. s
                        if(m==0)
% ?! Q* ~2 _8 Y( J4 z9 Y3 j( H/ X2 x                        m=59;
; j9 g; N6 |3 q: c& Z. E                }
4 r; w, E8 I1 o& {4 S( z; p! _4 n        }
0 D3 z3 g/ b2 t# B' g        TR0=1;7 K1 w& S" L' b+ h* ]
}& E6 a/ J% m8 H
//========显示时函数==============//# |4 Q+ W/ O! B1 s' Y
void displayhour(uchar h)+ P! Q3 l; y2 m* M
{
: _: `! g8 f/ d! F% G        P3=0xfe;
+ |1 n! Z. {- D  w# N        P0=du[h/10];
: V+ |5 ?" `; [        delay();1 L: q; ^+ h9 R7 l5 V& L
        P3=0xfd;
2 `7 e3 H# R+ m9 H5 {% o. H        P0=du[h%10];' u7 G- ]1 T; z
        delay();
, a; w8 _% u7 I) Y) a9 K        P3=0xfb;
. m+ I* o: T, j  D, B- O, m        P0=0xbf;' |, p& q0 ?& k# R" H7 B: X' P
        delay();6 u4 n) W% t0 M0 a+ X. U0 `2 N
        P3=0xff;
6 v$ J0 Z4 V6 ?! `8 ?$ W        if(!K3). G6 o( z% |& Q1 B3 A
        {
' O7 I- M  Y% b* s; w, D% j0 u* s' T                delay();
, V0 G% I9 {8 Y" `- {, R- `                if(!K3)
7 s/ N2 u. z! L% v  h                {
& z- R  g) H3 F& T7 `. H* r% m                        TR0=0;: k6 H  \3 L- n) T; V
                        h++;
" [; Y$ y4 b7 @- M# h                        if(h==24)
, S8 ]" X4 R2 N; x8 B                        h=0;. p9 u7 T2 j1 Q$ E+ O% u, b. }
                }
4 K  ^6 R  A8 ~/ O) }; k        }- ~3 n. S6 Q. D6 W2 N2 t9 z
        if(!K4)
. R8 }- w+ ^8 F: X        {
" i) G* Q6 p) Y! c                TR0=0;, B( n/ q8 I/ i  e3 H2 y
                delay();0 H7 l; d7 X# P: y4 y
                if(!K4)- E2 _- E" L7 j' o! q
                {9 a  a4 ?! |. L( ~4 y+ J+ _; S
                        h--;/ h7 |* W- `# x/ u9 ?
                        if(h==0)4 W" T& y' o% W/ z8 p$ D( D2 p
                        h=23;
! ^4 E2 g8 ^! C  G4 [0 F5 u7 F1 W* u                }
5 {+ C8 F$ J- y. q( M4 l* \& P, t* f" q        }6 S' Y. m3 a% X. a6 k% R
        TR0=1;+ L- j3 `6 z0 k8 d) k, K* d
}
6 b$ |6 V4 u9 O: u- M3 T. K& i1 Z6 L, A( m' {7 I
//=============主函数============//
; S5 d; z$ t7 `4 k0 Evoid main(void)' N- N. p- W5 A) ]6 r) \
{
; O7 ~/ y. A: ~4 P# ~) V- G        TMOD=0x01;( D7 @) [3 \" Q
        EA=1;2 W8 ^2 \6 Z- F3 B* o
        ET0=1;
/ _3 K5 s8 ?: u5 D7 _        TH0=(65536-46083)/256;                          //赋初值
# R+ Z0 ?3 C2 f( y* {% G1 q+ [        TL0=(65536-46083)%256;        * [, c* j1 ~" u9 B4 T* M
        TR0=1;. \5 H) {+ ^. f; o2 v
        while(1)
: N/ ^% e0 Z/ d. f        {* X' Y) N% ~+ ~" T
                displaysecond(second);: {6 ]1 J3 p9 @, r! o2 q2 X
                delay();
3 t. E+ ?0 r9 ~& `2 N1 P: S, X                displayminute(minute);4 w4 |. v  B# q2 B% i
                delay();
2 x- m& ~0 S3 i8 Z7 s: W3 W                displayhour(hour);
. M1 u  T' ~0 p* E/ M" U                delay();& C' `( T/ U0 g) L. Z4 [9 W# m
        }0 Z6 o* S6 \2 Y6 w+ G: G
}
6 |( m) a/ s# P9 K% H//=======定时器中断子函数=================//+ w) u/ H9 I  \
void inter0()interrupt 1# I: k+ M; W; q3 c8 a) @
{4 i( U& a6 H1 c7 P6 [; [3 S' z# z
        time++;
; g. |5 e  s- j8 J2 u        if(time==20)
1 l  F/ o. T" d/ w        {* V, J# G/ O) Z% v9 C7 Y& V7 t$ Y
                time=0;
/ y9 K% F3 d- k# M                second++;# }4 G' p0 u2 x  |: d, w: A
        }" H  H( z6 d& z' G& r7 d4 E
        if(second==60)8 p; ~& v! }5 l& c2 L3 _' S! C
        {- e" e% B6 `+ _
                second =0;
+ J  `/ E* O" b9 _                minute++;
% F6 k7 |% |* y$ X: a3 e# P        }6 h5 ?, z" R; J9 F
        if(minute==60)
" ^0 z  L+ a$ _$ b        {
5 E* {- P) b6 s) P7 v- s                minute=0;
/ E, [' F1 l5 M0 M( z) P; B" X                hour++;. p' T: U2 n4 T7 \
        }6 G% O7 e' W% C
        if(hour==24)& r$ w6 x( \( S$ u7 u/ G
        {3 ~6 ]; p) r( s
                hour=0;
) ^0 x1 C2 D& s! R) p3 M# Y        }
0 O  o- ?0 Q! V( _# O5 k/ M        TH0=(65536-46083)/256;                          //赋初值; k0 h7 z3 j+ B( ^* F4 }8 d
        TL0=(65536-46083)%256;        0 q7 ~5 M1 S$ x% h
}

该用户从未签到

2#
发表于 2012-2-21 20:06 | 只看该作者
本帖最后由 ArthurGXH 于 2012-2-21 22:39 编辑   j* n( `) D' u' Q

0 r2 m8 u) k- L0 \/ G0 K兄弟,我来说说你的问题: 
2 }) Y+ W1 J4 i) B+ Y% b+ a  displaysecond、displayminute、displayhour几个函数的参数请用指针吧。C语言的函数是传值的。比如:hour = 10;  displayhour(hour)  == displayhour(10)。是将当hour为10时,就将10传到displayhour函数。
% z6 H- P, B# \1 m1 M  改成如下: 定义时:   displaysecond(unsigned char *pucData)0 w, v) r" r6 U9 N
                     调用时这样:displaysecond(&second);+ a- J# B, t' ^4 A' C# c* c1 o
* W/ ?6 Z2 K6 X  J; \9 C
  请好好学一下C语言吧。! t( `- T  L: c

( f) C9 F* |9 o5 e, D1 ~; x还有几个问题:
& V. H% Z7 s# k9 q* g& T  1. 定时器,请用自动重装载的工作模式。程序在每次中断赋值会有误差,会积累啊。
- m+ K  m# }, `  2. 读按键的程序应该与显示的分开,不要写在显示里面。
" L+ x: J6 ]9 \/ i5 M  3. 按键的去抖动不充分。
' U' y  v7 K; G9 D" y' U( ^       4. 定义uchar 最好用typedef。* ^- ?% N8 W! c) k
        
/ }0 x) k. W8 M. t. g& ]' W& R& f4 x9 o% G/ \$ a2 e, f
- b& p# ]$ R' F

& L" `& I! H9 f9 @. b
5 D* B/ l1 X% R

该用户从未签到

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

该用户从未签到

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

该用户从未签到

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

Text1.c

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

代码

该用户从未签到

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

评分

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

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-18 03:45 , Processed in 0.093750 second(s), 30 queries , Gzip On.

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

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

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