找回密码
 注册
关于网站域名变更的通知
查看: 1294|回复: 2
打印 上一主题 下一主题

亲们,新手请教程序;使用中断实现00--59显示

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2012-7-26 10:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
亲们  我想用定时器中段实现两个数码管显示00--59;烧好程序后,数码管就一直显示00,好像不计时;不知道问题出在哪,3 @% N5 P$ ^& d2 R
程序如下:* q7 i: s, v0 M: [6 d
#include<reg52.h>
" \6 b/ b, ~( l" S#define uchar unsigned char         //定义uchar uint2 I1 M. l% a9 l0 r
#define uint unsigned int' ~0 n. E1 @# p4 m4 o% s1 G
sbit dula=P2^2;                         //定义数码管段显示
1 h2 e  p6 q5 S& _sbit weila=P2^3;                //定义数码管位显示
+ g9 C! I  ]' s' Z5 q: wuchar code table[]={                //定义数码管显示从0--9
3 v: ~% Q5 m# M, K+ E* W# L9 K; ~- {9 x0x3f,0x06,0x5b,; |8 c% k5 i; O! ]  n0 Z, ]
0x4f,0x66,0x6d,' k0 z- l( B! E: R8 _+ Y9 O- n" w) _+ b
0x7d,0x07,0x7f,0x6f};7 x% C2 Y+ m( X( Z% X) _) P9 h1 P

% i+ c9 \( m' S# |. v* Avoid display(uchar,uchar);        //声明数码管显示函数9 h! C  `1 I, i0 g/ N: ^
void delay(uint);                //申明延时函数" C# i- |2 F( S8 H) i, Y
uchar num,num1,shi,ge;$ B' z. }/ S: s5 p) p
void main()                        //主函数$ P- R/ z  ?) _7 _
{
- u1 I4 M5 R9 O/ }. Q" ?  TMOD=0X01;                        //定时方式选择
- k7 s. U* f. i" Y) u  TH0=(65536-45872)/256;        //写定时初值
* [# F- T! w+ j  TL0=(65536-45872)%256;
" C* S/ l& l' T1 ?  EA=1;        //开启总中断
" W+ o1 ^+ }3 i& _, l, D- ]4 b  ET0=1;        //开定时器0中断# n& Z4 B+ D* U: @1 z! R
  TR0=1;        //启动定时器0
1 |, @/ J1 t+ U4 B  while(1)
2 F2 g0 P/ `8 `& L1 Z  {; \: F( ]2 t% f$ s; M: B6 [
    display(shi,ge);                //数码管显示函数
6 U  u( A/ x% @4 p5 j  }/ Y/ _* f" X3 @1 g
}
2 o% A  x0 L% E. M4 R; [; R$ \( z8 r% w( T' Y! @
void display(uchar shi,uchar ge)        //显示函数
; i4 O4 j1 N, P5 f+ w# V{) v' ~' T8 J' I
   dula=1;                        //打开段选& k4 Q9 p$ C8 v+ @( C) _. I
   P0=table[shi];6 l6 o/ r8 x0 m8 Y. o
   dula=0;8 M  ?( J" g# |, Z: H' n
   P0=0xff;                        //重置P0 防止数码管乱码
, l$ @( C% x0 j/ P3 f   weila=1;$ N" c0 r% y# A' {/ A; ^/ I0 p- I* d
   P0=0xfe;$ a7 S' l" A( c
   weila=0;
  q+ c/ ~: b# z4 @' \   delay(5);# O. b. `; {9 u6 @7 Z/ O
  
9 s6 M) o. E* O, ~4 k   dula=1;! t' g. {7 Q& Z; ]" a
   P0=table[ge];$ b: i1 M1 V1 a2 f/ q- S
   dula=0;
1 r+ N. x  e" l: K/ j   P0=0xff;6 k7 N( c* W0 L
   weila=1;$ O+ n3 `- K8 i9 N% `
   P0=0xfd;
- z, j- h) X( C& Z9 v  ^1 l( Z   weila=0;& F$ z; b- m9 P5 i. D- K# [) Z8 |1 V
   delay(5);' \8 g# q/ R& I( {. X) c: a
}
$ }; x; \+ ^& ~" d3 J
1 P  [4 F; V7 ~6 i. X) K  ^void delay(uint xms)    //延时函数 延时xms ms
1 P4 a  F( O2 B; R) O! M" w{4 Z, ]7 C/ E9 V2 J2 R
   uint i,j;$ I- v" m. t5 E* A; x* c& u
   for(i=xms;i>0;i--)
2 }# g5 h) A1 x$ k6 V    for(j=110;j>0;j--);2 G5 u3 D6 ]+ ?- \  k* L- @  D
}! |1 P1 A  m  H9 |) u

$ v. i4 r0 x3 V* e$ Qvoid T0_Time() interrupt 3   //定时器0中断 定时方式1( i9 s$ m; [7 r1 J! `6 V/ F4 l
{5 E* ?* E6 e) h2 h3 p. I
TH0=(65536-45872)/256;& U% s% Z/ p6 C5 Q8 G  m1 q
TL0=(65536-45872)%256;
( r3 o; @/ ]" s) Jnum1++;
5 Z/ v0 Z; a& V& ^9 \4 vif(num1==20)      //检测到1s了没有 . K6 I# {6 G- g, G( \) b  W
   {! e, _( J  X" e* @9 X9 D& d& ]
    num1=0;3 Z" D& T! ?4 a* y$ p1 G
    num++;3 |. c' p; j/ U2 r$ M4 O2 o
    if(num==60)   //实现两个数码管从00--595 ^7 Q* h  O3 r
    num=0;: K3 L9 a% e/ j+ w
    shi=num/10;. p% t" @) E! J* x4 x; _7 \
    ge=num%10;2 [8 Z. _- H+ j) ]7 t6 l. N
    }
; j( C* ~) }0 D}

该用户从未签到

2#
发表于 2012-7-26 11:20 | 只看该作者
改成“interrup 1”才是定时器0中断

该用户从未签到

3#
 楼主| 发表于 2012-7-26 12:08 | 只看该作者
hi_yjs 发表于 2012-7-26 11:20 ! v/ @  Z1 D% T# o- i
改成“interrup 1”才是定时器0中断
! |& q/ Z  C8 d$ |; e& H
呵呵 谢谢  刚才发现了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-23 17:47 , Processed in 0.156250 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表