|
谢谢楼主.顺便请教个程序.我想用定时器中段实现两个数码管显示00--59;结果数码管一直显示00;不知道问题出在哪," r+ x# d) s/ `! y, a
程序如下:
6 U5 g1 L, o# _( P& r. j#include<reg52.h>
& C- x) M5 x1 y" w5 H#define uchar unsigned char //定义uchar uint
3 w7 Q5 R( Z% i& e7 x: O1 o#define uint unsigned int
/ ]( F, y# Y0 r; ]6 b) Zsbit dula=P2^2; //定义数码管段显示
9 }, D; j( J8 |: x' _sbit weila=P2^3; //定义数码管位显示
# w% `2 v: g( ]4 o! b7 juchar code table[]={ //定义数码管显示从0--9
5 G, e3 a' ^/ p, `8 h6 t0x3f,0x06,0x5b,
% U$ l) Z- }9 a, W* p y! W0x4f,0x66,0x6d,
' B1 [4 o+ ]1 n' Q. e. V0x7d,0x07,0x7f,0x6f};+ A' {) F9 P5 X+ j" v
& A( ~& }# G5 s# Z* s9 l' Zvoid display(uchar,uchar); //声明数码管显示函数
5 A2 T' ?# [9 b8 m) c7 p9 Ovoid delay(uint); //申明延时函数$ o# S9 U0 h2 q1 E
uchar num,num1,shi,ge;
7 {: s$ J/ p6 \, X' bvoid main() //主函数2 h# v! F; s$ B9 D
{" Y! {8 Z; J* n0 y
TMOD=0X01; //定时方式选择
* C# N7 o6 ` c% T! T$ m& ~ TH0=(65536-45872)/256; //写定时初值
8 C" C/ T k1 [3 ? TL0=(65536-45872)%256;
- ^. e" _& ^& Y6 u EA=1; //开启总中断
4 g/ Y) B2 z" W! v ET0=1; //开定时器0中断
2 ` u5 r% R3 G TR0=1; //启动定时器0
@& @! U$ e" a) g, l' Z2 R while(1)3 k# v) g- r! G, t& c" Q; y
{4 W/ J# W& u) ~7 b
display(shi,ge); //数码管显示函数
$ [* U0 B5 f" p( Y" t- @ _5 ` }
) ^+ n: {* Q5 z5 A7 |}( T: Q6 I, |- ]4 q3 M7 j
: m8 F8 N6 T& C( Hvoid display(uchar shi,uchar ge) //显示函数
. |8 P% i; K# G% R6 X9 J3 r{
8 v, P. U9 k0 j$ E a; e dula=1; //打开段选( e( n" K8 _7 F ?% u
P0=table[shi];
H8 C4 ?; s: P! B$ g w dula=0;
3 B2 t' i3 ^% Y* r1 n; l P0=0xff; //重置P0 防止数码管乱码
! V; f2 T8 H M7 a: C* m9 C weila=1;
% O1 _+ f. W, U# ?# h P0=0xfe;
; j4 }( Z2 {" W) Z2 W2 u" ] weila=0;
; X$ ^7 P8 ?2 u- e' Y delay(5);
) k. w# B& M+ n5 C2 j/ a% w x% j
, S, v: t- R/ L' M$ o2 n4 Q' Y dula=1;7 S4 U% d7 p n/ e
P0=table[ge];5 X8 E" q- @5 i, p
dula=0;. ]; |5 m B" z4 d3 x
P0=0xff;3 f. ^* V: f* p' m/ V
weila=1;
' E) x6 E! l$ o P0=0xfd;! q* T. }: n* \; h2 ^$ X: _
weila=0;/ J8 w: F8 P' W) O9 u7 ^
delay(5);7 S; X+ U9 e# M% o
}
) |( b! Z" D- n: `
+ {% S E: I7 K9 }: Evoid delay(uint xms) //延时函数 延时xms ms
. j% p& L; i. C7 \{
, ?% G' Y; t" E2 T4 D3 @. Y uint i,j;* x7 E5 ^- _3 V1 s; R' o2 J& a! R% m
for(i=xms;i>0;i--)& i/ }- I" s2 s2 d: p# r( J
for(j=110;j>0;j--);
# k" P* ?9 @6 L) J# G5 C4 L( e+ M } M& r# S K. w1 Y4 f
( N5 Y( O4 Y8 e" b
void T0_Time() interrupt 3 //定时器0中断 定时方式1( [$ s: ^# |1 \: `
{
1 \* g; g y7 Z6 }4 Y. A TH0=(65536-45872)/256;" N( b. ]( \, g# \$ B- S1 n3 H
TL0=(65536-45872)%256;
; A% a- j3 V# E0 v J1 b* x num1++;+ S, S% m* A% s; Z7 J- E' e
if(num1==20) //检测到1s了没有
( \& ~; ?# u9 Q: Z, @ {
5 D# e9 n: a( W1 {# e4 n2 R2 [/ n num1=0;! J/ {; D) H6 Y9 M* c5 e
num++;
% M4 g% F8 C6 M" w if(num==60) //实现两个数码管从00--59
. N% W( v) I- z6 D" W num=0;8 c; |+ H2 k( a: w
shi=num/10;5 K5 ?$ k# F: h, F- [0 F, N' S
ge=num%10;
" h+ C/ L5 o2 i; {8 ] }- A2 V w# D7 z4 @1 b
} |
|