EDA365电子工程师网
标题:
亲们,新手请教程序;使用中断实现00--59显示
[打印本页]
作者:
zhuxiaoxing
时间:
2012-7-26 10:10
标题:
亲们,新手请教程序;使用中断实现00--59显示
亲们 我想用定时器中段实现两个数码管显示00--59;烧好程序后,数码管就一直显示00,好像不计时;不知道问题出在哪,
! ^# A! Z$ M/ W" b$ `6 t* O
程序如下:
( k# n0 O7 Z5 Q+ Q6 _
#include<reg52.h>
6 i4 Z$ G9 v7 p6 z
#define uchar unsigned char //定义uchar uint
2 J1 I9 i5 e' k z L
#define uint unsigned int
* i* M' d! O9 T, T+ u
sbit dula=P2^2; //定义数码管段显示
- ~2 f _' F# h- W& M
sbit weila=P2^3; //定义数码管位显示
; n1 O6 `) @" Q9 y0 V/ L3 y
uchar code table[]={ //定义数码管显示从0--9
) I7 l* s i) e! F2 Z
0x3f,0x06,0x5b,
& d$ D8 K$ C$ X5 U
0x4f,0x66,0x6d,
) e1 x& }, E1 l% P) i2 F# m0 e; Y
0x7d,0x07,0x7f,0x6f};
1 L) h& S) z: {6 p J1 n
% u) }, S* K- h! w$ \
void display(uchar,uchar); //声明数码管显示函数
! P) q# D2 V2 u% c
void delay(uint); //申明延时函数
* i" }# E. ~$ W0 c
uchar num,num1,shi,ge;
" E2 k. t9 H! C4 }7 H5 G
void main() //主函数
, C* A) N3 N, n; ]* i. q$ [1 a
{
1 U% d5 [: m; E& U9 S- O' v% @
TMOD=0X01; //定时方式选择
1 J6 t) u" r! b. K, E# q" x7 ~: @
TH0=(65536-45872)/256; //写定时初值
4 K, i1 k$ h: _5 S3 g5 A
TL0=(65536-45872)%256;
' o7 |+ m5 r6 e/ g* T
EA=1; //开启总中断
& }, u( P' Q$ V# R7 m
ET0=1; //开定时器0中断
5 e+ J5 X/ j- r1 H" W! v X
TR0=1; //启动定时器0
" I6 z* {3 @+ b0 V* F
while(1)
& @" }% K; K6 u( d+ z2 N
{
" d1 t4 B8 E$ X: r) _
display(shi,ge); //数码管显示函数
( M x/ L j$ O/ z
}
; t- \9 m4 C J( W2 k4 q
}
# d0 L1 l& G$ ]! d
) n- u: W" b$ {, y" M, \
void display(uchar shi,uchar ge) //显示函数
* F( i/ {5 l6 f, P3 W- ^( y
{
9 ?( h0 s. s+ W5 w3 w$ e) Q3 r
dula=1; //打开段选
) g3 b& v# k% d
P0=table[shi];
7 w! a7 C' s8 l! g7 _+ q" U
dula=0;
! ^* n# `0 a) ^2 g' Q
P0=0xff; //重置P0 防止数码管乱码
; \1 o& V M' z, j$ ]. {* d
weila=1;
& f8 j R+ l" B
P0=0xfe;
/ V: O2 y' i" G( J
weila=0;
1 Y. H* n: E- v
delay(5);
; T' S9 a# C, p! K) ^1 Q4 [( L, Y
y' ?8 t9 F- c- J0 ]
dula=1;
+ y7 g$ {: A6 t: }+ Y
P0=table[ge];
" J2 J% j2 w5 s* N8 c3 A6 S, z: Y
dula=0;
# A0 ~0 k% m! k* J4 v
P0=0xff;
. b) c( p; E4 z* g6 _
weila=1;
1 a, ]' ^& T- K4 t: @& _. h. w
P0=0xfd;
5 d# d& ]& S5 A. k
weila=0;
( b3 p7 k; P7 i* Z. r( U- C
delay(5);
1 s" K% j% x: ?1 Q( j2 E: `
}
. k+ q+ i6 A5 e c! c, Y
# M5 A5 o( g' {( g8 G; p4 O
void delay(uint xms) //延时函数 延时xms ms
' z$ f, O {* N, W
{
; p1 n$ k+ d+ X7 Y8 c/ q5 m' k( m# Z" M. h
uint i,j;
6 X+ w! `9 @7 a! r# ?
for(i=xms;i>0;i--)
. e {! L1 R# }, m$ b
for(j=110;j>0;j--);
6 M: Z. _: Q" n4 |3 r
}
* `8 O' f% a. S: V; a
W. }9 k/ v& d! s% x4 W
void T0_Time() interrupt 3 //定时器0中断 定时方式1
5 G3 ]5 l/ B) J9 Y. s3 [
{
5 }* R; H" p" r) C1 X
TH0=(65536-45872)/256;
. q7 H5 G, d* N: @! ]
TL0=(65536-45872)%256;
- Q+ U4 q* S$ _* P1 c" k+ U
num1++;
0 M2 |. ^4 c& T p0 u
if(num1==20) //检测到1s了没有
- {$ f) _: g$ a6 s: p
{
7 c5 I E5 ~: u5 {, _* l
num1=0;
) z6 o7 n+ z, I5 f
num++;
9 V1 O* R( C' I4 q. h* Y' b
if(num==60) //实现两个数码管从00--59
% @ c. L# f- M0 A0 @. G
num=0;
2 l& |$ d6 w+ N# |, ?% f; T6 |0 n
shi=num/10;
6 i0 N6 [% B4 [- }3 N) Y
ge=num%10;
- t& e6 B3 x- r! V- `- o, M% o, ~
}
7 o5 F* S8 h$ I1 V1 s; Z
}
作者:
hi_yjs
时间:
2012-7-26 11:20
改成“interrup 1”才是定时器0中断
作者:
zhuxiaoxing
时间:
2012-7-26 12:08
hi_yjs 发表于 2012-7-26 11:20
: d6 p- \; C U- |- s
改成“interrup 1”才是定时器0中断
u% k# U v9 O y
呵呵 谢谢 刚才发现了
欢迎光临 EDA365电子工程师网 (http://bbs.elecnest.cn/)
Powered by Discuz! X3.2