您的位置:首页 > 编程语言 > C语言/C++

基于proteus的51单片机仿真实例五十六、定时器/计数器T0的外部计数实例

2017-05-08 21:27 393 查看
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中,启动仿真,按动按键,观察程序运行结果。下图是按动三次按键后的运行结果



6、可以看到,程序运行后,没有按键按下时,所有LED都被点亮了(但是程序开始我们设置了一句P1=0xff,关闭了所有LED,想一下,这是为什么?)
仔细观察当按动按键时,8位LED的变换情况,是否能够做出正确解释?

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