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+ usbit 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 Z0x3f,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 cuchar num,num1,shi,ge;
" E2 k. t9 H! C4 }7 H5 Gvoid 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 Ovoid 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 Wvoid T0_Time() interrupt 3   //定时器0中断 定时方式15 G3 ]5 l/ B) J9 Y. s3 [
{
5 }* R; H" p" r) C1 XTH0=(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 uif(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