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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
亲们  我想用定时器中段实现两个数码管显示00--59;烧好程序后,数码管就一直显示00,好像不计时;不知道问题出在哪,
+ K; V; ?" Z6 x% H# L7 g程序如下:
2 _( @& y6 H, a0 \#include<reg52.h>! w4 g8 @. ]7 ]/ D$ V6 W
#define uchar unsigned char         //定义uchar uint2 z, c- x9 Q1 c# A
#define uint unsigned int  _4 S/ T9 R( N" S3 ^2 |# B+ b
sbit dula=P2^2;                         //定义数码管段显示" }4 v1 @. o& {3 Z' H/ P* t5 U7 i
sbit weila=P2^3;                //定义数码管位显示" O$ j: H6 I/ i) \* \
uchar code table[]={                //定义数码管显示从0--9
  d% i% w9 I! t3 ]/ S3 K- [0x3f,0x06,0x5b,
+ |0 s8 W& b+ E4 n0 A1 F0x4f,0x66,0x6d,0 f2 e" B: |" X% m+ }; x
0x7d,0x07,0x7f,0x6f};
6 U/ E8 {  I9 E- A3 }, P; ]2 m! [2 o  B! c$ e# P. Y
void display(uchar,uchar);        //声明数码管显示函数
- R+ N( M, o' _8 E% Rvoid delay(uint);                //申明延时函数5 S% n9 j) o+ k; r: L) D
uchar num,num1,shi,ge;
# ?$ B) n2 B3 g9 O+ Pvoid main()                        //主函数
" a. F, z) C9 v+ B+ }+ Q1 Q6 L* [; `{
; c! y  G$ C9 t# \  TMOD=0X01;                        //定时方式选择
: h, B. W7 A+ C; A: _7 N5 g  TH0=(65536-45872)/256;        //写定时初值- ?: K  x- A0 W; e* b8 `
  TL0=(65536-45872)%256;
: [0 P" c0 z4 ~) N  EA=1;        //开启总中断! n$ I3 G4 U% {8 G) O- i5 R- k$ X
  ET0=1;        //开定时器0中断2 R# T% W! D& k2 |: e: A* n! v  R
  TR0=1;        //启动定时器02 q' i1 g$ Q  u$ A& q- H8 Y
  while(1)
7 l9 a+ `& E7 o2 k/ Z6 i0 u: O  {3 V9 g+ Y. y$ n! I
    display(shi,ge);                //数码管显示函数+ N. J" P  C" T) ^9 n+ w% n. C1 }
  }
" M2 J& y9 ?2 \& s+ G}
- ?- \  W1 k3 M" J$ u3 R% v  e+ R2 z, v2 k6 U9 w
void display(uchar shi,uchar ge)        //显示函数6 q" i) }/ t  X* ^
{$ I& r% \/ J8 A, u
   dula=1;                        //打开段选' ?: q; Q% h4 b/ A* G
   P0=table[shi];) U; ~9 h: y& N: u# H# Z* |
   dula=0;+ `9 c8 h" @' v
   P0=0xff;                        //重置P0 防止数码管乱码& P6 {% a& n2 @7 ^8 d. O
   weila=1;( W8 ]6 L7 v: d' V& A" P5 Q
   P0=0xfe;
) [# q/ l* Q8 Z6 _5 @   weila=0;
: [$ R3 P7 n  V. X4 ?& E% b! w4 I7 w   delay(5);# T& G1 M1 f+ k( j" [+ }
  
8 E' t: Z$ I+ r3 H1 s( L   dula=1;
3 \$ W" I- V2 g0 n3 \   P0=table[ge];
7 l& [, w) t3 B4 y5 X9 Z   dula=0;
4 l( P- |5 m9 [; ?! j) x) w' V/ U   P0=0xff;
/ e3 l3 y2 l2 _! T: c& ?7 o/ m   weila=1;
: j$ N) d- S! n9 C. b6 C" d   P0=0xfd;
$ Q  i" ]! u& d3 x) g: c   weila=0;
2 L  t! b& E0 H) n* t& e$ U   delay(5);
+ V$ m9 I6 B6 H8 E0 b! `+ F}/ R4 G8 M0 E5 L" U& q, m* D3 I
/ i9 h8 ?( n: P  a9 I
void delay(uint xms)    //延时函数 延时xms ms
" R5 z3 p6 v; Z1 G* k) g{
: k* h! o! |7 K0 J) }4 l2 a   uint i,j;* k# }" y9 m! \
   for(i=xms;i>0;i--)
# x- w: H  [5 M# X7 J7 {1 E1 ^    for(j=110;j>0;j--);" q9 e/ L) i: ?. U. C8 N; d: u. f
}1 b# d2 j; Q# Q2 V
9 S  D, {( a4 M2 G: `9 A; M  m
void T0_Time() interrupt 3   //定时器0中断 定时方式1
" ]0 N! M% G0 q" X3 a, \0 Y9 f7 @' `{' n7 ~! T1 z9 V; q2 g
TH0=(65536-45872)/256;
: n, b8 k& D& jTL0=(65536-45872)%256;' H' {2 D4 U  C
num1++;
  B+ x: C' Q, H8 G" o2 ^; Kif(num1==20)      //检测到1s了没有
6 ^8 u2 D. ~8 x: W' R   {
) _, g" m- ^; Z# n! D    num1=0;
( P- }, X  e8 L$ F9 o; l* w8 a    num++;
! D2 P' [3 w9 }! ^# F5 f6 x    if(num==60)   //实现两个数码管从00--59; D; ^& h3 v4 u
    num=0;
* c! z& X. Z; T2 f% t" O+ n    shi=num/10;9 J: s6 z' Z7 X) W
    ge=num%10;
) j; ~/ }( j4 {    }7 ~* u2 \, S4 H* R: B
}

该用户从未签到

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

该用户从未签到

3#
 楼主| 发表于 2012-7-26 12:08 | 只看该作者
hi_yjs 发表于 2012-7-26 11:20
+ I9 \, ^, e0 T3 t' c/ K* H* o- Q改成“interrup 1”才是定时器0中断
/ T; x6 H  c) e+ H( `/ ~0 N! w
呵呵 谢谢  刚才发现了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-11-23 20:24 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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