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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
亲们  我想用定时器中段实现两个数码管显示00--59;烧好程序后,数码管就一直显示00,好像不计时;不知道问题出在哪,9 Z6 _/ |. Y, v) n: C' Q6 b0 u8 n; F- N
程序如下:' S) Y; O2 x: W! D* d  L6 @3 F
#include<reg52.h>
. ~/ y- P5 f) `9 |# R( C#define uchar unsigned char         //定义uchar uint
# T1 T% e# `" u9 P* h" U- H#define uint unsigned int# @) |) O6 g, x. }' w
sbit dula=P2^2;                         //定义数码管段显示! A6 ], y5 h% m$ f
sbit weila=P2^3;                //定义数码管位显示" U  p) f% v7 Q
uchar code table[]={                //定义数码管显示从0--9
. u3 y  A0 S$ V1 @0x3f,0x06,0x5b,
( f7 m9 C" J; [. c% |0x4f,0x66,0x6d,
' b7 K: ?. i& l4 A, `0x7d,0x07,0x7f,0x6f};) A. m: X, F, G# U, u; b5 A3 x

! B- f" i/ U3 r/ i9 Xvoid display(uchar,uchar);        //声明数码管显示函数$ q9 h; S& J6 q* `+ G
void delay(uint);                //申明延时函数. `# X# P# W% v
uchar num,num1,shi,ge;" o- X3 b0 G. j% ^1 @: W% F
void main()                        //主函数
  Y) K. @) J3 _/ @* }5 P  N) Q{
1 O" @# w# m3 h  TMOD=0X01;                        //定时方式选择
" d3 r% N6 ]- c  TH0=(65536-45872)/256;        //写定时初值
+ y& `4 U8 }! O4 q( Z3 I  TL0=(65536-45872)%256;
1 \+ C5 W$ S" Y% h7 R: v+ j) k% v  EA=1;        //开启总中断& A4 P: ?8 D- X) X, V! x4 q
  ET0=1;        //开定时器0中断
' p5 {& z' B/ v  TR0=1;        //启动定时器0
2 l0 B$ J' ^/ P  while(1)  H3 {; @: t! v' Y7 Q* a+ X" q8 @
  {& O8 w& l/ l! t. ^! e# x5 G
    display(shi,ge);                //数码管显示函数
6 r" g$ `2 Z* P3 y$ h  }
* m- H4 N1 W5 ?" b. G( Z}
5 X" D) o+ `! t$ h6 K* R: G6 U5 ^' w0 R1 h# ]
void display(uchar shi,uchar ge)        //显示函数! A# ^1 E: g, G1 C( U
{( t5 Q4 n6 t% L
   dula=1;                        //打开段选9 a$ y( g" B6 B, ]+ ]2 ~
   P0=table[shi];# @. z7 q. ^' @9 |; b
   dula=0;
) [9 _( r5 y) ]: T2 c! b9 y6 F   P0=0xff;                        //重置P0 防止数码管乱码
, ~5 P( ]- d0 F0 K: Q   weila=1;
0 C5 H+ |$ h$ M" h4 P   P0=0xfe;$ `) e  H  U% U4 m8 W' Y- e
   weila=0;3 k0 O. t9 J* E2 v* Y: C  Z- L
   delay(5);+ z" v( X! Y, ]1 M9 u; a! N
  ; [  \* U1 Y- @+ F0 u3 {5 z7 ^
   dula=1;
5 g3 ~9 W2 L3 E) L+ T   P0=table[ge];- Q, r5 P' U( K$ m, i
   dula=0;6 p0 L( i+ [6 m2 y6 g( X: E* @4 \  {. O
   P0=0xff;2 W( y, L+ }3 T) i# J$ P! K
   weila=1;
9 s$ |8 {9 }& [% G   P0=0xfd;
  l4 I# S9 Q) f   weila=0;1 ~, h2 y" _& o4 R) ^% V
   delay(5);% l& }0 n7 `8 m, b+ i
}
3 z7 G) }3 p/ ]- F0 `& T  O1 w# L' H$ G/ Z
void delay(uint xms)    //延时函数 延时xms ms6 p, `: ?$ |, O$ D6 b
{
" F3 J* {1 j: N2 R6 L( l$ {   uint i,j;$ c6 [/ w. a% k8 O4 @4 H3 S
   for(i=xms;i>0;i--)
3 @- D0 t" ?9 h    for(j=110;j>0;j--);: |: f& S4 A# v/ U0 c9 ]4 o
}
; a+ U6 b1 j+ F
4 t3 n9 g2 S, s, |+ K/ X5 M, B* Bvoid T0_Time() interrupt 3   //定时器0中断 定时方式1+ \+ r( A& m3 E# S$ N& j' f
{3 u9 s4 O' y+ Z  g' T/ Y
TH0=(65536-45872)/256;; ]8 T% o9 h( o7 H$ R% P0 ]* \
TL0=(65536-45872)%256;1 N7 e7 j5 Q8 w5 @; Y0 y+ Y
num1++;& Z9 M8 t5 F- k: q) t& \0 j+ Z
if(num1==20)      //检测到1s了没有
  A% p9 m( @5 t) F   {
. ~! m( i9 n( M# A  D    num1=0;
! b6 r" |: v& r$ A9 V8 f4 J    num++;) g' S- Y" z) D4 N& u" r& `7 x
    if(num==60)   //实现两个数码管从00--59
, T0 g/ K1 ~( k% L" A4 {' r    num=0;* N4 [. |& q4 M0 E6 V4 k
    shi=num/10;5 ]) G" @6 F! w4 E/ G% n
    ge=num%10;
* K0 O. e! }! k. ^' S    }  K. y& ]: `* ?& d" ~
}

该用户从未签到

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

该用户从未签到

3#
 楼主| 发表于 2012-7-26 12:08 | 只看该作者
hi_yjs 发表于 2012-7-26 11:20
7 I4 ^- G: h; |& p改成“interrup 1”才是定时器0中断

* ^5 x! U, S9 q4 V5 i呵呵 谢谢  刚才发现了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-6-28 13:27 , Processed in 0.078125 second(s), 23 queries , Gzip On.

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

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

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