找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

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

[复制链接]

2

主题

10

帖子

163

积分

二级会员(20)

Rank: 2Rank: 2

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

EDA365欢迎您!

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

x
以下是我写的定时器电子钟程序,按键功能不起作用,哪位帮忙看一下。
0 Z; J- ~2 H/ K5 F/***************************************************************************# H7 ~- x! H2 Y
名称:用定时器定时做时钟
0 n3 D& @) @+ B, F$ G内容,自动从00-00-00开始,有按键功能
' J' w. [  |7 j. S9 }4 s芯片型号:STC89C52RC6 F, n5 g8 o/ H
功能脚说明: P0为段选脚,P3为位选脚,所有引脚低电平有效.
( N5 @9 J. [* b程序员:玄溪
5 U# p$ H1 ?7 z# U$ F$ P) \( f日期:2012.2.6
; N0 O+ A: k# i. ~' Q0 K0 T  V/***************************************************************************/# J; u( P; a& R
#include <reg52.h>5 Z; |; n6 @$ M
#define uchar unsigned char ! D- Z* k2 o8 t; ]! F
#define uint  unsigned int  G" l5 x' G% o) t

: f1 R: i- j% _4 ?8 Auchar code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};) K. m5 Q1 \$ G* m
sbit K1=P1^0;                          //分+
) c  ^' f/ Q4 j- x* Ksbit K2=P1^1;                          //分-1 E: p$ w+ q+ p! J8 y0 [5 z/ D/ n
sbit K3=P1^2;                          //时+8 G1 ]9 F7 @7 q4 [, V
sbit K4=P1^3;                          //时-) ^8 u1 A3 C; [9 Q

