|
谢谢楼主.顺便请教个程序.我想用定时器中段实现两个数码管显示00--59;结果数码管一直显示00;不知道问题出在哪,
6 K! m" {- s' I ?6 q( B9 @3 m1 O程序如下:2 W$ G: M& W4 I' j
#include<reg52.h>( e; ]4 q/ w9 ?" J r% V
#define uchar unsigned char //定义uchar uint
2 t3 Q$ ~$ a( U7 B#define uint unsigned int& J2 n1 H. ~4 C% E, J
sbit dula=P2^2; //定义数码管段显示2 J- [1 z$ s: D1 n5 L+ l; L
sbit weila=P2^3; //定义数码管位显示% a5 ?7 l' n. A4 E! u. R
uchar code table[]={ //定义数码管显示从0--9
6 }" A5 r, {% J/ \! c0 B" _5 |0x3f,0x06,0x5b,' Z& ]* Y8 j2 V5 _; S/ ^
0x4f,0x66,0x6d,
( D. O6 m; d& K7 B0x7d,0x07,0x7f,0x6f};
* u% C g% Z, o; @
- N/ @( R/ o7 x( a- b( mvoid display(uchar,uchar); //声明数码管显示函数& ?; V: a8 @4 s+ m0 u2 v- I' O
void delay(uint); //申明延时函数
$ N0 G9 e( }' R7 H6 buchar num,num1,shi,ge;" y5 h8 d3 A' O
void main() //主函数8 U) \! ]. Z' g) n- ]2 u
{# p7 v0 e$ F. | @: y
TMOD=0X01; //定时方式选择3 c2 C( D& g( r- H& q
TH0=(65536-45872)/256; //写定时初值" }$ @$ e; Q V9 d3 Q9 u
TL0=(65536-45872)%256;8 O2 X% p! c, u& b) Q2 t
EA=1; //开启总中断
, Y# Z: K8 |( M+ G" `$ a ET0=1; //开定时器0中断
, Y7 y: J( ^0 W- @) H' K) L TR0=1; //启动定时器0 ~3 I: M, U, u7 Q: _* M" {
while(1). A5 c5 x; B& A) H; c C
{, [0 [' s; t1 N+ T% b
display(shi,ge); //数码管显示函数
; e% G) g$ W" R: K }
1 q0 |" g+ i, `}
; e; l$ o8 A0 @- k
. G) r$ R& D9 }/ w3 Pvoid display(uchar shi,uchar ge) //显示函数
/ |! x' b9 H7 J7 T0 n9 ~{" d8 w4 \9 d |* ~* r
dula=1; //打开段选
2 D6 \" r) O/ d+ k7 |, d/ ~. R/ Y P0=table[shi];7 F5 d$ g5 M7 b/ r
dula=0;$ c) h( E: [& ^+ N
P0=0xff; //重置P0 防止数码管乱码
5 @- t" h' R% ? weila=1;0 \9 ~ W `$ }/ F7 F
P0=0xfe;. }" A3 V: B8 T5 z. s- a* P1 \
weila=0;; s( t% a2 x0 E1 c+ }
delay(5);
5 S( |2 T2 n7 y6 ?7 _1 H 7 e* ]# l4 }# |) a- @. W; E
dula=1;! u' g" ?9 B& B0 a l8 l2 V
P0=table[ge];0 x( S( `1 L2 A3 }/ R
dula=0;
0 I7 p! {. R; X2 k X. O# z; P P0=0xff;
. a9 D9 P% U& ] weila=1;! R4 S% {: ]& ]0 P0 H0 i' ?- C
P0=0xfd;+ u/ p `; q+ ]$ Z% @: J" U
weila=0;' w( B5 E" y7 x& s( h4 k& S
delay(5);: ]9 R F3 R+ e7 K4 o8 m# p
} Y& ^3 Z( A% {- T" N
- i2 J) d3 G0 E
void delay(uint xms) //延时函数 延时xms ms
. j8 {' H! R7 p4 m{
: L6 F5 Q# t: O6 j6 d y6 t uint i,j; T! j; P+ a* U1 o$ z2 b
for(i=xms;i>0;i--)( Y7 D8 D1 B6 X, ? n
for(j=110;j>0;j--);
- E# E) j7 e* i2 h9 [ }
9 V- ]( N4 [+ X3 X
8 d- {( t2 q) q0 @6 U( Y7 _void T0_Time() interrupt 3 //定时器0中断 定时方式1. p' R% n" x' ~4 M( E8 s) U
{5 N3 L$ n# h4 {( F: u9 B
TH0=(65536-45872)/256;
+ C4 U1 s' G! ^3 X, h TL0=(65536-45872)%256;) A" `9 X$ @- i C7 v' C
num1++;+ p5 t3 D# w7 g0 Z( ]+ m
if(num1==20) //检测到1s了没有 + K* |8 ~2 O5 C' I$ B; @
{6 _4 P" ]4 P/ ^8 w G1 |
num1=0;
' K7 ?' c& [1 h# Z num++;5 s# t( i7 M4 h% q) ^
if(num==60) //实现两个数码管从00--59
7 Y: O G, W4 a num=0;: K5 i& h" e5 T7 s
shi=num/10;6 z; @4 L/ F+ \0 x3 s' R! O5 c
ge=num%10;
- y( V% I1 \2 j5 V; c" Q7 n }+ F% V. c! h2 s+ y0 n, S6 N9 O
} |
|