EDA365电子论坛网
标题:
定时器电子钟程序,按键没用作用,哪位大虾帮忙看一下。
[打印本页]
作者:
szwsu
时间:
2012-2-21 13:48
标题:
定时器电子钟程序,按键没用作用,哪位大虾帮忙看一下。
以下是我写的定时器电子钟程序,按键功能不起作用,哪位帮忙看一下。
2 Z5 H" N8 g9 X O! Y3 E
/***************************************************************************
$ S& A' r( Y: _- ^* V
名称:用定时器定时做时钟
& b" D1 @5 O/ a. ?
内容,自动从00-00-00开始,有按键功能
" G F4 l% @5 m5 n- M
芯片型号:STC89C52RC
) I6 s) t9 M ~
功能脚说明: P0为段选脚,P3为位选脚,所有引脚低电平有效.
j8 I) N2 [* S9 R) g% i2 K8 j
程序员:玄溪
$ [7 p, Q9 T9 w$ ]
日期:2012.2.6
; ^0 L6 a# _( o6 o7 r
/***************************************************************************/
- U$ D3 h" l) h) ~2 o
#include <reg52.h>
/ N% X; k3 E2 G0 C$ w
#define uchar unsigned char
, D9 h- M( |% h+ T
#define uint unsigned int
' W7 A1 T6 V0 T( a5 R+ h7 T8 b) f
) A; b, v$ w# Q. {5 ?# i
uchar code du[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
" x* [& [8 C3 P) w9 M, k
sbit K1=P1^0; //分+
" e6 |5 T t; `! E
sbit K2=P1^1; //分-
) N$ [: ]1 l8 `, w9 W L( K
sbit K3=P1^2; //时+
; r! A8 b1 d$ Q# @, B+ l9 Z
sbit K4=P1^3; //时-
- g$ C1 T( t& u9 J: z
2 l5 l* C* P6 X' a% ?' B6 B) c
uchar time; //定义中断时间次数
4 w0 F8 w4 \: c& B
uchar second; //定义秒
9 y- O% S( a; c4 V. _
uchar minute; //定义分
1 ?. T! a( ~& V5 } B1 ~
uchar hour; //定义时
: b: v4 K1 i! A. Y1 }! Y$ y
//===========延时函数============//
6 m& r: [# w* ~% q$ N6 E1 Q( g
void delay()
4 ?3 ?# m$ i% O# b. l' ^7 u
{
( `# V& E7 z( e. m
uchar j;
& p) | Y+ q: ^7 Y- c
for(j=0;j<200;j++);
; F! ?, }+ m* q) L. J2 R6 f
}
* X& f( c# {9 }: x& h
//=========显示秒函数=======//
2 L( w: A( ^- h* A7 f7 F5 E
void displaysecond(uchar s) //带返回值
1 k) q8 x: s1 ^, R7 @
{
# a# t& W, H' [% P
P3=0xbf;
: k$ I. H# @/ C/ H0 U, H" G! d
P0=du[s/10];
( O5 \( |7 R0 _" s0 }
delay();
7 o, H# x- B/ t$ T0 V1 W' X
P3=0x7f;
% o" ~* W( N9 `
P0=du[s%10];
0 E( H# g% v: K! k2 E; f# E7 k
delay();
7 _: G! K/ n+ U' x" J' ~) f2 \
P3=0xff;
( K0 U3 N1 K" V. O5 s a+ h
if(K2==0)
, H# n4 Z" _, P+ V
{
! s" D* t9 m1 b
s++;
" B: g4 v5 n7 U% j; p
if(s==60)
3 e# g* f7 _- q9 Z% N
{
6 u y9 W$ I3 L1 K$ k
s=0;
3 N" L# ~9 V( S
}
4 W$ g4 Z9 q' }& m1 K& [4 a
}
# x0 O6 u" d/ j5 j, A% d
}
" r/ Q6 b& q' N, m$ L6 s$ O
//========显示分函数=============//
- f. V% U5 k3 \7 {
void displayminute(uchar m)
1 H/ b- W6 ]- k3 ?/ ^
{
$ k( V/ Q$ E! X* w- t3 u& {2 U
P3=0xf7;
, N% r& j) m4 x4 }0 @& u; H) p) [. H
P0=du[m/10];
) U o) l3 k1 h5 Q0 ~
delay();
9 v. J# }; W$ l: Q$ ^6 w
P3=0xef;
: ^4 y5 q0 P1 m) u
P0=du[m%10];
2 `, B% a( d, n2 E/ z2 H
delay();
1 B) Z( |/ `3 w& F
P3=0xdf;
) j7 L3 f8 z7 x' A9 R- a
P0=0xbf;
6 G( T6 J$ C* @1 H2 ^* \2 [3 w
delay();
]5 B# ?2 y3 W, s/ @# w9 [& w( o
P3=0xff;
4 g& C+ l T$ z' i
if(!K1)
7 y0 H( ^# h$ C8 {8 q" }1 L5 b
{
1 i* r5 a- T H( P
delay();
( r. a8 \' \* k5 L9 m$ T
if(!K1)
: v6 g& [% q* I4 g8 c$ m: s
{
2 n0 y( }6 q" S# T/ S
TR0=0;
2 m# G( l$ v, u5 a
m++;
8 G- ?6 d r4 D2 T& U
if(m==60)
4 h) T1 N2 n: n- U9 |: ~: R Y" o" H
m=0;
# k/ B/ f( W) c0 V( @6 E
}
3 C. z" K$ ]: r3 K" r
}
& K; F! Q" O6 ~) P
if(!K2)
6 t7 D5 F2 o' j* x. O
{
0 \' {6 m* @: n% P
delay();
2 X# p' l- ^. {" C+ u
if(!K2)
' F% ?" n: i' d/ h1 E4 a
{
8 K f- v, }) L, V0 E
TR0=0;
. a! f7 c7 u6 e7 a0 `% @2 x
m--;
6 G; z4 E2 i, e. e2 d- Y
if(m==0)
( _1 V, S. \! z6 O: Q( a
m=59;
& d" k# h9 o0 ]6 @3 H3 J: }4 F( S
}
4 ~6 I/ U- l2 K! t; Y P
}
% l- Y. t7 Z4 d! s: z3 S
TR0=1;
2 c# f; W% m6 S; r$ ?) ~! w
}
0 |# S" z$ ]$ W4 X4 s
//========显示时函数==============//
' p8 ^) O" q) j% H- e
void displayhour(uchar h)
7 c+ w0 a1 D6 a1 w$ H% K# q
{
% ^' m" u# g2 d
P3=0xfe;
$ l) t5 R2 c; k) x9 E
P0=du[h/10];
/ L: e" X0 e' K% W( l
delay();
, i1 R- [4 Y& X/ L" \
P3=0xfd;
s* z, [, P$ N6 P
P0=du[h%10];
, r% u5 b4 M# w7 @8 J' M9 P: B8 |) u
delay();
1 P5 d7 x- _7 H5 E1 S. X
P3=0xfb;
5 q; g! q {9 `( [; w0 }0 k; w
P0=0xbf;
! G! F% ]4 y; T& u
delay();
* e) f1 D. B( D$ v/ ?
P3=0xff;
+ W: _7 M8 r: s; l3 h
if(!K3)
2 M" Y- P6 H$ }$ b$ j
{
- v; x2 l! s! t1 V, ]& k) x
delay();
( r) ~4 o" U9 G6 H, C4 I& Q
if(!K3)
5 G4 N7 }9 y3 v% N# A9 r7 a
{
% W4 [4 j1 B u1 \. Z" p
TR0=0;
# j# o! H& T/ u. S" P' ^, b2 c
h++;
7 E! @! J2 p/ @) T H" n* O# H0 E- S1 y! I
if(h==24)
5 V/ b' U7 k% C, W
h=0;
! _$ I( D, _5 A0 t, Q! M+ I
}
& }# l W5 Q x9 D5 b" j& n1 o
}
: {+ n8 J7 c" X2 [, g$ ~, U d9 P
if(!K4)
& j; I8 h' s/ N ?# @
{
3 d% K9 U6 m8 ]! A8 G
TR0=0;
* e- h+ k9 D. |1 d& l) K
delay();
2 s+ [, P( p# B6 _
if(!K4)
; S8 Y( V0 F9 m& }5 X9 Y d" n
{
. R4 r! H: |; c- _* G, Y. Y4 n$ l
h--;
; z2 G9 `" y0 Z/ V
if(h==0)
8 ^( E+ \) `, i1 I% q, C" s1 z
h=23;
7 _% a$ C6 j* b6 A3 Z: f
}
% w: I! M1 S9 L. D
}
( w7 j( m. R( m0 j& g2 ~( A7 {2 ]
TR0=1;
* t& O0 C: ^0 k( u
}
7 e. q* U) n8 ~1 h+ H$ ]; H
7 X& l+ Z/ v6 k" _8 \! h
//=============主函数============//
, E" ^, X4 R( R9 H: X K Z& J
void main(void)
: X5 _0 y$ i/ k j6 | G# w0 e
{
* I2 A5 n+ o* ^6 a9 k X6 a
TMOD=0x01;
- ]' F0 f/ [& L W
EA=1;
. o" ]" I# E# Y5 y
ET0=1;
5 z" {' Z1 F& r. x
TH0=(65536-46083)/256; //赋初值
" d3 e( T% e/ Z* r7 N
TL0=(65536-46083)%256;
" F7 f8 f# y1 t% o6 w
TR0=1;
3 ], j2 ?3 j2 A5 F9 r$ X% I) {
while(1)
, }. O3 Q M0 f6 T
{
4 ]8 ^/ }) T$ N1 L) a) G. m
displaysecond(second);
2 k! G" x* d, G6 i# v, h4 v
delay();
q& U/ K, e \2 u8 ~- _% @7 ?
displayminute(minute);
% D9 E* F+ i2 U. z, x! N
delay();
$ f; Y/ C- r' D1 S5 W
displayhour(hour);
8 s. L4 c+ n8 {/ m
delay();
# }% m* m$ u# Y% L) J1 ~9 T& a
}
r& U9 W: y3 _- i( U% N
}
D" O$ c4 F. g5 g+ M. I* m, N
//=======定时器中断子函数=================//
1 A% I, ^7 Q1 ?6 _
void inter0()interrupt 1
9 X1 k+ C! N8 X- n
{
8 U0 R- T/ [, A( W: r N
time++;
1 }( a8 A) ~& e- T" X" W
if(time==20)
3 Y1 E* x' D' Z2 H! ~
{
& [9 i1 `) w" w) V" y# U- h; O" Z
time=0;
9 ^1 j( ^+ K* f
second++;
; L4 R5 [/ w* o/ E9 G2 r5 D* k. `
}
- u+ Y- z9 q( R7 \
if(second==60)
, j+ E$ z4 S! g* x# Q
{
2 K* y; U* W9 S) }0 _ a. ~; N
second =0;
8 `( L7 }+ U; P1 B) Z# ?7 u' n5 h; Z
minute++;
$ ?" k7 Z" z3 I( P% c
}
( K% z B; Q; i) R7 D% a& u3 o
if(minute==60)
4 r% V; l8 B( h4 z$ u9 j1 N
{
3 N1 i1 A4 W/ p+ m
minute=0;
% f; X7 J. f: T
hour++;
& b9 n0 ^. \' n' u) P
}
8 _4 a H9 a+ }" A
if(hour==24)
/ ]4 C1 \# V* ~0 X
{
6 D; g1 Z4 p0 t7 w$ Y4 x5 t
hour=0;
5 h& r- ?3 Z* P: w; f
}
. h$ K/ ?4 |. C. f4 V
TH0=(65536-46083)/256; //赋初值
1 p" Y/ ]! S( H7 U
TL0=(65536-46083)%256;
& v; i' H s$ {+ O( `9 ]
}
作者:
ArthurGXH
时间:
2012-2-21 20:06
本帖最后由 ArthurGXH 于 2012-2-21 22:39 编辑
& L$ v0 Y) }' ~8 ^0 r3 u
( h/ h) U8 Y. o& x, R9 N
兄弟,我来说说你的问题:
3 y1 v/ F* a; E: u
displaysecond、displayminute、displayhour几个函数的参数请用指针吧。C语言的函数是传值的。比如:hour = 10; displayhour(hour) == displayhour(10)。是将当hour为10时,就将10传到displayhour函数。
1 q+ p) `' Z0 v
改成如下: 定义时: displaysecond(unsigned char *pucData)
+ n, l9 [* [$ T( s8 c- u
调用时这样:displaysecond(&second);
- v( p1 G! n# _; x$ `( q x3 V$ q
* e7 U7 _1 f, T
请好好学一下C语言吧。
# B. `3 b; Y7 T! l
# {5 J% J6 @# c- H# X' a$ H
还有几个问题:
1 `) A9 o2 \2 ^/ `5 r
1. 定时器,请用自动重装载的工作模式。程序在每次中断赋值会有误差,会积累啊。
* K9 `1 m8 _8 u/ b( }: a1 i3 L
2. 读按键的程序应该与显示的分开,不要写在显示里面。
( z p+ c* W/ c* f
3. 按键的去抖动不充分。
7 y; M/ J1 A) k" t) m |
4. 定义uchar 最好用typedef。
9 I6 a& H, ]6 h5 W0 Q' {. b8 R
8 ~4 t( O/ g& n+ e' x
. y0 v) l! W' Q4 X4 ~) g0 n
: S1 p" p8 y' ~( \+ k& F2 \
; Y' s1 ^; A7 l i& U: H, K
, j- ?! j5 _% h1 O' r- G5 y
作者:
szwsu
时间:
2012-3-3 10:05
谢谢你的建议,新手很多不足的地方。以后一定加强
作者:
阿宽
时间:
2012-5-10 12:48
我可以给你发一个 我自己写的 简单易懂 秒用发光二级管显示 分 时 用4为一体共阳极数码管显示
作者:
阿宽
时间:
2012-5-10 12:49
你看看吧,我是新来的 以后多多关照
Text1.c
2012-5-10 12:49 上传
点击文件名下载附件
下载积分: 威望 -5
1.54 KB, 下载次数: 42, 下载积分: 威望 -5
代码
作者:
wangting
时间:
2012-10-25 16:24
楼上的程序可以用
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2