|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
亲们 我想用定时器中段实现两个数码管显示00--59;烧好程序后,数码管就一直显示00,好像不计时;不知道问题出在哪,# f3 ^ b: e" B5 u% a2 n; h
程序如下:" W' i8 h: B! j0 a# A
#include<reg52.h>8 K* u( T0 j9 Y; Q4 c2 o+ k+ T
#define uchar unsigned char //定义uchar uint, {6 }* M9 x7 G* w% @4 U: Y' \
#define uint unsigned int
$ X. v! M* s1 j2 l Vsbit dula=P2^2; //定义数码管段显示
6 ]2 h5 S" S2 tsbit weila=P2^3; //定义数码管位显示
7 }$ n+ R6 `+ G# t6 _uchar code table[]={ //定义数码管显示从0--9/ V5 h# J) m6 R: x* w+ ~
0x3f,0x06,0x5b,7 J; Q6 h* N7 s0 c0 U1 K' c
0x4f,0x66,0x6d,; b; t, x- p, P# P% ~9 [0 E, X8 |
0x7d,0x07,0x7f,0x6f};
$ b5 B# w$ ^9 D6 n! z! X) O. j5 Q2 u1 A: ]. Y
void display(uchar,uchar); //声明数码管显示函数
5 b7 d0 @5 t( c* svoid delay(uint); //申明延时函数
( ]2 i1 @* n7 x; n8 u& S1 Quchar num,num1,shi,ge;7 y# ~( w! \$ J" G
void main() //主函数
: T t8 v& H( T1 f5 }; I0 u{/ V, O& J: [0 e$ J" o8 \# l4 |5 @6 z* n
TMOD=0X01; //定时方式选择, H4 K7 y9 w( p. x
TH0=(65536-45872)/256; //写定时初值) y7 h2 R+ O+ p4 R: _
TL0=(65536-45872)%256;
5 u- ^7 K8 l0 L EA=1; //开启总中断/ w* s: {) A! L' e. p; T
ET0=1; //开定时器0中断
W2 ~2 \* P6 h8 Y: s0 B. ~ TR0=1; //启动定时器0$ z: X" H, R1 O* d
while(1)9 @5 d" {$ w8 D# B
{
1 @2 @( r. a7 W display(shi,ge); //数码管显示函数: Y& I" m8 p5 H0 D/ w
}
) E& `- \$ \) ?; v}7 Z- m2 j: U9 U+ h- ]
/ p, w. ?6 h% L0 p& p- Uvoid display(uchar shi,uchar ge) //显示函数" j, f( {* |0 L5 t8 E
{
- \' s: ~+ [9 w2 p% r# j dula=1; //打开段选
$ T& Z, L0 s/ \) }! D P0=table[shi];
* w. U2 k0 b- l8 V/ g8 Z dula=0;
1 r1 i1 r/ |7 {. G$ a) @ P0=0xff; //重置P0 防止数码管乱码4 S5 f) Q- Q; q/ o. }0 Z
weila=1;
r8 k% r( Z5 Z/ a$ P/ r- v- o P0=0xfe;
' x+ r3 P, a' }: R& ] v weila=0;: \1 S) ~: p# T: c1 ~
delay(5);& v: n: W9 t6 L8 m2 [9 G
, C: D0 g Q: U( e
dula=1;1 r @, X2 T8 P& I& H
P0=table[ge];8 H: c9 F+ s M$ |% w0 m6 r
dula=0;! O6 a( K+ _! X( D8 m
P0=0xff;' m& j3 x5 P0 U8 R2 R% v
weila=1;
! X8 f9 x5 r# {; F/ L P0=0xfd;2 W$ ~8 \1 J3 G% S4 s
weila=0;
: ?! ?: h- O' W! L3 G" @ a6 _% k$ @3 O delay(5);
3 z) Y7 j* W; ^# |$ ~- ]}+ W6 Y6 o% L; _3 w) p8 b* C
; h7 }4 i. T: w! D3 I; X9 S
void delay(uint xms) //延时函数 延时xms ms
$ B0 r2 ?2 j, e1 p{. n4 ?6 r5 a4 j- Z( J* |3 ~5 c# F
uint i,j;
7 [6 Q! n+ j; w. x* q for(i=xms;i>0;i--)3 h1 F0 C( p" s! n1 \! |
for(j=110;j>0;j--);) b! d2 A9 P( t" j; t8 ], W
}. h- l: A k- [/ v
7 ?: r1 w9 @/ A, J1 u) L
void T0_Time() interrupt 3 //定时器0中断 定时方式1! D2 F, [7 e7 \& S& s
{6 ]% q$ z9 F* X/ s
TH0=(65536-45872)/256;' E3 l* @+ O" ~4 |4 | n- |- u+ A
TL0=(65536-45872)%256;& p9 y% p5 F* g$ x, X5 t
num1++;
; |# t* m- H k' A: q" U2 m0 }if(num1==20) //检测到1s了没有 / a# @0 h- [3 k
{
& ?5 I- j7 j$ i+ A num1=0;- |) l" h7 @7 A* `( h
num++;
7 Q) R( V+ M( }6 i if(num==60) //实现两个数码管从00--59
; Z+ {( b3 g) x num=0;4 y. H [+ W3 o* e# h6 {4 v5 k9 u
shi=num/10;! w% v {! t; e% A7 D( F! N
ge=num%10;
* m( `9 Z% q% r9 I }5 S7 x- Y0 I4 J/ F. Z, A
} |
|