单片机按键按五次灯亮

如题所述

单片机如何设置灯L1到L8循环亮5次的程序:例题:使LED灯先全部闪五次,再实现从L1到L8依次亮起,最后实现从L1到L8依次熄灭。(注:扩展方式为io,即J13跳帽接到io处)#include"reg52.h"流水灯程序最简单了,而且在知道这里可以搜到无数个例子。循环5次停下来,用for控制循环5次,结束后,用一个while(1); 语句就停了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2022-12-13
最近一段时间在准备单片机考试,复习过程中发现自己在平时写作业的过程中很少用到计数器,大部分情况下都是在用定时器,因此复习看到有关定时器的内容时很是吃力,后来好好温习了一下课本,才对计数器有了一点了解。单片机课程虽然结束了,课设也搞完了,但是在这一过程中暴露了很多的问题还是应该引起重视的,很有必要记录一下。

问题描述
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.

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

电路图设计
在这里插入图片描述
电路图的解释
题目要求LED灯接P2.0,且使用灌电流的接法。在关于计数器的那部分,要求采用计数器0,方式2的方式。在关于计时器的内容中提到,当使用计数器时需要在外部引脚T0(P3.4)或T1(P3.5)提供一个能够进行负跳变的设备。在该电路图中,按键开关起到提供负跳变的角色。

代码实现:
//-----------------------------------------------------
// 计数器 方式2
// 开关按5次LED灯状态转换一次
//-----------------------------------------------------
#include<reg51.h>
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;

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
关于TMOD设置可以参考我的另一篇博客定时器|计数器TMOD设置

仿真结果
在这里插入图片描述
相似回答