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 uint5 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 usbit weila=P2^3;                //定义数码管位显示, _# z& s4 O6 S3 c
uchar code table[]={                //定义数码管显示从0--96 q+ p7 d2 \. p. X4 e% `6 S7 g
0x3f,0x06,0x5b,
! f) ~* U! ]7 s8 b1 ]+ Q0x4f,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! dvoid delay(uint);                //申明延时函数
( |0 ]- c% v9 H" {7 x) N, ~. wuchar 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 fvoid delay(uint xms)    //延时函数 延时xms ms7 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$ ovoid 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 |: ynum1++;
2 v1 E, A! ?) d$ Aif(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