C51单片机——通过使用定时器控制LED闪灭

这篇博客介绍了C51单片机如何利用定时器控制LED灯泡闪灭,详细讲解了定时器的原理,包括生活中的定时概念和单片机中的定时器工作方式。通过设置寄存器和编写C语言程序,实现了LED每隔0.05秒闪一次的效果。还探讨了如何改变间隔时间和避免手动计算初始值的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

0 引言

1 定时的原理

1.1 生活中的定时

1.2单片机中的定时器

2 C语言程序设计

2.1 定时器的内部功能

2.2 设置寄存器

2.3 实验程序

3 有两个小问题(算是延伸吧)

3.1 只能0.05s闪一次吗?

3.2 每次都要在草稿纸手算初始值好麻烦

4 最后


0 引言

其实,这个是可以通过软件延时计算器来生成自己需要的延时程序,而且效果非常好,但是既然要学习单片机,我们的目的就是要搞清楚硬件系统的知识,所以必须要学会如何用软件(程序)去控制硬件(处理器)。

1 定时的原理

1.1 生活中的定时

我们每个人都用过“定时”这个功能。比如说闹钟,我们需要学习1小时,然后定个1小时的闹钟,然后闹钟从59:59:59开始倒计时,直到00:00:00结束,闹钟响铃,学习结束,这个从我们的角度看来它是倒计时。单片机里的定时器原理也是这个,但是用的是正计时哈。

1.2单片机中的定时器

单片机的定时器,它是从某个值(你可以设定)加到某个值后停止。

这里要提到两个概念:①时钟周期;②机器周期。(下面用人话讲一下,可能不太严谨)

①时钟周期T:单片机上面有一个晶振,通电后它会产生一个工作频率f(我用的C51是11.0592MHz,板子不同频率可能不同,可以用放大镜看一下,他的参数刻在晶振的上面了),这个评率的倒数就是你用的这个板子的时钟周期,单位:s。

T = 1/f

②机器周期:一个机器周期 = n×时间周期;不同的板子,n的取值不同,C51系列的n是12(那我就以12说明了),单位也是:s。

说完这两个,开头说单片机的定时器的工作就是不停地加,而且是加1(计一个数),而每次+1,就要消耗一个机器周期(所有这就是我为啥要先解释①②),或者讲每隔一个机器周期就寄存器就会+1。

知道这个有啥用呢?因为我们要算出来,我们打算让LED隔多长时间闪一次啊,这就是目的。

现在我们打算让灯泡每隔0.05秒闪一次,即:

0.05 (s) = m × n/f (s)

n和f刚才提到了,我用我的板子的参数代进去举个例子吧。

 0.05 (s) = m × 12/11059200(s)

m =  46080(次)

 也就是说,寄存器加了四万多个1,所用时长大约0.05s。

闹钟是从你设定的某个值倒计时至00:00后停止计时,单片机中寄存计时是你设置某个值后不断+1,直到加到某个值后停止,那加到哪个数值才能停止呢?

51系列标准的单片机内部是有两个寄定时器T0和T1,每一个定时器(也就是寄存器)有16bit,最大可以存储2^16bit的数据,换成16进制就是可以储存0x00到0xFF,超过这个数值,就会发生溢出(overflow),从0xFF进位后再次变成0x00,所以如果我们可以检测到有进位的情况,说明我们设置的初值经过不断+1,到了最大值(是不是很像闹钟计时到了终值00:00呢),此时LED闪一次。

这就是所需的原理部分。下面讲一下如何将原理通过c程序的方式实现目标。

2 C语言程序设计

2.1 定时器的内部功

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hsing Chin

我们的目标是学到东西!加油。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值