|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
亲们 我想用定时器中段实现两个数码管显示00--59;烧好程序后,数码管就一直显示00,好像不计时;不知道问题出在哪,2 V; E8 ?, \: s: L- G) Y9 ~, I/ u
程序如下:
' E" [& ~2 O, w6 L#include<reg52.h>
8 B8 F5 w) m/ S" I) h, B5 L#define uchar unsigned char //定义uchar uint
# n' }. b3 B$ d ]: x; d! o2 w#define uint unsigned int
9 n2 V) P: C7 P2 R- B, Z7 Qsbit dula=P2^2; //定义数码管段显示
7 D% Y3 U0 r, I$ B7 a H+ b+ ^sbit weila=P2^3; //定义数码管位显示
_+ ^, u% P9 a5 n3 y# Yuchar code table[]={ //定义数码管显示从0--9
; v, K; s, Y% \* ? w9 g: F0x3f,0x06,0x5b,
6 }$ Y; k2 A$ k6 i( p0x4f,0x66,0x6d,1 Q8 i% y# ?9 F
0x7d,0x07,0x7f,0x6f};9 e& G, B, a- \, m; d
& c7 a% y' W! v& C; ?9 W3 [) X* G9 a+ Rvoid display(uchar,uchar); //声明数码管显示函数
* v) B0 U( C: ]% d! |: [void delay(uint); //申明延时函数
" j0 X+ v1 @0 C& b+ z0 S. @uchar num,num1,shi,ge;7 d- y# J% W. a7 j: b" Y+ c
void main() //主函数
: m* P. ]/ ]% j `% q! y{
7 Q/ [) F3 k6 c. r; R TMOD=0X01; //定时方式选择" b% ?6 L/ V( x. q
TH0=(65536-45872)/256; //写定时初值! y9 w. P0 ?1 g! f
TL0=(65536-45872)%256;6 x* D4 D7 D5 G2 W' X/ l, }8 |
EA=1; //开启总中断5 E9 K4 V& F3 C$ v* J
ET0=1; //开定时器0中断
1 U" j6 \- J0 c3 Z4 I2 A TR0=1; //启动定时器0
" _* t0 \% o M7 ] while(1)
% B8 F4 C, X# s1 Z9 g; v1 w, j {; G; F& V/ K, Z- G! w# P
display(shi,ge); //数码管显示函数
4 j, z$ Y5 c. @* q; s3 B }9 J6 M# j, n& i' C. H
}- @* o* l# f* v* e/ J% s; I% P
% D2 N3 k: H. X; c* d
void display(uchar shi,uchar ge) //显示函数
% ]$ T" D3 @6 s0 ^: M4 a5 [' V{, j" n: X* n- i9 p
dula=1; //打开段选8 w5 |5 G9 N. t- G: m( Y
P0=table[shi];/ c* D6 \9 i' _ s
dula=0;3 ~, j2 Y, { b! Q x
P0=0xff; //重置P0 防止数码管乱码
- e, }7 S8 \7 W0 g5 f" R- ~& G weila=1;
/ @5 \7 G6 ?1 u; G) k# }2 ^/ b P0=0xfe;3 y5 ` l {, l' j8 D* [& g6 @
weila=0;! y9 J/ d' o: b$ j
delay(5);0 z: q$ c) U W* Y
# e- A7 v. x' B/ Q; O+ F
dula=1;4 [# K) R1 P6 i9 n) v( }3 f- R6 M
P0=table[ge];
. e9 w9 M2 ]3 \ dula=0;# l7 q( J% \2 Q6 ^: K
P0=0xff;
) c" q8 C% X! H& A0 m9 [! P0 k9 v weila=1;' G0 E3 _# H9 k
P0=0xfd;
' c' ^' r7 N# J! s) y weila=0;% `& x1 l" J( ?5 b2 J
delay(5);5 N. e4 T& |, _3 j- N1 b( a
}' ?/ g7 B. b! S$ P+ ?
7 ]& t) X, A3 F+ I2 I! p% R6 m
void delay(uint xms) //延时函数 延时xms ms' K5 c# m: }3 t" o
{! _1 E4 v5 z) }3 I# s; @
uint i,j;1 E7 z: n( d* y/ C
for(i=xms;i>0;i--); _8 h+ k; z- l2 C# \+ _& B: g
for(j=110;j>0;j--);7 G2 R \# ?0 N4 W% E
}: C5 E. e- Z( a5 m/ v! k
( m) x0 _7 K% D$ |: L j+ W8 p- a
void T0_Time() interrupt 3 //定时器0中断 定时方式1
2 j5 f! @& ], O& u5 H% T, a( |. J# l{4 X/ t! \' o# `+ c$ l
TH0=(65536-45872)/256;
# \+ ~/ r ^% i" a: J0 g) T, uTL0=(65536-45872)%256;; q& ?3 }! ^, ?7 d9 Z
num1++;$ H5 i7 b8 d0 T0 q" W! i2 V
if(num1==20) //检测到1s了没有 9 c) ^$ U5 Y$ B- m9 l1 I. W4 h
{
5 T* l4 K @8 z* {! m num1=0;/ ~7 ^, X' r0 y3 `
num++;. A6 g' ^2 f' Y, g% _- ?
if(num==60) //实现两个数码管从00--59
' |1 B; e' f& }8 l num=0;: ]& }" z f6 E% O/ |0 }6 i
shi=num/10;
2 T- J% M- }+ _/ P ge=num%10;' Q+ E! B a6 [6 L7 z U6 ? [
}
6 g) o3 j1 Z3 R) Q2 M, ~} |
|