找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

2

主题

10

帖子

163

积分

二级会员(20)

Rank: 2Rank: 2

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

EDA365欢迎您!

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

x
以下是我写的定时器电子钟程序,按键功能不起作用,哪位帮忙看一下。
  l, \) n& z- G# ?/***************************************************************************, W! l2 p8 H& n6 ]4 A
名称:用定时器定时做时钟
( R  i. F. f7 S* O' h- [5 W" T0 [内容,自动从00-00-00开始,有按键功能
& j0 K/ A: @3 T5 D/ E芯片型号:STC89C52RC5 M1 Y6 z! l( S2 q
功能脚说明: P0为段选脚,P3为位选脚,所有引脚低电平有效.
% @, U# e! s/ r: B程序员:玄溪
% V% P# e' u; s0 a; d% p, S日期:2012.2.6
- B5 y3 }' [7 `5 ^3 v. Z/***************************************************************************/3 g8 H7 y8 p' V, h7 K
#include <reg52.h>/ v# C' g1 n7 a$ H  ^) e
#define uchar unsigned char
1 S4 v2 }8 O9 [0 q" I" H5 {5 a; d#define uint  unsigned int" q2 J/ D! Z6 S1 x3 p1 u
6 Z6 ]/ E( u4 C) j/ Z, M, }& I
uchar code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
/ g" ]  K5 L- ]+ Fsbit K1=P1^0;                          //分+! J0 B, c6 J9 O; @7 ]% J
sbit K2=P1^1;                          //分-
% N$ J0 x, _* ?* Nsbit K3=P1^2;                          //时+
" F" v/ ]: z5 R2 {  Y$ K1 X% G  Qsbit K4=P1^3;                          //时-' o/ r- Z! o2 M# {' V2 _8 o. s5 d

* O9 M8 w. k2 J7 R/ Y1 @uchar time;                                   //定义中断时间次数
. n- ^' H1 A9 r2 muchar second;                           //定义秒
+ n# H8 w4 f2 e+ i/ B/ duchar minute;                           //定义分! d$ O' w" n0 ~
uchar hour;                                   //定义时- i6 _! u* l8 J8 T# k. k
//===========延时函数============//
, L2 a. m8 ]! Y1 d2 qvoid delay()5 E. \2 q. {3 }7 V2 A( r- Y
{) d1 s( N/ m* F$ W. S2 W3 c" K$ w1 c
        uchar j;
  \0 q$ i, K5 K8 X: i' p                for(j=0;j<200;j++);
6 y  i# Z" h0 G}' e3 p8 j! X3 m- H
//=========显示秒函数=======//
! H# L6 d  y; @, O6 [void displaysecond(uchar s)                         //带返回值
: \8 k4 ^+ @& e( R* w* H4 s{
  x! X+ J8 x% ~4 F5 P& ]        P3=0xbf;8 f) Y7 B9 Y6 E7 c$ X8 \
        P0=du[s/10];
7 o$ E: F9 F8 p& B        delay();
* W/ j- Y* m' U. g! z  Q4 Z6 \        P3=0x7f;  Q/ l) f2 ~( S& h% o* R
        P0=du[s%10];9 T9 Q# ~' |9 C$ f
        delay();
( R* z, \& T- g( W  e# ~! t        P3=0xff;6 n6 Q) i0 b1 [% q
        if(K2==0)9 n/ `' \; f) p5 j1 m
        {
) E: a3 [% y% Y$ U# T, @# V) ?8 e                s++;2 _8 ^4 P5 d0 k
                if(s==60)1 n3 F4 X# h- S0 W8 l( J$ l
                {/ W+ R: J0 m* h
                        s=0;* A- y  q4 ~6 n  N
                }8 |" N- W+ D4 r! `2 t3 D* C
        }
4 B5 P8 W) h" w# S8 e& _}
8 Z8 z4 j" s1 C/ t//========显示分函数=============//* T5 U( g8 D) Y( u6 A+ o% t
void displayminute(uchar m)
6 e/ ~4 w8 {+ [" J8 o, b{; [' S' \$ ?- y  ~( S
        P3=0xf7;/ n/ q& z1 e3 y- A7 \
        P0=du[m/10];
$ b. H' z& |5 f% g5 T        delay();
. x  G4 l8 e" n$ j7 H        P3=0xef;3 V; \2 D7 |# ?
        P0=du[m%10];
8 i7 E) o- l7 j( g        delay();4 i& e3 G% s/ N7 J
        P3=0xdf;
0 @# a. q4 T( o' q' e        P0=0xbf;
6 I3 K/ L2 Z4 A- |: |0 D        delay();# z/ D& c0 {( [5 j4 v
        P3=0xff;
. o' H: D1 [* V# `) |9 X3 B! L        if(!K1)
' u0 m" {! K- f, V: o4 Q        {) i8 D7 Z' Z3 g& N6 j
                delay();( |( a! }% W. `0 b4 e
                if(!K1)
5 f: ~" u$ @+ f  y                {
# W* \* K0 V: }" i" w& s! G( p                        TR0=0;5 F2 m: w$ H- f% u
                        m++;
) j" B( f8 d! S! {6 H- @. j                        if(m==60)8 ]- z2 k7 k& Z- I# _4 x; ]4 b/ S
                        m=0;4 Q: i4 r1 i  P$ G. K
                }
" q$ o4 g$ F9 H        }3 r  _, k) V" Z1 I, j6 R
        if(!K2)
6 Q9 [6 u6 o+ ^. V$ l- [5 T        {
4 a0 Q' p  p1 B( A- `1 I                delay();' D' w! Q  m) ?
                if(!K2)
/ ]0 k( U1 E' ~                {) f7 U6 {' P: o
                        TR0=0;
5 n7 q5 T& R# }) ?                        m--;* B' h3 L6 Z2 d- w
                        if(m==0), Q, ~8 t6 s  A$ a
                        m=59;
) r5 P* ]2 B3 O; u2 ^( }                }+ r: |( E* X4 `( W- c2 ?0 j
        }
/ p& F3 J  z0 M7 C, q        TR0=1;
2 M* _6 }8 G2 R8 {5 }' e}. _; _3 ]0 R9 y' b) }
//========显示时函数==============//! E. ~8 g9 b) {1 a% N; R8 N. y
void displayhour(uchar h)
# p% N; S2 A4 f& D{& d! M$ S7 w0 U" w4 x& V
        P3=0xfe;
; a" {% c1 m) k; {1 E& U" ?3 {        P0=du[h/10];
8 X" ~9 g* C/ P6 |" U        delay();# R0 p4 I; A" a& V/ O
        P3=0xfd;
  ^  F; m) p% l6 U        P0=du[h%10];
$ F9 V, d% K: A% D7 m        delay();8 d$ |* A" G( I- @: V+ L) I
        P3=0xfb;# y: T4 E9 C0 y1 W5 ?
        P0=0xbf;
' b- U" A0 l% ^; T7 ]        delay();0 n( j1 h# _. g3 Q
        P3=0xff;, g' b' |1 k$ _
        if(!K3)7 {: ?! c8 @* L% [% H
        {7 y& d4 T/ V% Y$ s+ Y, h0 {
                delay();
5 K1 G! Z- ]( L' S2 s                if(!K3)* E* n; D7 r1 f$ i
                {  N7 w* g) ?; H; S# {
                        TR0=0;' ?* ^- @7 D5 T5 X+ b# t! k; B
                        h++;
9 k$ F8 P6 f" @( E' c                        if(h==24)- ]3 m! R7 ]; F+ v
                        h=0;
* ], ^- J7 K0 v+ f1 r. I2 S                }
* w( G& a/ i% S2 |; e        }% B4 e+ A& L* H" R! X( t0 O
        if(!K4)
2 h* \4 Z9 r! |( `6 z- K0 I* b. |        {4 [) p# f0 |! _; y
                TR0=0;
) u9 ?1 I% j! R4 Y                delay();
- D, {( \- b9 P7 s1 \7 d$ k) ^1 @; y                if(!K4). S) b6 U/ y. c  f/ T
                {
! \' i# d2 e9 C# P- ]                        h--;
6 W, f& Q! X' G, S/ |  k                        if(h==0)2 [3 I; `4 X  g+ E2 t
                        h=23;
* P* i6 l8 U' h# E! j7 w                }  F8 A/ h4 d/ ~
        }
+ \% T0 t* ~, m8 p4 |) K        TR0=1;$ S1 J% Z5 x& N0 p% ~
}7 ~, i; i& k. x! x, ]
8 i4 T, z0 ~' T
//=============主函数============//
% S+ u) E* z9 H4 @# A% c# Rvoid main(void)
2 X/ A% J, t/ j0 I; c9 z, V{6 P+ J) r* z5 l2 Y5 w! X$ j0 W
        TMOD=0x01;) t$ R: K/ A' ]0 h3 A, H
        EA=1;4 e3 \5 O  J% f# @; A4 F
        ET0=1;