, G2 W3 y3 J3 W) L# v# l4 n% I. duchar time;                                   //定义中断时间次数! G& P+ e: b8 D% o
uchar second;                           //定义秒% y7 w  e+ R$ n6 _4 T& L
uchar minute;                           //定义分
7 F7 \8 E: J$ X! p$ V2 i  ruchar hour;                                   //定义时$ V7 I* Q1 l; J! I4 Y3 ?, F+ x
//===========延时函数============//
, p9 N. s% l5 u1 ?0 k+ Z. a" Jvoid delay(): r# f' B$ j. ~/ V" Y
{. _  D6 s! c' z- j9 d
        uchar j;
. V1 s+ l' J. Q# h% O+ f6 e                for(j=0;j<200;j++);
/ q+ i) ~% c. O' i, _7 l, m}
! g' ?1 g8 x6 J. s. r% R- i0 |//=========显示秒函数=======//) S+ Y8 s. Z8 W+ h8 G
void displaysecond(uchar s)                         //带返回值/ ]" k: D3 p3 M. ^' v5 f. v! i
{
1 A6 ]" m) Z; K, t        P3=0xbf;
: s) T7 P8 q8 [$ i        P0=du[s/10];; K" ^6 o1 h7 X4 ?9 v# n3 `
        delay();
4 j! ^2 P' ]; W* U8 p        P3=0x7f;8 I8 j% n! ^0 s! n) F
        P0=du[s%10];6 K3 t. U1 x0 W3 Y
        delay();
. P4 ^8 w7 x1 P* f1 T$ |        P3=0xff;
2 V6 j9 q6 h; `  H) n# ]* h7 {% h' N' i        if(K2==0)' O4 o5 ^8 J6 v( l- @
        {4 z; t) ~% ^/ x0 M0 k! W
                s++;
+ B3 S  D0 G4 S- b; ]                if(s==60)5 `. v8 m, h" P/ A5 A2 j
                {
9 X9 a; R- l- Y! n$ i# H( ]                        s=0;: g) n, c0 u2 k, j1 W3 p
                }
0 h5 R/ A3 d; F3 N7 [, _1 I        }6 h8 M6 [# |  q* i/ ~  o7 t3 X
}* ?3 ^& l+ A- x* c$ ?9 n
//========显示分函数=============//3 n. m  m4 q/ _8 S5 V: w2 @5 u7 d$ k3 M- Q
void displayminute(uchar m)
( S" l% x  d8 |; a" w0 l{1 r4 e' {  t% f9 u5 N: q
        P3=0xf7;5 E/ e) ]! O% d4 L$ U( B
        P0=du[m/10];: |8 e( L+ }1 \- j
        delay();9 a; T9 T8 k: i9 a6 e3 ^9 \
        P3=0xef;% ^3 \. W$ k. i% I: P) u! I
        P0=du[m%10];
5 \& k9 u( U, K. F7 o' a        delay();+ k* x: E& |0 F- @
        P3=0xdf;
/ M- n" o) Y5 l% H$ U0 W" T6 ~8 W        P0=0xbf;
" @' E. n, `5 Y6 {0 ]7 a2 L        delay();2 u6 A' K8 [# B& H
        P3=0xff;7 I( g4 ?: i- J0 \, g& Q
        if(!K1). n7 p4 D+ g  d( O! z
        {
% w  {+ F5 c' p, P" Z& k; e                delay();
6 _2 d8 g) P+ h$ j) B% O2 Q! v& Y                if(!K1)5 j. L: [4 E( c! M. k! W- a
                {1 r5 C8 ?, D2 m+ W
                        TR0=0;
) |7 y5 @! l# S6 I9 d& \                        m++;
5 {( Z3 e* L+ L: k                        if(m==60)
  k# i1 R8 h# z4 D( y1 d) d4 V                        m=0;) s! `4 V0 |% w! @
                }
0 A/ T& n* ^! A& L) A        }
/ a9 x- @6 r1 f9 {6 D# r        if(!K2)* t) i3 [& c: d
        {
0 [$ u" U7 j! f* z% h2 u# K# U                delay();/ j0 V  J/ ^: X$ L
                if(!K2)5 o' q+ C  j/ j
                {
' d5 V) ]" h1 t7 _, |                        TR0=0;
/ A6 v! z1 N" o6 {. i6 g) {                        m--;
* @8 C9 k5 D9 K8 \8 n. I                        if(m==0)" l1 l8 v) g8 H$ C! k( i
                        m=59;
0 G8 t( e- b9 @  c                }
* a, Y& A6 z2 `- c+ R8 w        }3 F) F! W, J/ j
        TR0=1;+ m- @1 |  P+ |& h& H$ t) G& w
}
% g) k, `; ]9 _1 p0 C: D//========显示时函数==============/// N7 T( U3 U3 g5 q/ A
void displayhour(uchar h)! v+ u! A- H' J( K. d
{# [* S; ~' f& {+ i5 s; i1 \
        P3=0xfe;
& l3 M; y; \5 J9 T7 k        P0=du[h/10];
7 D( h" N4 `; b( C, R; a- U# |" H$ ~        delay();: K* D; `8 d# r: C; m! A( Q2 K# E
        P3=0xfd;+ D1 M% r3 z* g' c! v
        P0=du[h%10];
5 A" v' _/ @9 R/ _  O! O7 l        delay();
  `$ P) V4 Y3 ~! v$ m4 X        P3=0xfb;. k6 r; `# l8 z7 T/ x/ d1 u1 h' l
        P0=0xbf;# [/ P5 q$ ^2 F3 b0 G# o+ r5 g$ y
        delay();. |1 q# T, y( P7 o  L
        P3=0xff;+ z7 ~4 {6 r/ B% D/ O
        if(!K3)2 N. Y& ]( e0 ]; u$ u" Y
        {
! Y/ N& x- \. @% H* g8 ^                delay();
" c! N, B# c" J/ g6 ]% @# V- S                if(!K3)
4 c3 [" ^1 h1 S$ l' r                {
+ s) m& ?5 [  Q  R                        TR0=0;3 C. w  @: v- _
                        h++;% _9 p2 l) y. U1 Y4 k) R
                        if(h==24); C# e$ i1 \% P: |+ j6 l
                        h=0;
% @5 G. w* k4 l8 v6 w2 v                }
+ j  V$ ?) S$ m& A) h( x  y        }
& Y) [. e- o9 z" _. J" t        if(!K4)! W0 }+ V3 K5 o; Q2 H: P: [
        {
9 H, X1 n1 g1 j: B) j  a                TR0=0;
/ \3 v/ F9 ?& K1 q( F6 a$ x8 P                delay();2 _  g4 f. A1 G$ t" T  V
                if(!K4)
0 h, n! e  T1 B; I                {
9 r+ H4 `, }' O' R, P; G% B                        h--;
- ?, Q2 v2 l, q* t                        if(h==0)
. J/ h* {# `6 Z$ r                        h=23;+ P6 c; m5 B, J3 a; `0 p9 G
                }: T& V8 N5 ~  M' T6 a
        }/ ~  o1 O% C, ^7 H
        TR0=1;
" `/ R; P9 x* I% C4 M6 b; k}
3 R* L. t" ]$ R. Y* N$ B1 Z7 f' @$ @3 ?6 e6 M
//=============主函数============//7 U" V1 _6 C" S$ x5 c% ]& \0 T$ A
void main(void)& d' r5 b: h( z5 w8 y4 p( t
{, {6 o7 e/ d  m5 y  e
        TMOD=0x01;
3 s1 O/ X; v" L0 j" ]$ @        EA=1;& I5 s. y6 V8 {: X
        ET0=1;
$ ?( z# |, Z9 k/ b        TH0=(65536-46083)/256;                          //赋初值
) \4 C8 c( Q" q3 V        TL0=(65536-46083)%256;       
& i" E! ?% L( p& j7 Z! r        TR0=1;+ [; z  y  p( E( ^& t! q$ O& l  C) v" m
        while(1). x; T, u# @, u# i, ]9 y( k. p5 M
        {. Z" h0 B- q4 E+ L2 U% U
                displaysecond(second);- q2 F+ ]. I( u5 P
                delay();7 n1 o' s; v% T* \$ u
                displayminute(minute);4 {( k  n2 ]) Z
                delay();
5 m' P/ v5 b5 h                displayhour(hour);
5 R0 S8 l& I! b3 x( f                delay();2 i4 r9 ]% H2 ^. j- A# v) x
        }* S' \: C; D. l
}: c; K/ k4 K% ]+ T
//=======定时器中断子函数=================//
* a, C, H- P0 @, z& r$ v6 wvoid inter0()interrupt 1
0 @3 o2 {: }9 j4 m( S{
" [4 a7 a* b" i; y% m        time++;
- {: a9 ^, a; n/ D' D  w$ x        if(time==20)
( Z  [* e0 D. b# B/ u% G" z        {
9 U% E. a2 C. p( c. K$ p$ h  W0 T                time=0;
, _* W1 n) ^# U                second++;
. i! Q$ P  j( Y        }
0 S) r/ x/ ]: V) o2 M, W) u        if(second==60)2 Q+ R; Q! [+ j+ n1 e1 R& ?
        {
# v) b) S2 G- C0 X                second =0;
& S: U5 k4 Y4 r. Z- W' l4 B                minute++;4 ]& |$ H( B5 T  f, B
        }3 c9 L& Q: E* a& M
        if(minute==60)
& v4 `' z9 G+ S) b  R        {3 w+ r0 c8 H  v9 M5 G
                minute=0;: e. \, `4 H+ S  g8 m5 ~
                hour++;6 P- u, a; w4 n' e! T* R+ ]- Q4 s
        }' n; i# E2 i7 W0 ?
        if(hour==24)
, D( v* a' z. i4 U- S6 ^% k9 P- y        {1 L3 N% Z; n8 H; `
                hour=0;/ d6 Z; T! U9 S) o* o; `2 U
        }9 s7 ]! K7 d3 C2 P! P. ?- K, i  r: S
        TH0=(65536-46083)/256;                          //赋初值3 O' u' |6 Y; y# F8 }) C, F
        TL0=(65536-46083)%256;       
; O9 H  i8 H, o}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 支持!支持! 反对!反对!

12

主题

418

帖子

3623

积分

EDA365版主(50)

Rank: 5

积分
3623
2#
发表于 2012-2-21 20:06 | 只看该作者
本帖最后由 ArthurGXH 于 2012-2-21 22:39 编辑 2 M* d& B( j; u( V3 M, p

& V0 @0 Q/ S5 S- U, b兄弟,我来说说你的问题: 
: @* m0 \9 b3 \: h& |% ^2 E  displaysecond、displayminute、displayhour几个函数的参数请用指针吧。C语言的函数是传值的。比如:hour = 10;  displayhour(hour)  == displayhour(10)。是将当hour为10时,就将10传到displayhour函数。
( M$ x$ h! V9 ]: F8 ~7 m6 R) y  改成如下: 定义时:   displaysecond(unsigned char *pucData)8 U. A- B4 C$ Z2 s: O6 h
                     调用时这样:displaysecond(&second);
! l  q" C3 [! |, S( O0 r! o
' T# Y0 M% v1 T  请好好学一下C语言吧。! V& e) Y5 B1 B+ l
2 Z& k1 G/ Q- k/ O1 V3 v- L  D' R
还有几个问题:
7 T# o( Y! d) {( [2 D7 Y% m/ \0 N: z  1. 定时器,请用自动重装载的工作模式。程序在每次中断赋值会有误差,会积累啊。) B2 f) ]; L3 A+ `, ^2 ]7 n! s3 F
  2. 读按键的程序应该与显示的分开,不要写在显示里面。
8 E4 ^  U  T' C; ~$ v8 }- v. A  3. 按键的去抖动不充分。
/ f5 f- A/ p, z       4. 定义uchar 最好用typedef。
# |6 E8 U$ ~/ x$ j/ q( A6 T        ( k. {- p- _- g

0 `8 I8 B1 I- W8 l  e( e
% S  O$ X6 l9 ?
" R. Z% M' h0 }8 l4 ~! t& e" L4 U2 V) f

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, 2024-11-24 13:20 , Processed in 0.078274 second(s), 39 queries , Gzip On.

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

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

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