1、本例使用定时器/计数器T0的外部计数方式统计计按键次数,并将结果送P1口的8位LED显示,程序实现每按一次按键,按键次数加1,
2、在keil c51中新建工程ex44,编写如下程序代码,编译并生成ex44.hex文件
#include <reg51.h>   //包含头文件
unsigned char counter;          //全局变量,定义按键次数
//
void main(void)
{
  counter = 0;          //按键次数清0
 P1 = 0xff;           //关闭所有LED
 TMOD = 0X06;    //使用定时器T0的计数工作方式,工作于工作方式2
 TH0 = 256-1;    //定时器T0的高8位赋值,计数值为1
 TL0 = 256-1;    //定时器T0的低8位赋值
 ET0 = 1;            //允许计数中断
 EA = 1;              //开总中断
 TR0 = 1;     //启动计数方式工作
 while(1)
 {
   P1 = counter;    //按键次数送P1口
 }
}
//T0计数中断服务函数
void counter0(void) interrupt 1 using 0
{
 counter++;         //按键次数加1
}
 
3、在proteus中新建仿真文件ex44.dsn,电路原理图如下所示:

 
5、将ex44.hex文件载入at89c51中,启动仿真,按动按键,观察程序运行结果。下图是按动三次按键后的运行结果
基于proteus的51单片机仿真实例五十六、定时器/计数器T0的外部计数实例
6、可以看到,程序运行后,没有按键按下时,所有LED都被点亮了(但是程序开始我们设置了一句P1=0xff,关闭了所有LED,想一下,这是为什么?)
仔细观察当按动按键时,8位LED的变换情况,是否能够做出正确解释?
基于proteus的51单片机仿真实例五十六、定时器/计数器T0的外部计数实例

相关文章:

  • 2021-11-10
  • 2021-11-15
  • 2021-10-03
  • 2021-04-18
  • 2021-09-16
  • 2021-09-09
  • 2021-11-28
  • 2021-04-08
猜你喜欢
  • 2021-10-12
  • 2021-09-28
  • 2021-11-27
  • 2021-07-13
  • 2021-10-13
  • 2021-10-27
  • 2022-01-15
相关资源
相似解决方案