|
谢谢楼主.顺便请教个程序.我想用定时器中段实现两个数码管显示00--59;结果数码管一直显示00;不知道问题出在哪,
9 P5 F. s* O9 o程序如下:5 `# H' z& ~" t4 @8 r
#include<reg52.h>
- k! `% i8 ~" b3 K. c; U#define uchar unsigned char //定义uchar uint# k8 n! ?) L* `( n0 q
#define uint unsigned int. ~. }3 ]7 e" W( u3 ^
sbit dula=P2^2; //定义数码管段显示( }6 w. g5 N, f! h9 i# }
sbit weila=P2^3; //定义数码管位显示
4 \7 n; Z; I5 e/ A9 b8 Xuchar code table[]={ //定义数码管显示从0--9
! N8 i9 O! }1 @0 D E B4 t0x3f,0x06,0x5b,5 e# n5 Q1 d5 {' ^. w
0x4f,0x66,0x6d,* F2 I' e; o+ L
0x7d,0x07,0x7f,0x6f};
% N2 W& P" _8 \8 f4 @5 h' T% Z( ~2 [8 E2 w S2 I8 g
void display(uchar,uchar); //声明数码管显示函数' t* v7 ]$ {; l/ C/ f
void delay(uint); //申明延时函数4 e5 Q3 i; x+ R! O3 X
uchar num,num1,shi,ge;1 X1 R- F$ J( k6 z4 C
void main() //主函数
' E9 d1 {% u, q3 N/ B) n2 g{+ `1 M6 o7 V3 Z9 P' H% B: i
TMOD=0X01; //定时方式选择
5 W- O% i5 T) I7 s6 s8 ^ TH0=(65536-45872)/256; //写定时初值
1 b4 w) f( A1 x3 R+ U4 k TL0=(65536-45872)%256;4 s+ ~1 O @1 _- t
EA=1; //开启总中断
4 N9 X5 O9 _9 K/ Q ET0=1; //开定时器0中断
( U. S1 J- B- j0 U. `+ { TR0=1; //启动定时器05 E# G5 H: R) v5 _
while(1)
( ?+ A/ l) ]/ [+ p5 k$ u {
3 k! D/ J0 s" m3 D+ Z: j display(shi,ge); //数码管显示函数
# Q) V. T9 L( b r0 i$ Y& Y }
4 c: S( G/ U( i' T' x0 |( u}
( @0 b; p* m* v
/ H9 I5 k. B/ ^void display(uchar shi,uchar ge) //显示函数
% g. ` E; M' V0 `% B0 \{0 X8 E: o1 M. @
dula=1; //打开段选9 S8 T) l1 i: d! F
P0=table[shi];
) b2 f( b' X9 J- b- n dula=0;7 ]$ Q5 C5 |0 L& e3 ~
P0=0xff; //重置P0 防止数码管乱码
2 ?# F% \7 e$ ~9 x" I4 ` weila=1;& B" {% L; s7 U3 Z5 O8 u, o
P0=0xfe;9 H; h" D* Z1 \
weila=0;6 d: [0 c: @! b+ n
delay(5);
8 c# r0 R6 n& d$ ] J% g9 c2 v% A
& V6 v; I, r3 S dula=1;
4 ~2 u# Q# A! ] P0=table[ge];& W% b% n8 T2 g) i% W
dula=0;* B. B5 w9 n7 g. P
P0=0xff;
$ ]! v- P: h0 @ weila=1;
2 I# [8 ?8 g, v& r1 L4 L$ | P0=0xfd;7 N) n) l7 x) X1 b
weila=0;
0 n. I2 @# c8 w1 ?& N$ c C delay(5);1 E# b0 g8 }; O, W$ e6 @$ r
}
8 O3 O6 j U# |4 S& I
" @8 F9 f( W6 g9 Y, hvoid delay(uint xms) //延时函数 延时xms ms
5 X4 {, q( Y+ L{
! G7 ]: R; g' w" z8 o uint i,j;4 _7 Q2 ^! e( P U) @3 x
for(i=xms;i>0;i--)2 ]( ^* Y- h' m; r
for(j=110;j>0;j--);! j/ H& a+ c/ A0 y4 U
}' \. x Z% d6 n4 x y
4 E) }7 u, ]6 ?3 ~void T0_Time() interrupt 3 //定时器0中断 定时方式1
5 O* g2 o. n1 f. i2 B5 D{! Z. V) d7 b! i( o: b1 h, Y0 d
TH0=(65536-45872)/256;
' [' T! A( h) f3 {9 { TL0=(65536-45872)%256;
) {5 O k* @9 G4 S: x num1++;. P5 ~% y! w9 V
if(num1==20) //检测到1s了没有 9 b/ t: j5 V7 f" I, o
{
, ]: ~0 S. |) P3 W8 P) u+ o num1=0;
* G4 j- C4 w( r: m X' s num++;
3 G+ |: s" I2 M9 X3 D" u if(num==60) //实现两个数码管从00--59- o. F1 `& J, \; w
num=0;( p, p1 P$ v4 ^$ c
shi=num/10;
! N" K3 a+ T: P ge=num%10;
0 F9 W& H( L2 B5 c6 H, m3 P5 a }4 ^0 }9 a: x# f" F/ P# W
} |
|