* q( w" K& Y7 U: D/ r2 r$ w        TH0=(65536-46083)/256;                          //赋初值) Q2 z5 D9 ^1 [" g: W: Z( E
        TL0=(65536-46083)%256;        + K; ]/ I, v6 M" M
        TR0=1;
8 K: N; I2 F9 e6 G& A- v  m        while(1). a2 w3 o9 z9 I/ W+ R0 h
        {' j% ]5 A3 ?9 w- R
                displaysecond(second);
) q1 F- o, Z) [( X4 ~                delay();. s& ~; ]3 c5 [  M& A7 \4 |
                displayminute(minute);
% c) t$ k' n* [$ l0 z4 o4 B! b4 u                delay();3 s# J/ f" ^( F& s/ B  {, M) F
                displayhour(hour);
/ ?- |2 }! k1 t+ \                delay();
/ Q# U8 p/ g( Q7 Y        }
$ v: }$ H) Z( F$ z# C% k2 v( b}
: a4 d. v8 D% U  n* z//=======定时器中断子函数=================//; b8 e7 i5 R( ]: o. @) _# x
void inter0()interrupt 1
0 u9 L! N9 Z6 }" e; C{
( n( N8 m4 g  g4 ?6 M, i& }/ X        time++;
: d- R( C4 G% O% }0 o/ i$ H        if(time==20)
( G, R$ i, A1 `% i        {
2 _# t' M+ g/ n' E( G9 a                time=0;
  c* Q6 _% u' K( B' e1 O                second++;
: }3 Q! u3 u7 N, s5 ~        }& G7 w% J& \6 I# E: F& D
        if(second==60)
4 K9 [5 u: O3 {- X& ^        {
! p, K; g0 J% y5 N                second =0;$ e  k9 }) o+ q6 `6 b9 E
                minute++;* j' k7 }/ K( w. D. b
        }9 n9 q+ f0 [& `; O$ E0 b$ g  u/ G
        if(minute==60)
4 R! q( Q) z  D: k& j- W5 _. M9 |        {
) |) r& g( m# Y3 x1 U0 r- ~4 V                minute=0;
/ D8 f* ?' J1 _. M4 W                hour++;) i. T/ O! W5 z  J3 q
        }
; t& `( {- U' y' N  _        if(hour==24)
3 c3 o+ j. F+ h6 s( {; c6 P2 j        {4 \4 v: z9 T5 @4 j
                hour=0;; y8 p, d: ]2 B& H1 p# i& |
        }
, Z/ I0 `" X; X8 P% A) k        TH0=(65536-46083)/256;                          //赋初值: s& {( V2 Z* T- K& C. r& m  H$ X
        TL0=(65536-46083)%256;        . v& \  i: }9 a9 n% ~) f5 T
}
分享到:  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 编辑 2 Q8 M& F2 k4 V$ I' z) r* ^

! |: X  k+ @; m' w/ O+ F兄弟,我来说说你的问题: 6 z& x- d2 {5 l( L+ y' l
  displaysecond、displayminute、displayhour几个函数的参数请用指针吧。C语言的函数是传值的。比如:hour = 10;  displayhour(hour)  == displayhour(10)。是将当hour为10时,就将10传到displayhour函数。' m1 W2 p/ \0 B  G0 a! J* z- @* w0 Q
  改成如下: 定义时:   displaysecond(unsigned char *pucData); N+ j0 q1 O2 F
                     调用时这样:displaysecond(&second);
. F! r. W4 d* b# {& C
0 g0 Y3 m' c$ C  {. F# d( w# ?6 r  请好好学一下C语言吧。( }; O% e5 u7 D: \3 E3 Z* a; m

+ z3 p0 t# V# N2 E% m6 C还有几个问题:
3 D: {5 v. e3 B% m3 h; J* B+ l/ |4 q9 ^  1. 定时器,请用自动重装载的工作模式。程序在每次中断赋值会有误差,会积累啊。
$ {# @6 x7 k! F6 E  2. 读按键的程序应该与显示的分开,不要写在显示里面。7 \+ {# o) [1 c6 A/ D+ W
  3. 按键的去抖动不充分。: E# b% e9 f- r$ _5 ?& f3 f
       4. 定义uchar 最好用typedef。0 I/ H; A1 q# O$ p9 m, y5 z5 R0 X6 j
        
$ Y; c+ j9 G9 ]" l' H
- r" M& p/ y; ?# T  w  V1 H
' _- B# x* G9 _$ L6 v% Q% q% h, }2 T2 a& y9 z9 O( U

5 P! e$ C- k- Y$ b5 \& x# `
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

巢课

技术风云榜

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

GMT+8, 2025-2-19 06:38 , Processed in 0.060266 second(s), 36 queries , Gzip On.

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

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

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