|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
亲们 我想用定时器中段实现两个数码管显示00--59;烧好程序后,数码管就一直显示00,好像不计时;不知道问题出在哪,
0 q- B2 G9 q; X; M! E8 y% N- K# s( b程序如下:$ ^5 t/ J" q M, Z, B
#include<reg52.h>1 x1 U4 n5 c+ C7 i
#define uchar unsigned char //定义uchar uint
8 T: s) X! J1 z; i0 b' y" S6 Z' p) P#define uint unsigned int
" ?% a, J, d, b6 csbit dula=P2^2; //定义数码管段显示
3 [8 i6 x6 a* f7 Usbit weila=P2^3; //定义数码管位显示6 }1 S0 Y r/ Y' a' ^6 U7 Z. f2 U
uchar code table[]={ //定义数码管显示从0--9
' {. f6 ?4 |7 t! F0x3f,0x06,0x5b,
& Q {6 }- n: O1 d" B0x4f,0x66,0x6d,$ }6 D6 z! Q3 s# M: [: n: `; u
0x7d,0x07,0x7f,0x6f};
2 ]6 T! }: B0 ?3 F4 y6 [$ b( p0 ?8 z& t$ k% Q3 V3 b4 h, p
void display(uchar,uchar); //声明数码管显示函数% e% ?6 x+ f2 X7 R# u8 X# k: d. S
void delay(uint); //申明延时函数* ~/ Z% j; j- B1 @
uchar num,num1,shi,ge;
- ~4 P& \$ w9 [2 mvoid main() //主函数" ], w7 V7 }1 [* Y& }+ Y
{) |! E9 _. j9 a1 T% \, X
TMOD=0X01; //定时方式选择1 N1 c; D% W/ B0 N" i e. i
TH0=(65536-45872)/256; //写定时初值* y2 E9 i2 k: X* w8 _
TL0=(65536-45872)%256;& e, [* i$ S4 w/ m
EA=1; //开启总中断* S1 `+ c, Z! Z$ g! i/ ]
ET0=1; //开定时器0中断
* O% |2 F$ i5 `' K, h- X TR0=1; //启动定时器0$ O1 M; w) K. X
while(1)4 u# c7 q% w3 _% |7 j
{
9 p! v' l2 |( l( b; w% q# N: S- w' H display(shi,ge); //数码管显示函数( k& v8 L9 o% x. l6 _
}
$ a% a9 k$ U/ x. }! l} g0 p3 ^ \! Q( L8 P; O( h
0 Q* r0 R' `$ ]- S! F* x4 I! ~5 Uvoid display(uchar shi,uchar ge) //显示函数3 t- c# U1 u: G1 c$ h# w' C$ Y
{
3 l) v+ ~! _& s2 J# s" f6 B9 G* _; f dula=1; //打开段选
2 s4 j0 o+ J1 `7 d P0=table[shi];9 B6 \ c! _2 l5 p, j
dula=0;
; B6 Y& r( Z, d9 |* c$ ` P0=0xff; //重置P0 防止数码管乱码
2 Z4 m9 M1 Q5 n1 O8 }) l: {3 M weila=1;
- X5 ^1 g8 u$ E& W0 \ P0=0xfe;
: E: T% S1 X4 L0 S weila=0;, d5 R$ A! ~( f" Y+ W% p* S
delay(5);. h# c Y+ q: p1 F3 \! R# I
" J( o5 a" V( w! x5 w4 J- N$ u
dula=1;
0 f1 Y0 Q) P k' \ P0=table[ge];
! Z; j" ?3 Z, N" y k. H B: m2 d dula=0;
3 P4 v) s! U5 F+ @% q" j. C P0=0xff;
, _- k. P8 _% K( r weila=1;
/ D. N2 Q4 S- U2 \$ @" v6 [/ ?! z. ~ P0=0xfd;
1 n. w6 s, |' a1 n weila=0;) m# g4 e/ q m. V8 X1 W
delay(5);
; G# y% }$ L) A}2 O7 ]' W$ ^; b0 f; `: E& d5 h
7 o2 Q1 c$ l$ x9 ^2 u5 A* u
void delay(uint xms) //延时函数 延时xms ms) I4 x& _$ ]4 X6 ?+ e3 r; N
{
% W! N, q* ^6 }& H( T7 P8 K uint i,j;
/ [% f# s+ @$ \% z for(i=xms;i>0;i--)
, z/ N* f s0 A: u" R, a- \3 X4 j for(j=110;j>0;j--);
9 ?) `6 j- r2 n7 t2 D: m}
3 E* E4 Z: A9 w( q$ x5 c
' y n4 e4 Z" g+ Wvoid T0_Time() interrupt 3 //定时器0中断 定时方式1% H4 q5 s3 O- S, }
{
c8 Y. x& F) ?- w# [: uTH0=(65536-45872)/256;) s& Q; A( |. I( f2 k1 G
TL0=(65536-45872)%256;
& e' a* ?+ U# V0 Cnum1++;
( P8 J1 d* ]. O( Y* a5 W8 nif(num1==20) //检测到1s了没有 6 c$ g( |2 C' G& _9 B/ _) d* M
{: C5 E [; h: h
num1=0;# I* ^/ s, F$ [1 v d5 a( F8 @: p
num++;, G. i" v5 r+ _9 n) A' `" G! I0 I
if(num==60) //实现两个数码管从00--594 @6 J9 |& y9 q" o1 f# r) i
num=0;! L6 i. n i. b, X+ x- B3 m
shi=num/10;
v" J6 ?* l8 j% j# R ge=num%10;* F8 T- P* n; v1 X8 [, F
}* r5 E( B1 q0 O- E# |
} |
|