51单片机:计数器 方式2 外部开关按5次LED灯状态发生改变

51单片机:计数器 方式2 外部开关按5次LED灯状态发生改变

最近一段时间在准备单片机考试,复习过程中发现自己在平时写作业的过程中很少用到计数器,大部分情况下都是在用定时器,因此复习看到有关定时器的内容时很是吃力,后来好好温习了一下课本,才对计数器有了一点了解。单片机课程虽然结束了,课设也搞完了,但是在这一过程中暴露了很多的问题还是应该引起重视的,很有必要记录一下。

问题描述

Supposing:

The oscillator frequency is 12 MHZ, a LED is connected to P2.0 in the sink current mode. The LED is turned off after power.Write the program which can change the state of the LED when the button is pressed five times. Use the counter 0 and let it work at mode 2.

(哈哈哈,看到的题确实是英文描述的,我的单片机老师是位特别负责任的老师,对于我们的要求也比较严格,有时课上带我们学习新的芯片就直接给我们看英文的,可怜我这个英语渣,听说考试也是全英文卷子,有点怂啊)

电路图设计

51单片机:计数器 方式2 外部开关按5次LED灯状态发生改变_第1张图片
电路图的解释
题目要求LED灯接P2.0,且使用灌电流的接法。在关于计数器的那部分,要求采用计数器0,方式2的方式。在关于计时器的内容中提到,当使用计数器时需要在外部引脚T0(P3.4)或T1(P3.5)提供一个能够进行负跳变的设备。在该电路图中,按键开关起到提供负跳变的角色。

代码实现:

//-----------------------------------------------------
//          计数器  方式2  
//          开关按5次LED灯状态转换一次
//-----------------------------------------------------
#include
sbit LED = P2^0;
sbit KEY = P3^4;
void main()
{
	TMOD = 0x06;   //计数模式,方式2
	TL0 = TH0 = (256-5); //计数5次;
	TR0 = 1;	  //启动T0
	IT0 = 1;      //外部中断请求0,中断请求信号从高电平到低电平负跳变有效
	ET0 = 1;      //允许T0中断
	EA  = 1;      //开启中断
	LED = 1;      //初上电时灯熄灭
	while(1);
}

void EX0_INT(void) interrupt 1
{
	LED = !LED;
	
}

关于TMOD设置可以参考我的另一篇博客定时器|计数器TMOD设置

仿真结果

51单片机:计数器 方式2 外部开关按5次LED灯状态发生改变_第2张图片
这个GIF录制好烦,有好用的额吗?求推荐

你可能感兴趣的:(51单片机)