单片机交流
直播中

乔丽娜

7年用户 1068经验值
私信 关注
[问答]

怎样通过AT89C51的定时器去实现60s倒计时?

怎样通过AT89C51的定时器去实现60s倒计时?

如何对基于AT89C51单片机的60s倒计时进行仿真实验?

回帖(1)

王健

2021-7-16 15:45:40
  一、实验目的:
  1、通过AT89C51的定时器实现60s倒计时,显示采用两位数码管动态显示。
  2、用PROTEUS设计,仿真基于AT89C51单片机的60s倒计时实验。
  注意扫描频率为12MHZ。
  二、实验威廉希尔官方网站 图设计如下:
  
  图(2)
  三、实验仪器和实验设备
  PC机、PROTEUS软件或W-A-51综合开发学习版。
  四、源程序设计
  根据威廉希尔官方网站 图自行编写
  我写的如下代码:
  #include《reg52.h》
  #include《intrins.h》
  void time0over();
  ***it M2=P1^2;/*十位*/
  ***it M3=P1^3;/*个位*/
  char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
  int k=60,m=0;
  void delay(int n) //延时函数
  {
  int z;
  for(z=0;z《n;z++)
  _nop_();
  }
  void main()
  {
  TMOD=0x01;
  TH0=0x3c;
  TL0=0xb0;/*50ms*/
  TR0=1;
  while(1)
  {
  if(TF0)
  {
  TF0=0;
  TH0=0x3c;
  TL0=0xb0;
  P0=table[k/10]; /*十位*/
  M3=1;M2=0; /*个位关*/
  delay(100);
  M3=0;M2=0; /*个位开*/
  P0=table[k%10]; /*个位*/
  M2=1;M3=0; /*十位关*/
  delay(100);
  M2=0;M3=0; /*十位开*/
  m++;
  }
  if(m==20)
  {
  m=0;
  k--;
  if(k==-1)k=60;
  }
  }
  }
  我本想通过用定时来实现控制这个三极管 但好像无法成 ,如图(1)所示。但用如图(2)却·能实现这个这个60s倒计时的实验。但是可能有些画图的时候会出现闪屏,也有的不会出现闪屏,但具体原因,我也不知道。
  但应该是器件画图的问题。
  这是利用一个人的时角差来展示这个倒计时的实现的 你可以把 延迟函数delay() 的延迟数调大一点就可以明白啦。
  学习方式:理解三极管的放大作用
  当晶体管被用作放大器使用时,其中两个电极用作信号 (待放大信号) 的输入端子;两个电极作为信号 (放大后的信号) 的输出端子。 那么,晶体管三个电极中,必须有一个电极既是信号的输入端子,又同时是信号的输出端子,这个电极称为输入信号和输出信号的公共电极。
  按晶体管公共电极的不同选择,晶体管放大威廉希尔官方网站 有三种:共基极威廉希尔官方网站 ( Common base circuit)、共射极威廉希尔官方网站 (Common emitter circuit) 和 共集极威廉希尔官方网站 (Common collector circuit),如下图示。
  图11
  由于共射极威廉希尔官方网站 放大威廉希尔官方网站 的电流增益和电压增益均较其它两种放大威廉希尔官方网站 为大,故多用作讯号放大使用。
  晶体三极管的放大作用晶体管是一个电流控制组件,其集极电流 IC可以由基极电流IB控制,只需轻微的改变基流IB就可以引起很大的集流变化IC。由于晶体管基流IB的轻微变化可以控制较大的集流IC,我们利用这一特点,用它来放大微弱的电信号,称为晶体管的放大作用 (Amplification),简称晶体管放大。简单来说,晶体管的放大原理是把微弱的电信号 (微弱的电压信号 Vi) 加在基极上,使基极电流按电信号变化,通过晶体管的电流控制作用,就可以在负载上得到与原信号变化一样,但增强了的电信号 (较大的电压信号 Vo)。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分