|
谢谢楼主.顺便请教个程序.我想用定时器中段实现两个数码管显示00--59;结果数码管一直显示00;不知道问题出在哪,0 `6 y- D2 B) o4 U) I+ e
程序如下:; S/ d: Y. C- m
#include<reg52.h># o) ~6 j) |% w2 I, d- D% H& N! ^
#define uchar unsigned char //定义uchar uint. k) k u9 F7 x% M7 ]: k( G
#define uint unsigned int. L% L, n" j6 M
sbit dula=P2^2; //定义数码管段显示) U2 s! {2 |$ a! X' |" ?8 \9 M* I/ `
sbit weila=P2^3; //定义数码管位显示
5 j" J- g. v' g; Xuchar code table[]={ //定义数码管显示从0--9
k |; c! k% _2 A) a4 Z6 N( ?0x3f,0x06,0x5b,
1 a2 c1 {0 b2 k, q K0 Z9 x0x4f,0x66,0x6d,
3 W4 W' V5 E, y4 q0x7d,0x07,0x7f,0x6f}; p7 z: h6 g# f# j9 O
& ~+ `8 ?- p! o9 F' p& Z0 Rvoid display(uchar,uchar); //声明数码管显示函数' Q+ N2 u i- E+ J
void delay(uint); //申明延时函数
+ R! r: q! e$ I9 U+ F4 i* wuchar num,num1,shi,ge;
$ p, u& w& W% \' c; o1 Ivoid main() //主函数% h6 x; z; ~" e3 o$ l/ `* p
{
7 x& {4 _$ v+ d( u$ R% X4 W TMOD=0X01; //定时方式选择
- w0 f4 X, {! P9 K) e( A$ |8 x5 i TH0=(65536-45872)/256; //写定时初值
: F1 R: ~& u+ `3 S' H, K TL0=(65536-45872)%256;
/ c3 { p% u7 R# g EA=1; //开启总中断( e& i5 L, A- E! X
ET0=1; //开定时器0中断* I. r) S$ R- q6 D& A( X( L5 A
TR0=1; //启动定时器0$ P2 }. O; K+ D( k& v/ y
while(1)
+ r3 a+ C# w+ }" { Q {# W# U& @/ t) I( `, s& E
display(shi,ge); //数码管显示函数$ b* m3 q; o" L7 @5 D. }! V' M
}
6 c/ N2 c7 i) n7 U2 d}2 [3 e; N2 X" p7 l8 ]2 e
# U! n" C" r9 \# u) m/ `void display(uchar shi,uchar ge) //显示函数
& `, y+ V$ g1 G# f- p{) W* G: X! A a0 `3 I' C/ r
dula=1; //打开段选1 m. r8 e0 v- x
P0=table[shi];
6 f) ^, l( E" x dula=0;, g- e% C0 Y2 D/ U% t7 m; w }
P0=0xff; //重置P0 防止数码管乱码
" }6 E% f1 b3 Q: i3 [* P8 M8 Z weila=1;2 p9 _: e z8 E0 u+ z1 U
P0=0xfe;# |" r, X$ s/ s; w
weila=0;3 m# t8 B8 W/ [4 Z6 c( `- |% D
delay(5);
: G* r0 _4 p) q3 l; W% v3 l 5 `8 Y$ u) j% |) l+ ?/ a5 |
dula=1;
I+ F R% i4 i# K1 ]% u9 l4 _ P0=table[ge];
; l7 A/ W! R! ]% \; W dula=0;
, i' L) u4 ^, {% X2 Z P0=0xff;
! f2 t5 p! d" s+ }$ w8 I$ Z( O weila=1;
2 K; q! {) y0 F+ C' \& q P0=0xfd;$ Y( ]& A# Q8 c) y. t" C$ y
weila=0;8 l, J: z- M! E2 Y# \5 `$ n' r) j" U
delay(5);
& y v2 n/ B4 E/ c, W* S}
' ^/ |3 R$ ]. W. B$ u6 P
; X% I* ? e: ]0 n1 Zvoid delay(uint xms) //延时函数 延时xms ms$ K2 R: T$ y7 W- ?
{
6 E+ T/ P$ d( e" D+ D uint i,j;+ b* i( l- T" t; Z
for(i=xms;i>0;i--). r( L. Q6 r6 V) V7 M3 M
for(j=110;j>0;j--);
, E4 B7 k8 ~0 x% G }. g, X: K" T1 C9 z
* _- x" \* I! T# t) D5 z# T
void T0_Time() interrupt 3 //定时器0中断 定时方式1
5 i) u3 \' V; L+ g& H) H6 p{7 u8 b6 H4 v; M
TH0=(65536-45872)/256;. B' i) G2 t* ^2 L0 P
TL0=(65536-45872)%256;4 ^; M7 T! b* M9 G' j" d: h' S
num1++;
9 K- j* t4 I$ ~3 G8 e) ^ if(num1==20) //检测到1s了没有 9 A, {( t0 b0 ~0 G
{
2 `2 h( g& k) y( h5 t num1=0;
2 X5 m+ x$ }8 e/ n2 X6 H5 K: u3 s num++;- k2 e+ L! q7 Y1 N, `; f9 T' i
if(num==60) //实现两个数码管从00--59
( B4 ^" b' s2 n, T) q: P [# t num=0;
) v* O" R+ z& Q% z/ V. e( _ shi=num/10;
: B4 u7 @& q: x- e J ge=num%10;! j+ w3 B7 n& n+ w/ ~
}
, x n0 ~5 T+ E* x" c} |
|