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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
亲们  我想用定时器中段实现两个数码管显示00--59;烧好程序后,数码管就一直显示00,好像不计时;不知道问题出在哪,$ c: _& N* W+ @0 z' ^
程序如下:
9 B+ X, U/ ^& Q; b: Y/ j9 e& H#include<reg52.h>, q  h- G; w' Y
#define uchar unsigned char         //定义uchar uint; [5 }. ~3 g2 H5 N) p
#define uint unsigned int3 e  [) x1 O  \6 C4 N
sbit dula=P2^2;                         //定义数码管段显示0 p0 O: M9 f( ?$ }
sbit weila=P2^3;                //定义数码管位显示* j/ y; N2 J' [2 \) N! Q
uchar code table[]={                //定义数码管显示从0--9- M% ]  s% Y/ ^. G) T2 C6 p
0x3f,0x06,0x5b,
7 Z  E! q$ {0 \4 [) A& w0x4f,0x66,0x6d,
7 B7 J% W9 M! F0x7d,0x07,0x7f,0x6f};
+ j: K" I; }% ^: Q2 c2 I& z' Z8 y7 d5 {1 W; K" _: i& {: x
void display(uchar,uchar);        //声明数码管显示函数
  x8 m# D7 x. gvoid delay(uint);                //申明延时函数- \3 R" ~# G. Y5 r. N( U3 i" w
uchar num,num1,shi,ge;3 N" |  h) s1 A! v; d' Z+ X
void main()                        //主函数
" x; ^0 c& i; o5 T2 R" w, U{
/ t4 i! V1 G0 E: l1 E  TMOD=0X01;                        //定时方式选择
/ S$ B$ ?2 q  y. u$ i  TH0=(65536-45872)/256;        //写定时初值  ~1 h/ q" j, f( I7 Y0 m( V% Y* ?
  TL0=(65536-45872)%256;, _% k  V) e+ E9 S/ D9 x# Y! d
  EA=1;        //开启总中断
* q7 ~7 ]: s" J/ p( K  ET0=1;        //开定时器0中断% g- K2 c; g6 C3 L0 u" v; I8 h
  TR0=1;        //启动定时器0
" j9 q" g( t; J4 @) U. k  while(1)/ Q4 o2 b# s1 ~
  {1 u2 {2 {- }% E0 ~3 [! Y' g
    display(shi,ge);                //数码管显示函数+ h( G0 L# ^& p
  }
% |8 ?8 L9 j0 b( p5 i4 j}1 M6 d6 A  O0 |) S+ |* U
7 I" s+ e8 R# o: m7 \
void display(uchar shi,uchar ge)        //显示函数
4 J4 \3 F' Z! O) [9 _+ d. w& R" {{6 v  K* ]. u' O3 T/ _* Q
   dula=1;                        //打开段选7 @% G- r2 ~' g3 p) ~  l6 G
   P0=table[shi];4 W& t! M/ v3 u1 X( n
   dula=0;
4 u& ]9 C/ o6 `8 S! o   P0=0xff;                        //重置P0 防止数码管乱码) V3 K* z3 d6 d" q- o$ w
   weila=1;, p9 F2 q. \; n5 Z
   P0=0xfe;' B3 O4 |1 C% I
   weila=0;/ K$ S7 j9 y! A! [: Y
   delay(5);& @5 j1 F2 X* ^" q
  
7 t  q; x4 `- [2 l/ \' T. ?   dula=1;
# F- H- ^  g3 y  Q" b   P0=table[ge];% ^) {) i! \  a3 I. N  Y
   dula=0;) H* C$ c6 ^" \# X8 \
   P0=0xff;; e, ?; \5 v+ |" `# Q6 q
   weila=1;% z3 n3 \3 a# A
   P0=0xfd;
0 I( h; L( G/ L/ }; Y" G   weila=0;" {4 T& e7 E  U; H6 S! h
   delay(5);
! S, p9 T9 @( U, `}# l5 C, V+ P: q/ [7 P
, c+ a3 A+ K! W& h& S
void delay(uint xms)    //延时函数 延时xms ms  }. f/ L. z5 w- o) Z
{
, F+ q0 z, ~- o" s  f# ?, p   uint i,j;
( C8 a6 T' l+ U+ T9 a   for(i=xms;i>0;i--)
. Y, T/ G* r- Z. d! }, T' p    for(j=110;j>0;j--);
9 k' o$ y$ ?- Z4 M! \' w}
1 r# M1 R9 I3 R& `
; P& m: W  o$ j0 ~+ kvoid T0_Time() interrupt 3   //定时器0中断 定时方式13 V3 A7 K5 [! w7 e
{
* w; m: _: {' h# {3 b/ QTH0=(65536-45872)/256;; s& ~6 j# L. F
TL0=(65536-45872)%256;
( m  h! e/ L% [0 D% s+ Rnum1++;! c! G; O1 R- H7 d+ L& |
if(num1==20)      //检测到1s了没有 3 c5 C: \$ j. K* K3 l
   {
& B% ^+ r0 {3 a9 t- o9 O- T* M+ y    num1=0;
4 U1 B& r" p8 x4 E. P. O! C    num++;" x/ ]4 S( v8 i
    if(num==60)   //实现两个数码管从00--599 L( `5 X; _& a" U) b
    num=0;8 X# X7 W: m/ |
    shi=num/10;
" i2 @! G* n2 u6 v5 ~& i    ge=num%10;
- ^# j/ x5 `% \: }9 l, }) G# Q5 p    }
; @* c5 T8 N! Q% ]3 T- C2 u}

该用户从未签到

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

该用户从未签到

3#
 楼主| 发表于 2012-7-26 12:08 | 只看该作者
hi_yjs 发表于 2012-7-26 11:20
7 t- @  W4 z  u! G* \2 Y4 C+ d. i+ ]; V改成“interrup 1”才是定时器0中断

9 P( J3 X" s& w+ e, m# A( ]. H呵呵 谢谢  刚才发现了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-28 13:43 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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