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

怎么用定时器代替延时函数让动态数码管显示0-99

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2022-12-5 09:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

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

x
刚学定时器,还不是太明白,定时器延时时间太长动态数码管就不显示了,老师不让用延时函数,我就不会做了。定时器怎么工作我倒是知道,但是具体怎么用我不懂,网上查了好多,也没搞清楚。
) g- }; i* O" F7 h6 E#include
  S+ p9 _% |& F: f0 z+ O. ~! v#define uchar unsigned char
9 g+ B% l% l0 `: k& A# q. ~. U" p#define uint unsigned int9 g8 [# A& K( b. k
uint i;3 f6 G0 j) n' W

; B$ l- D- y. ychar ctime=0;
& X4 o6 `& h  ^' V$ d8 u1 b/ Puchar code led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
8 D' _$ r. M& }2 D7 j4 v/* void delayms(uint ms)        //延时函数,延时一段时间/ J1 \8 ^& Z# ~* c
{( k2 S6 |+ X* B! N# R
     uint j;; v! L. l! ]7 E" W1 s0 @! p' e
        while(ms--)& f8 k8 X: e5 g9 |9 u
         {for(j=0;j<120;j++);
' e: b( |8 @  I& O5 Z8 r, G    }
# K% m1 h) H& q; k. X } */
) e3 g9 y; Q9 j; Zvoid main(); Y- ^' B( Z8 y- c% I
{! w; D& W# p$ ^& C) s4 B
  TMOD=0X01; //设定定时器为工作方式1
* `' `' O$ J- {  TH0=(65536-45872)/256; //装初值,11.0592 MHZ晶振定时50MS,计数值为45872) b5 x) \6 z4 N0 l& ?
  TL0=(65536-45872)%256; % N% {6 R' X. e% s
  EA=1;   //打开总中断
: ]+ E$ ]3 Y0 H7 k( p  ET0=1;  //打开定时器中断
5 k3 k1 t5 H+ o0 J0 G# s: T/ v  TR0=1;  //启动定时器0' O" v- W) y) B, ]; X! d. [* x
  P2=0xff;
# J9 x' b7 |. I& c& q( j& p  while(1)
3 U6 Q  d6 G! g: a+ s% |  {
4 P4 g2 h) c: P" [  /* P0=led[ctime/10];5 d1 m6 R% U. I: ~) W
   P2=led[ctime%10];
! w; z; e. x' ^; q/ w3 w          */
, _0 M- g% [; V5 I) u, N             P2=0xfb;           //P2.0引脚输出低电平,DS0点亮
# u" o" t# G0 Y! ?0 w          P0=led[ctime/10%10];      //数字1的段码
8 X0 A% {0 p7 m& _" f        // delayms(10);% i2 W- L* V1 D! M

% }! z, _5 F" y( Y: e' z7 W     P2=0xf7;      //P2.1引脚输出低电平,DS1点亮
( U9 h3 k9 E; v          P0=led[ctime%10];      //数字2的段码
/ i1 {6 `+ H+ t        // delayms(10);
/ {6 t5 h; D+ L1 c- H" y  }& N7 I( @5 J% C
}( @  C  n# B8 |' B3 J
8 V- f4 V$ M6 `& _8 m; W
+ N% D/ \% m- ?; S# k
   void time() interrupt 1  //定时器0中断服务程序
9 a! K1 T# w$ _, B4 b4 s; v  g! r{
6 Q, m6 I' a1 \( M1 d1 K  TH0=(65536-45872)/256;   //重装初值- c$ T! @2 w2 \% A# ?. F
  TL0=(65536-45872)%256;   
4 |+ F$ |3 A) r6 |' b9 Z  i++;
0 ]  y6 C1 [, L" D6 G- |  if(i==20)                //如果i=20,说明1s时间到9 I* q" F  j7 A" @; h, M
  {
" r! n# q& a* b   i=0;5 F, }" x1 i. A5 ^- h
  
( v( \. ^1 q* Q   ctime++;+ ?0 H5 w3 n  }3 q8 v  h$ M
   if(ctime>99)9 I4 ?' m/ n$ }" r
   {
& w; {8 A9 c0 f& N  b  B1 t" E    ctime=0;
7 U, u5 ]2 n  ?  y, G9 E, f  }' K* f5 n) I4 X! n& |7 T: X; ^  s
}  5 v+ _# A( K2 b* p7 B" f
}
1 v+ s2 G. f# T+ y3 D

该用户从未签到

2#
发表于 2022-12-5 11:02 | 只看该作者
给你提供一个思想:在定时器中对1个数进行递减/加运算,在主程序中对该数进行判断,递减/加到某个值执行一次显示,并且重新赋初值,每判断一次可以轮换数码管显示,这样就实现了动态显示 。

该用户从未签到

3#
发表于 2022-12-5 13:27 | 只看该作者
延时就是你在一个地方等,看表到时间了你就走,定时器就是一个闹钟,到点了他会告诉你,不用你看表,就是这么点差别。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-2 13:33 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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