基于51单片机的定时器实现LED闪烁控制(CT107D)
引言
在嵌入式开发中,定时器是一个非常重要的外设,它可以用于实现精确的时间控制。本文将介绍如何在CT107D单片机综合训练平台上,利用51单片机的定时器T0实现LED灯的定时闪烁控制。具体功能如下:
-
L1指示灯:每隔1秒闪烁一次,即点亮0.5秒,熄灭0.5秒。
-
L8指示灯:每隔10秒闪烁一次,即点亮5秒,熄灭5秒。
通过本文,你将学习到如何使用51单片机的定时器模式1(16位定时器)来实现精确的定时控制,并掌握LED灯的控制方法。
硬件平台
本文使用的硬件平台是CT107D单片机综合训练平台,主控芯片为STC89C52RC,属于51单片机系列。平台上有多个LED灯,本文使用P0口的第0位(L1)和第7位(L8)来控制两个LED灯。
实现原理
1. 定时器T0模式1
51单片机的定时器T0有4种工作模式,本文使用模式1,即16位定时器模式。在该模式下,定时器的计数范围为0~65535,当计数器溢出时,会触发定时器中断。
-
定时器初值计算:
假设单片机晶振为12MHz,定时器的时钟频率为1MHz(每个机器周期为1us)。要实现50ms的定时,定时器的初值为: -
定时器初值 = 65536 - 50000 = 15536 其中,50000表示50ms对应的计数值(50ms / 1us = 50000)。
-
初值拆分:
定时器的初值需要分别写入TH0(高8位)和TL0(低8位): -
TH0 = (65536 - 50000) / 256;
-
TL0 = (65536 - 50000) % 256;
2. LED控制逻辑
-
L1指示灯:
每1秒翻转一次状态,实现0.5秒亮、0.5秒灭的效果。由于定时器每50ms触发一次中断,因此需要累积20次中断来实现1秒的定时。 -
L8指示灯:
每10秒翻转一次状态,实现5秒亮、5秒灭的效果。由于1秒的定时已经通过L1实现,因此只需要累积10次1秒的定时即可。
代码实现
以下是完整的代码实现:
#include <REGX52.H>
// 定义LED引脚
sbit L1 = P0^0; // L1指示灯
sbit L8 = P0^7; // L8指示灯
// 选择HC573锁存器
void SelectHC573()
{
P2 = (P2 & 0x1f) | 0x80; // 选择LED锁存器
}
// 初始化定时器T0
void InitTimer()
{
TMOD = 0x01; // 定时器0模式1(16位定时器)
TH0 = (65536 - 50000) / 256; // 50ms定时初值高8位
TL0 = (65536 - 50000) % 256; // 50ms定时初值低8位
ET0 = 1; // 使能定时器0中断
EA = 1; // 使能总中断
TR0 = 1; // 启动定时器0
}
// 定义计数器变量
unsigned char count_50ms = 0; // 50ms计数器
unsigned char count_1s = 0; // 1秒计数器
// 定时器0中断服务函数
void ServiceTimer() interrupt 1
{
TH0 = (65536 - 50000) / 256; // 重装定时器初值
TL0 = (65536 - 50000) % 256;
count_50ms++; // 50ms计数器加1
if(count_50ms == 20) // 1秒到达
{
count_50ms = 0; // 清零50ms计数器
count_1s++; // 1秒计数器加1
L1 = ~L1; // 每1秒翻转一次L1状态
if(count_1s == 10) // 10秒到达
{
count_1s = 0; // 清零1秒计数器
L8 = ~L8; // 每10秒翻转一次L8状态
}
}
}
// 主函数
void main()
{
SelectHC573(); // 选择锁存器
InitTimer(); // 初始化定时器
while(1)
{
// 主循环中不需要做任何事情
}
}
代码说明
-
SelectHC573函数:
用于选择HC573锁存器,确保P0口的输出能够正确控制LED灯。 -
InitTimer函数:
初始化定时器T0,设置为模式1,并装载50ms的定时初值。 -
ServiceTimer函数:
定时器T0的中断服务函数,每50ms触发一次中断。通过累积20次中断实现1秒的定时,并控制L1和L8的状态。 -
主函数:
初始化锁存器和定时器后,进入空循环,所有逻辑由定时器中断处理。
运行效果
-
L1指示灯:每1秒闪烁一次,亮0.5秒,灭0.5秒。
-
L8指示灯:每10秒闪烁一次,亮5秒,灭5秒。
总结
本文通过51单片机的定时器T0实现了LED灯的定时闪烁控制,展示了定时器的基本使用方法。通过修改定时器的初值和计数逻辑,可以实现更复杂的时间控制功能。希望本文对你理解51单片机的定时器有所帮助!
相关文章:
基于51单片机的定时器实现LED闪烁控制(CT107D)
引言 在嵌入式开发中,定时器是一个非常重要的外设,它可以用于实现精确的时间控制。本文将介绍如何在CT107D单片机综合训练平台上,利用51单片机的定时器T0实现LED灯的定时闪烁控制。具体功能如下: L1指示灯:每隔1秒闪烁…...
【java】作业1
1.需求:(1)机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、原价、月份和头等舱或经济舱;(2)按照如下规则计算机票价格:旺季(5-10月)头等舱9折,经济…...
2025有哪些关键词优化工具好用
越来越多的企业和个人开始意识到搜索引擎优化(SEO)对于网站曝光和业务增长的重要性。在SEO优化的过程中,关键词优化占据着至关重要的地位。关键词是用户在搜索引擎中输入的词语,优化关键词有助于提高网站在搜索结果中的排名&#…...
【WPSOffice】汇总
写在前面 PPT篇 幻灯片母版 通过母版功能统一幻灯片的样式、字体、颜色等,提高整体一致性。 统一设置模板样式 字体安装 查找到字体并安装。 在WPS PPT(WPS演示)中,以下是最常用的十个功能,能够帮助用户高效制作…...
海康摄像头IPV6模式,手动,自动,路由公告
海康摄像头DS-2DC7220IW-A 网络设置中的IPv6配置选项。IPv6是互联网协议(IP)的第六版,用于替代IPv4,提供更多的IP地址和改进的网络功能。图片中的选项允许用户选择如何配置设备的IPv6网络连接: 手动:用户可…...
Transformer(3): Add Norm
文章目录 残差连接层归一化作用和其它归一化的比较 dropout基本思想实现方式 残差连接 目的是解决深层网络中梯度消失的问题。 解决方法是进行跳跃连接,即多出一条输出链路,将输入X直接接到输出层上。 公式为 F(X) X。 这样每一层求导的时候至少能够…...
SpringBoot多数据源实践:基于场景的构建、实现和事务一体化研究
1. 多数据源应用场景剖析 1.1 业务驱动的多数据源需求 数据量与业务复杂度引发的分库分表:在现代企业级应用中,随着业务的不断拓展和用户量的持续增长,数据量呈爆炸式增长。例如,在大型电商平台中,用户数据、订单数据…...
SOCKET建立简单的tcp服务端与客户端通信
socket是什么 socket可以使两台机子建立连接,就像连接风扇与电源的插座一样,socket可以使服务端与客户端建立连接,服务端就像供电厂,而客户端就像用电器,而socket就是连接二者的插座。 建立简单的连接 如果我们想在客…...
C语言-章节 1:变量与数据类型 ——「未初始化的诅咒」
在那神秘且广袤无垠的「比特大陆」上,阳光奋力地穿过「内存森林」中错综复杂的代码枝叶缝隙,洒下一片片斑驳陆离、如梦似幻的光影。林间的空气里,弥漫着一股浓郁的十六进制锈蚀味,仿佛在诉说着这片森林中隐藏的古老秘密。 一位零基…...
【HarmonyOS Next】图片选择方案
背景 封装一个选择图片和调用拍照相机的按钮,展示api13下选择图片和调用相机,可以使用不申请用户权限的方式,进行图片的选择和修改。但是,目前方案并未包含上传图片保存的功能,仅提供图片选择或者拍照后,图…...
【C语言】移除元素
移除元素 给你一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后…...
Python----Python高级(网络编程:网络高级:多播和广播,C/S架构,TCP,UDP,网络编程)
一、多播和广播 1.1、多播 1.1.1、定义 多播(Multicast)也称为组播,是一种一对多的通信方式,将信息从单个源发送到 多个特定的接收者。这些接收者组成一个特定的多播组,只有加入该组的设备才会接 收和处理多播数据。…...
CES 2025 上的创新方案——无电池智能纸尿裤-AP4470
这款纸尿裤采用了可重复使用的组件,通过检测液体的存在来增强老年人和婴儿的护理,即使电极上滴了几滴液体也是如此。 其原理为尿液中的水分作为电解液,将尿布里安装的两种导电性材料作为正负极,充当电池,从而产生300m…...
Java 运算符
运算符用于对变量和值执行运算。 在下面的示例中,我们使用 运算符将两个值相加: int x 100 50;尽管经常使用运算符将两个值加在一起,例如在上面的示例中,但是它也可以用于将一个变量和一个值或一个变量和另一个变量加在一…...
【一文读懂】什么是MVVM?
MVVM Vue 是一个渐进式的 JavaScript 框架,它采用了 MVVM(Model-View-ViewModel)设计模式,这使得它能够高效地进行数据绑定和用户界面的更新。 概念 1. Model(模型) 含义:Model 代表应用程序…...
GCD of Subset
法1: const int N1e6; signed main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int n,k; cin>>n>>k;vector<int>a(n1),cnt(N10);/*桶cnt不要用map实现!!!速度太慢*/vector<vector<int>>…...
BY组态:工业自动化的未来,触手可及
在工业4.0的浪潮下,智能化、数字化已成为制造业发展的核心驱动力。作为工业自动化领域的重要工具,组态软件在实现设备监控、数据采集、流程控制等方面发挥着不可替代的作用。然而,传统的组态软件往往存在开发周期长、学习成本高、灵活性不足等…...
DeepSeek在linux下的安装部署与应用测试
结合上一篇文章,本篇文章主要讲述在Redhat linux环境下如何部署和使用DeepSeek大模型,主要包括ollama的安装配置、大模型的加载和应用测试。关于Open WebUI在docker的安装部署,Open WebUI官网也提供了完整的docker部署说明,大家可…...
华为昇腾920b服务器部署DeepSeek翻车现场
最近到祸一台HUAWEI Kunpeng 920 5250,先看看配置。之前是部署的讯飞大模型,发现资源利用率太低了。把5台减少到3台,就出了他 硬件配置信息 基本硬件信息 按照惯例先来看看配置。一共3块盘,500G的系统盘, 2块3T固态…...
JavaScript 内置对象-数组对象
在JavaScript中,数组(Array)是一种非常重要的数据结构,它允许我们以列表的形式存储多个值,并提供了丰富的内置方法来操作这些值。无论是处理简单的数值集合还是复杂的对象数组,数组对象都能提供强大的支持。…...
从 0 到 1:QiweAPI 快速上手开发手册与进阶实战技巧
、在数字化转型的浪潮中,企业微信已成为企业连接客户的最短路径。然而,原生后台的局限性往往让开发者在面对复杂的自动化需求时捉襟见肘。 QiweAPI(www.qiweapi.com)应运而生,它通过更底层、更丰富的接口封装ÿ…...
JSM8837DTR 1.8A/12V 低压 H 桥电机驱动芯片
在消费电子、智能硬件、小型机器人与电池供电运动控制场景中,一颗小体积、低功耗、强驱动、高可靠的电机驱动芯片,往往决定产品续航、响应速度与长期稳定性。杰盛微半导体(JSMSEMI)推出的JSM8837DTR,正是面向这类场景打…...
从MII到RGMII:你的嵌入式网卡PCB面积是怎么省下来的?一个硬件老鸟的笔记
从MII到RGMII:硬件工程师的PCB布局优化实战指南 当我在设计第一块千兆以太网卡时,面对密密麻麻的GMII接口走线几乎崩溃——8位数据线、控制信号和时钟线让本已紧张的PCB空间雪上加霜。直到发现RGMII这个"布线救星",才真正体会到接口…...
蓝桥杯C/C++真题刷题攻略:从“猜生日”到“蛇形填数”,这5类题最容易拿分
蓝桥杯C/C竞赛五大高频题型深度解析与实战技巧 参加蓝桥杯竞赛的C/C选手们常常面临一个共同难题:如何在有限时间内快速识别题目类型并找到最优解法?根据多年竞赛辅导经验,我总结出五类出现频率最高、最容易拿分的题型,它们分别是日…...
3分钟解锁Android TV遥控器新姿势:免费虚拟鼠标工具终极指南
3分钟解锁Android TV遥控器新姿势:免费虚拟鼠标工具终极指南 【免费下载链接】matvt Virtual Mouse for Android TV that can be controlled via remote itself. 项目地址: https://gitcode.com/gh_mirrors/ma/matvt 还在为Android TV上那些难以点击的小按钮…...
性能优化终极方案:如何让Dwains Lovelace Dashboard运行更流畅
性能优化终极方案:如何让Dwains Lovelace Dashboard运行更流畅 【免费下载链接】dwains-lovelace-dashboard An fully auto generating Home Assistant UI dashboard for desktop, tablet and mobile by Dwains for desktop, tablet, mobile 项目地址: https://gi…...
月球基底建造 第一卷第一章 真空绝境,双员拓疆与秦衍初代算力基建
本故事纯属虚构,所有设定、剧情、场景均为科幻艺术创作,仅供娱乐与脑洞参考。虚空横亘三十八万公里,地月之间不存在任何缓冲介质。大气、磁场、生物圈、气候循环、自然调节机制,所有地球生命赖以存续的天然屏障,在这片…...
OpenClaw智能诊断工具oc-doctor:自动化运维与AI助手健康管理
1. 项目概述:一个为OpenClaw量身定制的“家庭医生”如果你正在使用OpenClaw或Claude Code来构建自己的AI助手或自动化工作流,那么你很可能已经体会过那种“半夜救火”的滋味。配置文件里某个参数不小心改错了,导致机器人行为异常;…...
AISMM成熟度评估落地手册(SITS2026官方未公开的ROI验证路径)
更多请点击: https://intelliparadigm.com 第一章:SITS2026分享:AISMM评估的ROI AISMM(AI Security Maturity Model)作为新兴的AI系统安全成熟度评估框架,在SITS2026峰会上被多家头部金融与医疗科技企业验…...
创业个体2026 AI数字人软件选型:10 款轻量化工具易上手省成本
摘要如果你正考虑用AI数字人开启副业或为线下生意引流,市面上几十款工具鱼龙混杂,选错一个就是几百上千元的试错成本。本文抛开厂家营销话术,用真实的评测标准实测了10款轻量化AI数字人软件,从功能完整性、上手难度、成本控制三个…...
