|
谢谢楼主.顺便请教个程序.我想用定时器中段实现两个数码管显示00--59;结果数码管一直显示00;不知道问题出在哪,
6 A0 ?+ }6 a2 o( ?程序如下:: A. H$ I. S5 {, H
#include<reg52.h>) f& Q( Q7 \' r5 m8 e7 G' y
#define uchar unsigned char //定义uchar uint
- g* l3 J: p! G" _# ?, q#define uint unsigned int
f [1 a2 d6 D+ L( u1 U/ h P8 esbit dula=P2^2; //定义数码管段显示8 d' k+ I- H4 _" ]8 _& u
sbit weila=P2^3; //定义数码管位显示
) M4 b" _7 k. e) Buchar code table[]={ //定义数码管显示从0--9
. P3 K7 P$ b! y; G0x3f,0x06,0x5b,
' I+ j+ b5 c7 W6 ]- H+ ?- D, f0x4f,0x66,0x6d,
6 M0 H: @% y: ]; ~/ F1 ~0x7d,0x07,0x7f,0x6f};
. |- T2 Y/ K! I7 W T- L7 Z( d6 T) L; t9 j. r5 V
void display(uchar,uchar); //声明数码管显示函数4 i8 \ @& K9 U& z X# X
void delay(uint); //申明延时函数
0 B; e) D. d! A: k. ]uchar num,num1,shi,ge;
6 a* {+ H8 C- p' G+ g: ^) mvoid main() //主函数# E# f+ y7 z: k& k2 Z- f5 `
{
3 ^9 _0 B8 q, F8 ^# G- w6 @ TMOD=0X01; //定时方式选择
3 I$ x# h% t! E TH0=(65536-45872)/256; //写定时初值5 M4 l3 e# Y' B, f/ S! Q
TL0=(65536-45872)%256;1 I+ }& \ b7 |
EA=1; //开启总中断- ]% ~* z6 S# h2 B' h) B
ET0=1; //开定时器0中断
% G8 |. y4 m1 A6 N TR0=1; //启动定时器0( H" ?2 {' t B: {; j
while(1)
r( C/ {& Z0 _6 L; t { n. u; [4 N1 ]0 M3 G
display(shi,ge); //数码管显示函数
# b' Q W; f2 \. u8 P# P }( P( t4 U) X. `! a6 Z0 o# t
}
! L# F8 H5 b, i" T9 R& K6 `$ t$ l- F P" @- z
void display(uchar shi,uchar ge) //显示函数 l5 Z! M% @% P$ g( C8 @. W6 {
{
J8 f N c2 M/ m dula=1; //打开段选. r; Q- }3 P( g$ Y& Y$ {
P0=table[shi];
' g& W8 Q, C4 T+ b6 u dula=0;% a3 I0 C9 D- [% y5 z
P0=0xff; //重置P0 防止数码管乱码+ e7 r" y! E0 O; {
weila=1;
6 X6 X& H M, h4 _! U P0=0xfe; C% b6 E- P0 k! L9 [1 J
weila=0;: I4 T7 u1 T( j) a1 o* _/ d# ^
delay(5);5 b4 U/ A% Q8 |8 Q
d, v4 N: e6 Y, i% R
dula=1;
' _! \: \* p/ O P0=table[ge];; L" x: I5 N6 k- J* M9 h* x2 W. c
dula=0;1 k4 V/ G! {$ S7 P, G, S+ {9 J, a
P0=0xff;7 a" Q, n* N+ y, v0 K
weila=1;, x' }' q* v: X9 L. @
P0=0xfd;
9 `: b2 f" W8 Y5 b) m$ c weila=0;/ i% ^* L8 u5 O. Z) f. ?3 A
delay(5);3 R1 r8 x- o7 ~
}1 u' W! R" P, P
2 F) Y4 u9 t D2 a. a# Nvoid delay(uint xms) //延时函数 延时xms ms
3 @8 k; c4 g Q5 i{, {! w+ _) h e5 p. [9 r
uint i,j;; i$ D- E; p3 I5 _8 Q$ ]
for(i=xms;i>0;i--) T: d1 |2 A1 p3 X2 p. U
for(j=110;j>0;j--);
l9 N( b* o/ H7 {) I, D8 Y }
; P4 F9 U, l& r" S8 ]* H# V: ]& E6 n( t* t
void T0_Time() interrupt 3 //定时器0中断 定时方式1
3 B% S9 ^& Y, e{( c E8 _2 V4 i( j
TH0=(65536-45872)/256;* T- C8 P$ w: d
TL0=(65536-45872)%256;
5 l0 ~4 N: {7 b; s& v5 V num1++;
: I$ w& t. ^1 T! i if(num1==20) //检测到1s了没有
0 J( R+ d0 [; ?, @! @) N {
( z9 k1 O% I% U9 d4 S# Q: b2 C num1=0;7 `1 I* t' P+ {8 f$ r8 S' `
num++;
& ?7 S5 R; x4 b9 l" p \ if(num==60) //实现两个数码管从00--59
+ n' R" f7 ~8 } num=0;+ M6 V0 l1 R: R8 I& m5 n
shi=num/10;( V3 ~3 O6 W1 h
ge=num%10;
! \ ? H; Y2 t0 E }+ q/ k6 _! o8 `+ h% L2 I
} |
|