|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
亲们 我想用定时器中段实现两个数码管显示00--59;烧好程序后,数码管就一直显示00,好像不计时;不知道问题出在哪,7 E7 R0 Q- |/ `- L
程序如下:. |) V! l3 {; O" m$ \5 @
#include<reg52.h>
4 y8 r( R) O$ Y7 _$ }, Y#define uchar unsigned char //定义uchar uint
0 X9 u5 w' F. j6 k0 H#define uint unsigned int
* X+ N* ^& L3 Q6 X& V4 l4 {2 b" k4 v7 Lsbit dula=P2^2; //定义数码管段显示: Z& H8 L/ u- r# v
sbit weila=P2^3; //定义数码管位显示 y7 b# g% m+ n! Z2 C: I3 w
uchar code table[]={ //定义数码管显示从0--9
j9 T3 x. {" b( Q2 M4 _- Y0x3f,0x06,0x5b,* Q1 Q& N" ?' _7 S$ \
0x4f,0x66,0x6d,( {& J. T2 m- O+ F+ s% m; D
0x7d,0x07,0x7f,0x6f};
! h' [" K% ~ U! j1 [
6 q. G0 C# S0 I: bvoid display(uchar,uchar); //声明数码管显示函数2 L) F# f8 j+ e8 S
void delay(uint); //申明延时函数7 C% \& e* |; z8 a8 N
uchar num,num1,shi,ge;
# |+ g, p: D/ G: C |& [void main() //主函数: z) D4 ]2 V' E
{, x7 L/ }% C, l' C9 `0 d
TMOD=0X01; //定时方式选择8 N9 P) k+ P8 W2 }+ p4 X- w
TH0=(65536-45872)/256; //写定时初值- t& o9 e1 U: Z
TL0=(65536-45872)%256;; N# W) ^( O3 n) G6 \3 \& W4 c! T
EA=1; //开启总中断
5 L: G# E9 l% \" _ ET0=1; //开定时器0中断* A9 ?4 [! K3 w9 q
TR0=1; //启动定时器09 p. t0 b) T0 G( {
while(1)
1 v' @% G# U' X" D {3 M2 d3 |' F( c" w! _1 @
display(shi,ge); //数码管显示函数
9 {/ ]5 a; T5 A( O9 `2 D }' S. R0 j; n9 J- j9 E4 I2 R7 a* n g
}
1 I! w$ Y7 `% M, b. ?& g1 {4 i# i( d' r, u R0 ?( y4 F1 A
void display(uchar shi,uchar ge) //显示函数
) |3 b8 g3 ?/ N% N) r' t" U! M{
5 V* [0 D. n" g/ h) o7 N; l! W dula=1; //打开段选
: B( p1 R) w4 Y P0=table[shi];
9 H: |% ?4 e, y: C' ` dula=0;
3 T0 I3 s1 J! |# L" t' F, d P0=0xff; //重置P0 防止数码管乱码9 m4 C; S+ K) d' u# X; x1 q5 ?
weila=1;
& q' a+ d& P! r. F P0=0xfe;
" z; s7 @# Q4 c U7 E7 A1 } weila=0;, [& Q, o; N; T6 h) l2 h
delay(5);
, Z; P! I& _; Z# v/ I " D8 ]" ]0 k# W+ e* ~( x
dula=1;/ R6 n* w. x j' ~" d$ i% w7 o
P0=table[ge];
2 q2 c! z9 w L! {0 N# ^% H dula=0;- o- `2 w# ?/ \* X* ?1 z
P0=0xff; c! [5 p- l& w" n/ G, p- e, M9 H, C
weila=1;3 B7 C4 d, ]8 X; `( n5 a
P0=0xfd;' f3 `( W) K8 H% { a' T, }9 C
weila=0;- g) @$ F, s2 { F1 _: z
delay(5);
2 X& b- d& _# q( e. {}
+ e3 U: ], W: _4 h# e, K) T
- C) K2 K% O. m- E$ P, k/ l7 {void delay(uint xms) //延时函数 延时xms ms
: h$ q. E2 \9 Z ~{9 p4 e" x$ Q' z* v5 n
uint i,j;
4 [' ]0 A' K Z* T8 F) E/ U% s for(i=xms;i>0;i--)
- q+ p! ?4 ?- \9 x2 a; s for(j=110;j>0;j--);
1 @4 g E$ U; {8 a}
' C! |0 G- F; j: `" @4 c6 T( `: l* D
void T0_Time() interrupt 3 //定时器0中断 定时方式13 h: `- W& e) o$ i" T' c$ h9 L, e
{
' Z! N, E. Z& `. }! ^2 G- I& kTH0=(65536-45872)/256;
* p# U; Y" E* j0 n: [- QTL0=(65536-45872)%256;
! G' E1 i2 v4 H( Z: G+ A" Unum1++; c4 ], `+ L; v. M5 P# c7 H+ Z8 j
if(num1==20) //检测到1s了没有
# Z. m* a5 |) r& x {
: c, N3 F9 M& E# o" B: R. } num1=0;
; ^* u& t6 N: J% e, ^8 M num++;; `; h3 v B# c4 y' d9 G3 A: F/ w
if(num==60) //实现两个数码管从00--59/ x4 m/ L0 i0 C7 [# j0 l# m* ~6 [. m. @
num=0;7 j" `+ I& k6 R! u% b2 k
shi=num/10;) f' _! Q: A7 `7 @' b
ge=num%10;
1 N- {% Z5 H+ o0 d) v9 T, y }- w+ s1 U% Q* ]% ~. {* P; Y
} |
|