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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
刚学定时器,还不是太明白,定时器延时时间太长动态数码管就不显示了,老师不让用延时函数,我就不会做了。定时器怎么工作我倒是知道,但是具体怎么用我不懂,网上查了好多,也没搞清楚。2 o! o! B( K  O8 c1 q$ K; l' \
#include
* {- R$ K6 t$ a! B; l* V#define uchar unsigned char5 ~8 s. Q& c7 t) s0 q, r% G
#define uint unsigned int7 J8 b  d- K0 a% n
uint i;
8 u$ f/ I: g! G6 I8 R) g
6 }5 H) V! Z3 G' J0 A* {) Nchar ctime=0;
3 D5 @9 K! C. |  G3 |: I2 J: x- Buchar code led[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};" ]4 a! [+ K) T/ i. g" ~
/* void delayms(uint ms)        //延时函数,延时一段时间' `, ^4 Z  P) K; I+ \! q7 @9 I4 Z
{
$ A7 [3 X: X$ P, H% c7 S1 R1 _     uint j;
2 m: A9 w9 |8 {* C: q        while(ms--)
, w# x# u6 ~. N" q9 ?7 x- w  Z         {for(j=0;j<120;j++);9 A) A6 n2 [+ h) {' Y; v! M' U& k
    }
( o( B2 [! @; y } */
/ K& N, n& C+ t. R$ q# G2 Lvoid main(); u7 T( a6 O' F% ~+ z$ i
{
& E0 W3 ]4 _6 r" w& z; `  TMOD=0X01; //设定定时器为工作方式1: q. b+ k) D8 @1 G3 n
  TH0=(65536-45872)/256; //装初值,11.0592 MHZ晶振定时50MS,计数值为45872
  i' g5 T. t$ H$ z" M8 w  TL0=(65536-45872)%256;
+ V0 }; s% a5 W8 y  EA=1;   //打开总中断  G! R( }, ^5 F3 ?
  ET0=1;  //打开定时器中断; B; |! ]- @. L( l4 p0 }9 b
  TR0=1;  //启动定时器0; {8 C  j: u  j( v% P
  P2=0xff;( s1 X8 r9 a+ w$ h) b0 A
  while(1)
  S$ H+ l8 o0 Q2 d  {! a8 A$ I3 E& b$ ^0 {
  /* P0=led[ctime/10];' {+ v" q. X% E% S. ]6 a$ k1 z
   P2=led[ctime%10];
3 y6 |3 ?) a- R          */
- [4 M; ~+ M& M: ~8 }. R             P2=0xfb;           //P2.0引脚输出低电平,DS0点亮
$ Q" Q9 R# ^0 S0 R5 ]          P0=led[ctime/10%10];      //数字1的段码& Y# V( j! [5 g' q
        // delayms(10);& t- e  `  `8 ]# l+ A* c

7 |( I4 g; q: n; [6 L2 A     P2=0xf7;      //P2.1引脚输出低电平,DS1点亮" f/ ?0 `! s# D( ?+ H
          P0=led[ctime%10];      //数字2的段码/ y5 r: k5 e+ D0 |
        // delayms(10);  z' {& B0 w+ T; [4 b7 W
  }( v+ g: f: ^9 m" b
}
! x# F( i( t# Z8 L- D; g' x9 z* v+ |3 y9 M% @! c

0 v' m  c4 a4 W# E! W   void time() interrupt 1  //定时器0中断服务程序
6 f, g7 M# n6 c: a{) v) @: ]! J- d& `
  TH0=(65536-45872)/256;   //重装初值, {1 ~; l( {0 M5 p, M
  TL0=(65536-45872)%256;   
+ `7 q9 T3 t. v. @$ R3 l  r+ N  i++;; A, Y4 w3 h5 X. L# q
  if(i==20)                //如果i=20,说明1s时间到* J& u- O9 t9 ~' x! n" o& B
  {
+ i9 I# n( A4 b: q4 W3 D   i=0;8 X2 ]4 O: f' F/ C/ f
  
" {: o9 f2 Q) _% ~9 O0 f% d5 {   ctime++;
! O5 u( }+ }' d- O& D4 g) p1 O   if(ctime>99)
9 r5 r3 @" L4 @, j# l. a" ]   {
$ G( ?' M/ h( H$ t! p    ctime=0;
" W; ~8 I: V& X) d4 {. V/ S. Z  }
# b, o' i7 [( Y: L8 q }  4 d3 j; x: ]8 u' p! G$ f
}
) V0 [1 ^+ X' Y0 m4 I

该用户从未签到

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

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-7-18 21:25 , Processed in 0.109375 second(s), 23 queries , Gzip On.

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

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

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