|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
亲们 我想用定时器中段实现两个数码管显示00--59;烧好程序后,数码管就一直显示00,好像不计时;不知道问题出在哪,
: k6 q; J* f& ?( ]% R程序如下:8 Y" e7 e( U0 ]
#include<reg52.h>. c& c' M6 w# ~9 a' }) B9 @
#define uchar unsigned char //定义uchar uint: G* C8 p! h( r
#define uint unsigned int
' {1 |7 j+ D7 ]6 h" k9 a5 usbit dula=P2^2; //定义数码管段显示
S/ ]4 p) n$ _+ X" [sbit weila=P2^3; //定义数码管位显示
0 D% z" \1 q( q# duchar code table[]={ //定义数码管显示从0--9
1 p8 Y" s% D) }# ~0x3f,0x06,0x5b,
0 [- N1 o. ~ q# P% k% K( D/ F$ r6 d0x4f,0x66,0x6d,
- S- p; w4 @! s& Q2 _1 u! X; L% [5 Q0x7d,0x07,0x7f,0x6f};$ Y5 f" u( I/ E/ C# ?1 }' X/ z
3 k* U; [8 b9 D* z" B) kvoid display(uchar,uchar); //声明数码管显示函数
1 z2 F/ j* ?/ A% F6 Z8 Evoid delay(uint); //申明延时函数5 O4 p( b. Q* O2 i# e* k
uchar num,num1,shi,ge;
0 d! z0 k8 [" V/ ^6 }) y! cvoid main() //主函数9 @/ d- }3 M0 r5 P
{
. x" J+ u/ r: M5 p. u* t6 A8 y& I5 ] TMOD=0X01; //定时方式选择
. W$ d- A$ {; c* C" ] TH0=(65536-45872)/256; //写定时初值7 T$ G. r4 K& _& N! A
TL0=(65536-45872)%256;
% _- G; V- e; R# L1 B5 m EA=1; //开启总中断7 n* K6 L- |$ j$ C" x5 ]
ET0=1; //开定时器0中断
: @' S& g* k% T, X TR0=1; //启动定时器0
) y! _- C) a2 K- R while(1)/ W9 N9 S3 s w' M
{% Q1 r2 x1 r1 i
display(shi,ge); //数码管显示函数
2 m# v5 s, F( U! l. {" g% H! v }, M( ?: }" E9 _& c- u/ G. p# u
}
8 T$ Y# p1 \3 }( ~+ H1 a2 K: E$ o4 j& H
void display(uchar shi,uchar ge) //显示函数
8 a! O# P1 T. H2 W) t{8 J% x- w7 c" I, s; [' A5 ?1 U- x
dula=1; //打开段选1 M6 e2 Q h1 X" O9 @
P0=table[shi];* Q" A# u$ f+ s: A& J: Z
dula=0;
4 H6 N/ U' o& K0 n0 P! g8 J P0=0xff; //重置P0 防止数码管乱码
$ h) C' N0 `: }. v+ B weila=1;
# o" g1 v+ r! x& ?+ y4 y P0=0xfe;
# v2 N1 `5 \8 j0 \2 x* |# H weila=0;& P, t4 w1 G: s/ T
delay(5);( s' Y1 U! U7 V
$ H* [0 p9 y0 Y; a7 N/ V1 V/ @ dula=1;3 Q) H6 I2 x7 V) I, `2 j& P
P0=table[ge];
; w" @ O' l8 q5 i dula=0;
) k% @! ]( A7 ~1 c% m P0=0xff;3 D* ^9 X& d& z, p& g0 V3 t0 y
weila=1;
1 i9 O' H& x2 y, D/ K; ~ P0=0xfd;$ {, K% ], P' z- D! ?
weila=0;
. c y9 H8 k. G$ a delay(5);) h: b9 z' _5 I: M/ e* F1 i
}+ @# O [3 M* ]( B
' N3 Y# A: G/ w+ x" ]
void delay(uint xms) //延时函数 延时xms ms
$ J/ u- W ~9 ^{
2 p& T# k* A# [; Z uint i,j;
; h* d' |" g% s" E% L t" g for(i=xms;i>0;i--)0 \2 r& s' |; p
for(j=110;j>0;j--);% K! V# k/ w8 t( K c
}
0 k) ~% n5 I1 @% q8 E8 q/ ^! }" l* b; `
void T0_Time() interrupt 3 //定时器0中断 定时方式1 W: s) b" _7 \1 @- n4 V1 w' H
{8 ^5 X: t; y% f- S/ K& }& X
TH0=(65536-45872)/256;
# y' t/ y+ @3 Y0 `' Q4 u9 KTL0=(65536-45872)%256;
/ D2 B* c- D. [6 V, ?" o2 x+ Z3 inum1++;
0 e9 a" p2 W+ S+ P/ ]5 f- D7 M9 Iif(num1==20) //检测到1s了没有 ' w. x4 Z6 \% R6 i7 U# t
{
7 x* \6 f: b) D) b0 r" T num1=0;
6 t5 ~: B+ o7 h/ @4 A num++;
# \. ]& E8 y% y. T8 E if(num==60) //实现两个数码管从00--59
. C _$ t. e6 t2 _ num=0;
' Y r" z1 p0 @+ A( j' t shi=num/10;
' o4 y; N% G; i: v& O ge=num%10;9 G- @* n2 s' t2 Y" h3 S2 k% }
}" e% E8 }: u! f# Q) i3 W
} |
|