EDA365电子论坛网

标题: 亲们,新手请教程序;使用中断实现00--59显示 [打印本页]

作者: zhuxiaoxing    时间: 2012-7-26 10:10
标题: 亲们,新手请教程序;使用中断实现00--59显示
亲们  我想用定时器中段实现两个数码管显示00--59;烧好程序后,数码管就一直显示00,好像不计时;不知道问题出在哪,  X& q: i4 R! p" C: X2 H
程序如下:* d4 D0 s8 y' j$ z3 n6 U* w# @
#include<reg52.h>" W& Z4 W8 \& L' S5 [" Q
#define uchar unsigned char         //定义uchar uint2 V+ K( x1 Y% W4 A
#define uint unsigned int* r3 X( b' Y+ O
sbit dula=P2^2;                         //定义数码管段显示- Q$ {) S" ^& F- K
sbit weila=P2^3;                //定义数码管位显示
0 X& M0 _* U: X/ P# o- d& z2 Yuchar code table[]={                //定义数码管显示从0--98 ?% [8 g' v7 ^
0x3f,0x06,0x5b,) T' w6 K" q- S1 _" g, r# Q
0x4f,0x66,0x6d,
4 @2 d6 g# z2 h& w0 G0x7d,0x07,0x7f,0x6f};
9 p$ Q" Y# v) I' z8 ~/ d
9 K( `- M' ^9 d+ W/ ?: u$ ]void display(uchar,uchar);        //声明数码管显示函数
7 T& Z. t5 q, xvoid delay(uint);                //申明延时函数( I' z& b; U( B# b- O2 f* _9 A
uchar num,num1,shi,ge;
$ o: y: e# n! z" N& F* @+ M$ F3 xvoid main()                        //主函数& f  D+ f) A# i7 l3 m6 J  Y
{
' b/ }$ R' R# e7 J( d$ `: _  TMOD=0X01;                        //定时方式选择( E- O# I: @1 t3 F
  TH0=(65536-45872)/256;        //写定时初值
- C" M- P1 d5 A4 P+ R  TL0=(65536-45872)%256;
3 N5 i: V& f' ^- C4 V5 V. _* }  EA=1;        //开启总中断
8 b- V' s0 ?; B  ET0=1;        //开定时器0中断, y* Z4 E3 N* P  a4 ]; {6 S
  TR0=1;        //启动定时器0
& N& Z9 R+ F" p  while(1)8 Z, W  |+ e- d; P
  {' y5 H( B$ D4 T' e7 h8 g% S9 u
    display(shi,ge);                //数码管显示函数
: Y  L7 q& V$ H' a  }9 x1 c/ d. Y4 }- o% n
}7 n$ G+ j: c$ K1 N; A* F  f
: r& A! X5 N* t: N+ }8 e
void display(uchar shi,uchar ge)        //显示函数
/ A- ]1 J0 R+ c/ |  l( F0 N: S{7 {: x- {9 K/ k" z& Z5 l
   dula=1;                        //打开段选
: U' t; u# M2 b+ [   P0=table[shi];
. B7 h) k, B1 T4 b5 g   dula=0;
2 W& c3 B1 ?6 t* f* j3 c   P0=0xff;                        //重置P0 防止数码管乱码
  f  [  z* C( H6 C, v   weila=1;) R+ e  S. E! b0 `3 F; a+ y7 S
   P0=0xfe;
" Z3 Y. q2 ]4 d7 d9 @   weila=0;5 K* \# `- u* o2 }- V9 g  }5 i
   delay(5);
( \1 a6 s8 g6 e; H  j  ; B/ o; x1 k1 @$ g2 ^; F8 Z
   dula=1;
* R4 h9 M8 i4 X- y; p0 v6 ~7 N6 p   P0=table[ge];
2 t( m" e3 F/ d. ?0 T$ x( H   dula=0;
- n, ^4 h6 |2 X' N; n   P0=0xff;
/ e- I4 ]. ^" ^" `   weila=1;2 w9 t1 E( |0 R  A; \% o
   P0=0xfd;) |' y# p! E  t1 ^8 E8 S
   weila=0;; C5 L2 B+ S6 h$ {
   delay(5);
2 t3 s  \* ?* G. |7 y0 z}; E- y) U0 N% n; S4 J: O4 }

# L# ~; I9 I7 l8 R- W. gvoid delay(uint xms)    //延时函数 延时xms ms& ~, J2 k0 v4 N
{$ y7 v3 O* ~) C7 @8 N. L) J6 L
   uint i,j;6 s' e( ^  |/ o& D( L1 F
   for(i=xms;i>0;i--)5 a7 \1 {) b4 R; ^* u8 u  V
    for(j=110;j>0;j--);! I: m$ q6 o, y+ s( @8 D8 L
}- e5 g: j( ]% A; f5 A" D+ _& D9 l
- c" c3 Z" C6 I, a
void T0_Time() interrupt 3   //定时器0中断 定时方式1
$ A$ M! `, L0 J{2 }$ S! R8 \- Y6 ]
TH0=(65536-45872)/256;; L" \! `5 F5 _9 S, m0 d/ s
TL0=(65536-45872)%256;% ?5 m- K% j- r
num1++;3 p! A- L0 ^% Z& N1 ~
if(num1==20)      //检测到1s了没有 ; i: E6 J4 T. K6 y2 j" \+ |. L- B
   {# A. e7 ?3 J' s/ i
    num1=0;  x  U# S$ ~% a% z, i4 w* C: T
    num++;+ P" u: ]- E. G1 \1 j
    if(num==60)   //实现两个数码管从00--59& v7 u: @: e5 B! ?* ^5 p8 v' S1 Z* D
    num=0;7 i8 m- C+ j* ]0 Z! g: |/ }, a
    shi=num/10;
' s6 ]0 @9 B7 \    ge=num%10;* J) v1 ~4 r5 E& V+ ]
    }( e5 d1 B5 x2 s2 U& b; r- w
}

作者: hi_yjs    时间: 2012-7-26 11:20
改成“interrup 1”才是定时器0中断
作者: zhuxiaoxing    时间: 2012-7-26 12:08
hi_yjs 发表于 2012-7-26 11:20 3 W: q$ e: X3 c
改成“interrup 1”才是定时器0中断
; ^  N( Z0 C8 r
呵呵 谢谢  刚才发现了




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2