|
谢谢楼主.顺便请教个程序.我想用定时器中段实现两个数码管显示00--59;结果数码管一直显示00;不知道问题出在哪,
2 u/ N: t: x6 S2 U0 Y程序如下:
# a8 Y8 }; M* @! t#include<reg52.h>7 l7 |+ W5 c7 j( W0 j" I. A
#define uchar unsigned char //定义uchar uint" X2 h7 R- B6 K6 Z
#define uint unsigned int
( R" w* b/ o; P7 \2 psbit dula=P2^2; //定义数码管段显示
+ {: ^4 f& Z3 r' S2 C/ H4 ?sbit weila=P2^3; //定义数码管位显示
4 W6 t8 @ d% `# V$ e3 v% I$ Xuchar code table[]={ //定义数码管显示从0--95 Z9 G e2 e( i W& X# V+ j+ ~6 b
0x3f,0x06,0x5b,4 i3 K9 s1 U2 B& G$ ^; q6 q( G
0x4f,0x66,0x6d,8 N8 k4 o& J* r: S. @ f% T: G
0x7d,0x07,0x7f,0x6f};5 I( T5 [/ R5 }0 }9 j- Z
0 \4 @+ A# A% q* _void display(uchar,uchar); //声明数码管显示函数8 k4 s H* m$ W) @% ?4 F
void delay(uint); //申明延时函数
7 p& n4 Z* c( j; L4 |: S1 ?" tuchar num,num1,shi,ge;! j' F+ F/ ~. o$ `: ]% O3 w9 o# P+ y3 v
void main() //主函数
- M4 h4 f- h& w" R% a8 _. @7 v{" Y0 b) g) \5 o7 \2 n, x& W
TMOD=0X01; //定时方式选择: h% ]! ]* W7 l/ {
TH0=(65536-45872)/256; //写定时初值
8 C! _9 }) k: i, f0 n TL0=(65536-45872)%256;: a: n) ^* y2 T* q' ~
EA=1; //开启总中断
) P5 f1 d5 h0 y8 h& V( T2 G# v: r) W ET0=1; //开定时器0中断
, d% I v. u8 u TR0=1; //启动定时器0
4 [* H3 o5 S' N: W: l while(1)- l$ _; u8 L% {$ N+ l
{# k2 m# O8 A c" V5 p+ C0 T
display(shi,ge); //数码管显示函数# t8 [1 z! z: G; c* g2 A( b* W4 J
}
9 Y8 F/ K' I1 W- G, N' y}* e& l+ r% U* s& T9 ~
- `7 V8 j5 l1 t, L; ~void display(uchar shi,uchar ge) //显示函数
$ n& A% H) A) \' v! T2 \( z{
6 v$ E7 K4 |0 D( a: s8 y# G% X1 W dula=1; //打开段选5 m% y: V* V' ~5 b8 r
P0=table[shi];
! L2 ?5 G- k7 V* P3 @, R( | dula=0;
, ?+ w6 i" O! r3 |+ ] P0=0xff; //重置P0 防止数码管乱码9 e0 F0 [$ R. S2 ~# S5 P& m
weila=1;
7 p( ^8 U! w% w0 l& h. Y1 {, K P0=0xfe;3 n0 n2 J" v; T6 u- w2 L
weila=0;: ~* `) L2 s% L" n9 g0 z* F% ]
delay(5);. a4 p6 @) X7 N% `; k7 c, l1 X
" a9 z( t4 a6 S& g4 j+ Y J dula=1;
! p1 }$ k8 _7 _ P0=table[ge];
( ~4 q3 s+ M4 d% \& y2 D" V dula=0;
/ a9 H* \+ `% K" v j9 } P0=0xff;2 t; z2 A6 D$ O& O! v
weila=1;1 r7 l) ]7 g+ a" q3 n7 z
P0=0xfd;
+ `% D1 P# R! L. _" ? weila=0;* c" Z: w" O9 x% o9 ]1 L2 t6 Z: r
delay(5); C; `' x; W( @
}8 T9 }$ f+ H7 ?( I8 g
8 s3 e! M* a4 k5 }: Hvoid delay(uint xms) //延时函数 延时xms ms+ H8 C) n J8 L9 ]
{. i. F# m: B% d4 x; `
uint i,j;3 P: q7 {; y6 j1 z8 E
for(i=xms;i>0;i--)! Z- `* x8 |$ |5 o
for(j=110;j>0;j--);4 u& A! V/ H4 m
}3 U( k: t3 p. @7 ?3 H
# { D: w) ^/ L! j( P( Ivoid T0_Time() interrupt 3 //定时器0中断 定时方式1+ X) @1 O6 V0 e! z+ v
{
2 Q1 d7 f }# S# C' w1 ~ TH0=(65536-45872)/256;
" l( h" m0 x4 `- D1 n3 ^. a TL0=(65536-45872)%256;
8 O Z8 g8 c6 S I- G. x0 E num1++;+ w5 p1 h. }' T% _. n+ [# A
if(num1==20) //检测到1s了没有
# K* P/ u' [7 X5 v" ? {
+ ~) z: f1 I# @: e+ X: o num1=0;
+ O0 a; `- k; L! H num++;
/ f1 W9 Z# F$ m0 [1 N8 P( v if(num==60) //实现两个数码管从00--59$ A1 d# L& l. V9 C
num=0;
, L$ L( i1 L0 d) R shi=num/10;) |: H& Q2 U0 I& b6 X1 V
ge=num%10;
: F+ u3 G- X6 ]' m7 _ }+ x |6 o' \; t, Z
} |
|