|
EDA365欢迎您!
您需要 登录 才可以下载或查看,没有帐号?注册
x
亲们 我想用定时器中段实现两个数码管显示00--59;烧好程序后,数码管就一直显示00,好像不计时;不知道问题出在哪,, ]. H+ k, P9 ?7 C2 j
程序如下:8 T" j5 i+ z4 u& o' j7 R
#include<reg52.h>$ Q+ ~# z! Z" ]$ }; h* v' r% ^' l+ B
#define uchar unsigned char //定义uchar uint! V8 b- [' n* O8 [2 `1 A+ y
#define uint unsigned int
: X2 O+ a9 h1 D& w5 @1 V& Esbit dula=P2^2; //定义数码管段显示7 T w( }) R; Q; s% W
sbit weila=P2^3; //定义数码管位显示
% @% z7 l) M! v: huchar code table[]={ //定义数码管显示从0--98 S" g5 }( ]+ @# @8 g* @ Q g
0x3f,0x06,0x5b,
9 V ?% @) |* t& [2 R5 t6 d6 y0x4f,0x66,0x6d,- i- d# ]4 W B( u+ ]3 N. q
0x7d,0x07,0x7f,0x6f};
7 v: s, ^1 K( T* z& t ^: d9 L* F% ^4 n! v
void display(uchar,uchar); //声明数码管显示函数9 m/ Y. i h0 j' n7 v7 E
void delay(uint); //申明延时函数, R" j: p4 [' v6 v& G, j
uchar num,num1,shi,ge;' d8 a3 b4 [, A X0 s
void main() //主函数, G% s3 K& g" [
{9 j5 t6 E+ B3 b. d; @! M2 b$ ]
TMOD=0X01; //定时方式选择
1 B3 g" f! N8 ?% |8 ^ TH0=(65536-45872)/256; //写定时初值
4 z' U2 L2 c: [ TL0=(65536-45872)%256;
, [3 z5 G3 a' e: A/ U6 G EA=1; //开启总中断; C5 N/ A, z4 j* u7 Y
ET0=1; //开定时器0中断, x6 \: K. e* X( u6 K* T% e2 ?
TR0=1; //启动定时器0
! _* k. B% X$ ^5 C" ?6 Y while(1)
! {! S, T. U5 k {
6 g8 D& X* k! g4 E6 _9 c5 D display(shi,ge); //数码管显示函数
4 Z( P1 G. D$ s. E* _5 H6 |: ^ }
9 T& o! X5 _0 ~4 y! S0 j' p) {}7 _2 `# n2 F) q" y- L' K
~6 ~* Y- M4 `" @8 _
void display(uchar shi,uchar ge) //显示函数4 b# |/ b3 p' n. W
{
# D- O) C, l! }- [' W3 ~0 F dula=1; //打开段选
, h7 I2 K: c3 M+ r, a P0=table[shi];
0 ]! v& ^' o4 [ dula=0;
0 l2 ]( F3 r6 W$ ^% D: w& J- B9 ]7 O P0=0xff; //重置P0 防止数码管乱码
7 ]5 X0 k+ P' k0 O I5 G weila=1;
. A& l& A' m# c- @, S P0=0xfe;
6 Z6 V" w$ d5 X! O. K weila=0;6 o$ j2 r; F S' v* u+ e
delay(5);0 @3 ^4 T6 ?1 q; j7 j+ M
. Y9 u, o* k5 Q0 D+ V
dula=1;
! c2 b$ c: C8 A8 A+ ], |: U- R C P0=table[ge];& W0 M4 j2 y/ a% n
dula=0;
7 ~5 _, J! K1 l* V P0=0xff;
4 k; }8 E9 P- I weila=1;( R0 u6 G: ?7 U9 y g; T% P
P0=0xfd;
( q& D3 D D3 m: g1 X weila=0;8 r: O7 d0 T9 w6 ?" v/ |* f3 f/ D
delay(5);: Y7 w# W+ E9 ?3 h9 |0 S
}& {( l2 B2 n* [1 _# N* B* V, ^# v
2 R2 u; T- J5 w: Evoid delay(uint xms) //延时函数 延时xms ms$ C( J, l/ t5 J4 o
{
/ n7 |# F) z/ X uint i,j;
z& ^$ P0 u3 F1 v for(i=xms;i>0;i--)
' o, v9 c7 [9 @5 R for(j=110;j>0;j--);) B9 L9 }2 l: C
}
* q$ T( ?6 L6 b( U: ^, _" ?) D0 y) [2 T6 @+ g% C) A; Z! W- W
void T0_Time() interrupt 3 //定时器0中断 定时方式1
Y& ?0 H$ \" x9 v; X{
" O6 f ~5 \2 d- M/ B4 Y/ l6 ]TH0=(65536-45872)/256;
% u' H( b Q' U! V0 q6 GTL0=(65536-45872)%256;
* {7 [/ q( d3 k7 l K9 O2 jnum1++;% [& Z- v. V# k; G( s* P
if(num1==20) //检测到1s了没有
# T: N( d8 @; W$ K( O5 n {2 n/ i; _" R4 ~1 N! L
num1=0;
+ N- x( u3 g8 s+ d) M2 [7 C) D4 k: U num++;2 U7 c- X( c" W$ ?# z& f) j" \
if(num==60) //实现两个数码管从00--59
! I# {5 l( m5 V [ ^ num=0;
# M+ Z0 H1 F8 u shi=num/10;. e& r& b1 ?$ E+ ?2 s, U
ge=num%10;
: f& G+ Y$ e- O0 j }
' z3 _6 R) Y$ B) N ^} |
|