|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
亲们 我想用定时器中段实现两个数码管显示00--59;烧好程序后,数码管就一直显示00,好像不计时;不知道问题出在哪,* `3 q" v/ x2 |
程序如下:& O8 p4 G# ^1 U, C5 h" W
#include<reg52.h>* d, @4 l* v2 x$ }: i/ ^3 J/ z) a
#define uchar unsigned char //定义uchar uint6 \/ ]) T# x# L
#define uint unsigned int
, Z+ J4 l+ j/ ?5 \$ t) V7 T: Qsbit dula=P2^2; //定义数码管段显示
6 i3 s. p/ V7 u" p C1 [0 X5 `. |sbit weila=P2^3; //定义数码管位显示
$ }" ]9 E$ [" {, e8 yuchar code table[]={ //定义数码管显示从0--9- p5 C! h& Q) W
0x3f,0x06,0x5b,/ D2 b% c; z; v& n2 A+ r2 ~
0x4f,0x66,0x6d,
' i) J o2 @6 C0x7d,0x07,0x7f,0x6f};
. z* q$ b) l i; E; W' Q0 y4 Y1 u$ i7 }! q
void display(uchar,uchar); //声明数码管显示函数
8 d' w3 W+ i1 A# S( k" O( Fvoid delay(uint); //申明延时函数
* b3 m: T$ S# H$ a" r+ v3 q# y/ Kuchar num,num1,shi,ge;0 \+ I( S, f7 q8 S$ w, ?5 X
void main() //主函数
2 A7 J5 N- Y+ U% S" d/ Y9 @ u{
, P, v# I; o5 E TMOD=0X01; //定时方式选择
: z9 p. h( v* W TH0=(65536-45872)/256; //写定时初值4 H( W( G" ~6 ^
TL0=(65536-45872)%256;
6 v0 g7 D& D2 i6 \ EA=1; //开启总中断
* h3 K4 P" `0 i$ R ET0=1; //开定时器0中断2 P; G* e; @' m- j1 C
TR0=1; //启动定时器0
9 j, [ \+ L" L while(1)
4 u# ^# t8 {; q5 Q! ?/ l8 f0 x+ S {
( n1 P2 z- R, D: Y5 v- X display(shi,ge); //数码管显示函数
. X2 l+ _% A2 [7 ]- _1 Z" Y }0 B) {9 f/ X. Q/ ~: I) X3 \7 X
}7 @" |) d4 ]! k2 d
- D% R5 @5 \* y
void display(uchar shi,uchar ge) //显示函数
/ L" v* D* Q$ i, U{
0 L/ s0 i y/ z0 j- y5 _ dula=1; //打开段选, V/ j1 m( }" ], }
P0=table[shi];
, w- o a8 U9 f3 J, v( f$ ^ dula=0; }$ J7 o3 }% t3 Z8 k1 X* h
P0=0xff; //重置P0 防止数码管乱码
' l0 S# S1 `* v$ D, a8 Q weila=1;. U' F8 _* b; [: c
P0=0xfe;& u7 @& ~/ p( P+ j/ [7 Q4 r% r: {
weila=0;# p9 N G6 b' q
delay(5);* E [0 o" T0 U6 k$ V% h$ g" G9 l
: {4 W7 ~. D) P$ S/ d. w
dula=1;9 C9 r# V, X, }
P0=table[ge];/ u$ D7 ^) ]; [# ]
dula=0;
8 V* l1 c# F3 |) o5 H P0=0xff;
7 M5 h0 r& X/ n; L; P \ weila=1;
# e' ]0 ?3 A, s( L" R+ p; r% {* O P0=0xfd;$ G4 k5 {) y- y
weila=0;2 V' c% _) x' @8 E
delay(5);
3 ]3 y$ Y! A' f1 u0 t3 |}
5 i, D" r% l) \7 v- U) l9 Y0 N
+ o# I; Q0 }2 C8 ~2 Q& b$ ?void delay(uint xms) //延时函数 延时xms ms
7 f) `% o" O' f- z{1 L- \( C5 N b6 Y! d
uint i,j;
0 ?- D8 \. f9 | for(i=xms;i>0;i--)
' O8 P. S, B3 B# X% e3 f) j! ] D" x for(j=110;j>0;j--);
2 i1 Q0 K6 w/ |9 |$ w}
& r# Y! k' Z' {8 H" x1 ^) r) I; n% V
void T0_Time() interrupt 3 //定时器0中断 定时方式1 y5 q; V. U. ^6 x: d. o
{/ ], V. K7 s4 m* N$ ]* ~
TH0=(65536-45872)/256;4 \) o; }! w3 J$ |
TL0=(65536-45872)%256;% v$ D/ n3 v1 n2 c8 W& D
num1++;8 o* d2 e g9 {
if(num1==20) //检测到1s了没有
" I. i2 [, B/ X {
; G1 i0 A3 @4 \: \0 } num1=0;4 J) ^2 e# p, I
num++;
8 J) Q# A D' Y6 k$ T# q% k! i! K- B$ d if(num==60) //实现两个数码管从00--59/ R/ S! w, I. i
num=0;% w. k k. \+ a; D$ d% J
shi=num/10;: o# {7 s. O* c5 }) L
ge=num%10;
8 a% X( Y$ [8 D) q) d& o* ?. C }7 B& t1 ]7 M6 h/ M. x* N
} |
|