|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
亲们 我想用定时器中段实现两个数码管显示00--59;烧好程序后,数码管就一直显示00,好像不计时;不知道问题出在哪,
' S( a# m8 y! y程序如下:
) Q. w* V! k1 Z: E3 [5 P6 ~#include<reg52.h>9 r; L: n4 b6 k0 ]; i1 z
#define uchar unsigned char //定义uchar uint+ J0 h7 u. y: ?1 W5 `
#define uint unsigned int
+ ?- j4 p1 h7 hsbit dula=P2^2; //定义数码管段显示' L m: O# i3 g: ]8 m* j1 U; U9 g3 r8 E
sbit weila=P2^3; //定义数码管位显示% P4 ^8 m# x E% d( K1 }' O
uchar code table[]={ //定义数码管显示从0--9( o' }' @0 M6 Z0 a7 @: m
0x3f,0x06,0x5b, M* a" X1 x/ f
0x4f,0x66,0x6d,
- N1 `, s/ R( v; ? J/ H1 a0x7d,0x07,0x7f,0x6f};
2 N9 j6 L+ U1 o1 o3 A" C8 B
: X; C- [1 N4 I9 s2 evoid display(uchar,uchar); //声明数码管显示函数$ s' e8 ~, Q/ _& H7 Q% P4 V
void delay(uint); //申明延时函数
; j0 z; O' F- `+ K' Quchar num,num1,shi,ge;% a$ @) }+ P9 Z1 ]8 Q8 C
void main() //主函数8 w& [; A3 Q+ P0 s
{
' ?, I% c# D3 t& g5 F8 z$ B3 L# j TMOD=0X01; //定时方式选择) U) x. R9 B$ m
TH0=(65536-45872)/256; //写定时初值& b! ], d4 f7 Y" h# `6 `, b
TL0=(65536-45872)%256;" }% G; q* N, x, U
EA=1; //开启总中断
; Z# N+ [0 C' R( W. c9 [9 n8 \ ET0=1; //开定时器0中断* e$ O: k) ^9 L! b( W
TR0=1; //启动定时器0
/ x5 b, m/ g" C7 C" v while(1)
1 Z* G8 h4 Q' X i' T {; [" h: ]% E R) ^% L
display(shi,ge); //数码管显示函数
' ~. t. C- |. G& `, v$ G; X- { }
. U7 \0 t. u7 U/ u$ O9 i}. u- z( _5 q6 r6 R" \5 Y
5 a- C& ~- U" u6 Bvoid display(uchar shi,uchar ge) //显示函数
! G% q% E6 T7 y0 s& T; v{7 y) f8 m9 l! e1 ^9 K
dula=1; //打开段选
7 Y( F# f# {! L) D P0=table[shi];
( {6 W9 |$ [/ ?2 s; G dula=0;9 t' [ v( C# e/ x, d1 j
P0=0xff; //重置P0 防止数码管乱码
% q0 _* J P( ? weila=1;
0 I1 K8 {3 C) x. A; a* \ P0=0xfe;- V! |: ~5 S8 K) y
weila=0;
+ B3 a; Q* A, M) s0 E delay(5);7 r3 z9 k; |# j. S: W R
( v Y, F6 D5 |- n; z
dula=1;) U* f; H% T( \8 r& A+ p
P0=table[ge];5 d- \5 u5 b6 l4 u9 [/ y
dula=0;
. Y* }" g% @' [: ^& n P0=0xff;* z1 G; t( w: [: E
weila=1;0 r, L8 e4 W- _& u
P0=0xfd;
4 t: L- M/ z9 ] weila=0;
5 f- } F9 Y* J# Q delay(5);
" v* z2 H4 [; R7 D- t}! Q- m: w4 @& ?2 F' L1 I0 Z' U
) n1 y1 Q4 I* ~5 g7 S) m! \' ]1 p( Jvoid delay(uint xms) //延时函数 延时xms ms0 T! q' s4 g+ I
{
: ~! V" ]& ?( F uint i,j;
: ?" t" W7 ~ ~3 `% j- y* x for(i=xms;i>0;i--)7 U" z5 k/ ]3 {) U" k
for(j=110;j>0;j--);9 G! }/ \1 r; D0 I! ?
}
. F$ b& s! Q, [, b' G6 l m3 D) O# m
void T0_Time() interrupt 3 //定时器0中断 定时方式19 L! Y- n5 D) w1 P" Z
{
7 s, s1 |' K, YTH0=(65536-45872)/256;( d0 C, R. x* p& h- u+ c$ _
TL0=(65536-45872)%256;0 r6 T E1 o, ~8 f
num1++;
, y+ K/ B0 j2 e' j }/ c3 tif(num1==20) //检测到1s了没有 - [5 Y( J6 X' N4 b! L. q
{) L e; ^& e3 j) y5 Y" y
num1=0;1 q" L" ~3 \1 h# [5 h1 Q1 k
num++;
& _! h( z6 e5 o" L6 B$ w9 ? if(num==60) //实现两个数码管从00--59
9 x& I+ W2 z1 ^1 ` num=0;; u9 S' \5 g- F, q7 B
shi=num/10;) C) @# c0 N" O: n
ge=num%10;
, b, |; _4 c1 Z) A' Q) F }) }$ x0 R. d% e0 a1 V
} |
|