EDA365电子工程师网
标题:
亲们,新手请教程序;使用中断实现00--59显示
[打印本页]
作者:
zhuxiaoxing
时间:
2012-7-26 10:10
标题:
亲们,新手请教程序;使用中断实现00--59显示
亲们 我想用定时器中段实现两个数码管显示00--59;烧好程序后,数码管就一直显示00,好像不计时;不知道问题出在哪,
, t0 m6 @2 s9 v- w! |
程序如下:
! H. o$ E$ l% @, H9 Q
#include<reg52.h>
+ u4 ~8 {# I+ ^4 r) ?" i' B
#define uchar unsigned char //定义uchar uint
5 C5 Z; a8 }. l4 x( e& T; n
#define uint unsigned int
+ v6 k7 B3 B4 a r
sbit dula=P2^2; //定义数码管段显示
. B$ [% _. W7 Y p1 u
sbit weila=P2^3; //定义数码管位显示
, _# z& s4 O6 S3 c
uchar code table[]={ //定义数码管显示从0--9
6 q+ p7 d2 \. p. X4 e% `6 S7 g
0x3f,0x06,0x5b,
! f) ~* U! ]7 s8 b1 ]+ Q
0x4f,0x66,0x6d,
/ i: u0 E! p1 {+ g# k( f- s
0x7d,0x07,0x7f,0x6f};
9 J- J" h c* d
- l: W! |+ J/ W8 O: @+ @
void display(uchar,uchar); //声明数码管显示函数
9 v3 T5 ?+ P& [2 i! d
void delay(uint); //申明延时函数
( |0 ]- c% v9 H" {7 x) N, ~. w
uchar num,num1,shi,ge;
+ T7 m: l6 q2 g. t
void main() //主函数
$ l2 w6 z. o9 o- E4 r
{
' ^* B/ z/ K; J f o2 Y
TMOD=0X01; //定时方式选择
; w K% j: k+ c1 b
TH0=(65536-45872)/256; //写定时初值
; B( y7 n$ w" D7 O
TL0=(65536-45872)%256;
: Y/ _6 S. `# d2 b$ W* k1 l
EA=1; //开启总中断
# x! Y. R" I0 I. Z* z2 V f9 e
ET0=1; //开定时器0中断
, H- j2 g1 x! o' f
TR0=1; //启动定时器0
% |) Z) s5 D$ b( B
while(1)
7 ]- q. V L! w* X8 t9 N; _3 \
{
$ _5 {* L3 Z* f* Q
display(shi,ge); //数码管显示函数
. b- v8 s7 b% L2 w$ J2 a2 J; q( D
}
: s+ H' G. I. Z) y
}
0 I) N8 X% J A- V! N' t& ~
! p; I0 w" T: P- @# E
void display(uchar shi,uchar ge) //显示函数
* }/ g( N. T8 \
{
( Q5 a5 ^9 T, ?, h# u8 Y" @
dula=1; //打开段选
: R$ O/ I# k/ d% S2 Y
P0=table[shi];
# J- ?8 u& Z7 i! F( E5 R0 P" `- L# v
dula=0;
/ _7 t* y {, N+ t# M _2 |
P0=0xff; //重置P0 防止数码管乱码
% c% _2 _. W* P( M5 T1 M3 G
weila=1;
& e0 x! b6 K1 O) e0 a( w. O7 U
P0=0xfe;
+ X4 o' k$ @: [' r! l
weila=0;
* f+ Z3 z4 P: K' Q
delay(5);
; e' C8 |0 E. x% B9 F* r5 }
1 W1 U3 z0 c2 x3 K: Q% x
dula=1;
* n+ d8 n# x( N3 x* e3 y
P0=table[ge];
9 o5 q8 J1 K6 B( q4 z' ~9 ?* [9 @
dula=0;
; s+ `% J% Y8 N4 O5 l. s- o, z3 D
P0=0xff;
8 A5 g. H" v$ m: |1 x( L
weila=1;
7 f1 d0 @3 J. E8 g, G6 C
P0=0xfd;
$ E2 [* ]0 ]; ^/ w) |8 h
weila=0;
3 \4 r) R! G- ~& a
delay(5);
* ^5 a0 P. `: K. D3 G; h
}
1 A n! ?! Q- z% u
# J7 ^. ^5 n" Z, M6 f
void delay(uint xms) //延时函数 延时xms ms
7 d/ G$ V- Q) x7 H
{
; r& c+ N& B" n5 [' T4 s$ H: N
uint i,j;
) ]/ c4 f4 s: S7 E
for(i=xms;i>0;i--)
) p0 c6 K9 }) P
for(j=110;j>0;j--);
& K4 L% r9 t7 \0 x
}
% U a# t3 t" b; _- M+ u1 u- O
8 `% h) |) X7 X u2 {( P$ o
void T0_Time() interrupt 3 //定时器0中断 定时方式1
9 L& Q# p7 x) r* {
{
5 \ g' D* J+ I0 U1 k% L0 j
TH0=(65536-45872)/256;
4 I1 i/ X9 t+ X2 { L- H
TL0=(65536-45872)%256;
) s) Y4 Z3 e8 |: y
num1++;
2 v1 E, A! ?) d$ A
if(num1==20) //检测到1s了没有
: Y7 @: H/ C: a. X7 ^6 w
{
. X- f Z3 k6 Z) F* l5 q
num1=0;
, a3 D+ T4 g* l
num++;
7 f- U7 y) w1 o/ V8 I
if(num==60) //实现两个数码管从00--59
' X* F5 S9 I: z) ?
num=0;
+ i& V. E7 }1 R+ a' [* K
shi=num/10;
1 f: G2 _( D$ \
ge=num%10;
% D8 N5 q4 x4 k9 Y' C2 |; Y& `
}
# D& J' A9 q2 i, t4 ?
}
作者:
hi_yjs
时间:
2012-7-26 11:20
改成“interrup 1”才是定时器0中断
作者:
zhuxiaoxing
时间:
2012-7-26 12:08
hi_yjs 发表于 2012-7-26 11:20
' y& {7 G3 b. S7 z, A
改成“interrup 1”才是定时器0中断
0 O/ f" x! J2 L. V& F+ L0 n! b
呵呵 谢谢 刚才发现了
欢迎光临 EDA365电子工程师网 (http://bbs.elecnest.cn/)
Powered by Discuz! X3.2