51单片机学习--按键控制流水灯模式定时器时钟


TMOD负责确定T0和T1的工作模式,TCON控制T0和T1的启动或停止计数,同时包含定时器状态
TF1:定时器1溢出标志
TF0:定时器0溢出标志
0~65535 每隔1微秒计数器+1,总时间65535微秒,赋上初值64535,则只有1000微秒即1毫秒
第一步:编写Timer_Init()
首先配置TMOD

所以初始化TMOD = 0x01; //0000 0001
整体操作:TMOD = TMOD & 0xF0; //低四位清零,高四位不变
TMOD = TMOD | 0x01; //最低位置1,其他位不变
接下来配置TCON

TF0 = 0;
TR0 = 1;
还要配置TH0和TL0
用64535,存在这两个盒子里,盒子最大只能存八字节也就是256,所以
TH0 = 64535 / 256;
TL0 = 64535 % 256;
最后配置中断系统

要打开的开关置1
ET0 = 1;
EA = 1;
PT0 = 0;
来看看代码
#include <REGX52.H>void Timer0_Init(void) //1毫秒@11.0592MHz
{TMOD &= 0xF0; //设置定时器模式TMOD |= 0x01; //设置定时器模式TL0 = 0x66; //设置定时初值TH0 = 0xFC; //设置定时初值TF0 = 0; //清除TF0标志TR0 = 1; //定时器0开始计时//中断系统ET0 = 1;EA = 1;PT0 = 0;
}void main()
{Timer0_Init();while(1){}
}unsigned int T0Count;
void Timer0_Routine() interrupt 1
{TL0 = 0x66; //设置定时初值TH0 = 0xFC; //设置定时初值T0Count ++;if(T0Count >= 1000){T0Count = 0;P2_0 = ~P2_0;}
}
接下来把定时器模块化
创建Timer0头文件和.c文件存放Timer0_Init()
中断函数保留在主函数中,根据不同的需要进行修改
然后把T0Count 改为静态局部变量,使之生命周期与文件相同,否则执行完一次之后会被初始化
利用按键控制流水灯流动方向的主函数代码:
Key函数读取按键,按一次改变一次流水方向,每500毫秒中断一次,判断流水模式进行移位
crol 是循环左移函数 , _cror_是循环右移函数,需要INTRINS.H头文件
#include <REGX52.H>
#include <INTRINS.H>
#include "Timer0.h"
#include "Key.h"unsigned char KeyNum, LEDMode;void main()
{P2 = 0xFE; // 1111 1110 点亮最后一位,然后利用循环移位函数_crol_ 和_cror_Timer0_Init();while(1){KeyNum = Key();if(KeyNum){if(KeyNum == 1){LEDMode ++;if(LEDMode >= 2) LEDMode = 0;}}}
}void Timer0_Routine() interrupt 1
{static unsigned int T0Count;TL0 = 0x66; //设置定时初值TH0 = 0xFC; //设置定时初值T0Count ++;if(T0Count >= 500) //每500毫秒移位一次,LEDMode决定方向{T0Count = 0;if(LEDMode == 0) P2 = _crol_(P2, 1);if(LEDMode == 1) P2 = _cror_(P2, 1);}
}
而定时器时钟只需要在此基础上进行修改,利用之前模块化好的LCD1602模块和Timer0模块,下面给出主函数:
#include <REGX52.H>
#include "LCD1602.h"
#include "Timer0.h"
#include "Delay.h"unsigned int Sec, Min, Hour;void main()
{LCD_Init();Timer0_Init();LCD_ShowString(1, 1, "Clock:");LCD_ShowString(2, 1, " : :");while(1){LCD_ShowNum(2, 1, Hour, 2);LCD_ShowNum(2, 4, Min, 2);LCD_ShowNum(2, 7, Sec, 2);}
}void Timer0_Routine() interrupt 1
{static unsigned int T0Count;TL0 = 0x66; //设置定时初值TH0 = 0xFC; //设置定时初值T0Count ++;if(T0Count >= 1000){T0Count = 0;Sec ++;if(Sec >= 60) Sec = 0, Min ++;if(Min >= 60) Min = 0, Hour ++;if(Hour >= 24) Hour = 0;}
}

相关文章:
51单片机学习--按键控制流水灯模式定时器时钟
TMOD负责确定T0和T1的工作模式,TCON控制T0和T1的启动或停止计数,同时包含定时器状态 TF1:定时器1溢出标志 TF0:定时器0溢出标志 0~65535 每隔1微秒计数器1,总时间65535微秒,赋上初值64535,则只…...
Django教程_编程入门自学教程_菜鸟教程-免费教程分享
教程简介 Django是一个开放源代码的Web应用框架,由Python写成。采用了MTV的框架模式,即模型M,视图V和模版T。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统…...
VGG卷积神经网络-笔记
VGG卷积神经网络-笔记 VGG是当前最流行的CNN模型之一, 2014年由Simonyan和Zisserman提出, 其命名来源于论文作者所在的实验室Visual Geometry Group。 测试结果为: 通过运行结果可以发现,在眼疾筛查数据集iChallenge-PM上使用VGG…...
Python爬虫如何实现IP代理池搭建
大家好,作为一名IP代理产品供应商,我知道很多人在使用Python爬虫时遇到了一些麻烦。有时候,我们的爬虫在爬取过程中会被目标网站识别并封禁IP,导致我们的爬取任务受阻。今天我要分享的就是如何搭建一个高效稳定的IP代理池…...
单例模式:保证一个类只有一个实例
单例模式:保证一个类只有一个实例 什么是单例模式? 在软件开发中,有些类只需要一个实例,比如数据库连接池、线程池等。单例模式就是一种设计模式,用于确保一个类只有一个实例,并提供一个全局访问点。 实…...
【新版系统架构补充】-七层模型
网络功能和分类 计算网络的功能 :数据通信、资源共享、管理集中化、实现分布式处理、负载均衡 网络性能指标:速率、带宽(频带宽度或传送线路速率)、吞吐量、时延、往返时间、利用率 网络非性能指标:费用、质量、标准化…...
第2章 C语言概述
本章介绍以下内容: 运算符: 函数:main()、printf() 编写一个简单的C程序 创建整型变量,为其赋值并在屏幕上显示其值 换行字符 如何在程序中写注释,创建包含多个函数的程序,发现程序的错误 什么是关键字 C程…...
vscode vue3开发常用插件(附Prettier格式化配置)
必不可少插件(名称可能不全): 1、Chinese (Simplified) (简体中文) Language 2、Prettier - Code formatter 3、Vue 3 Snippets 4、Vue Language Features (Volar) 可选插件: 5、Auto Close Tag 6、Vue Theme Prettier格式化配置: 按ctr…...
【微信小程序】van-uploader实现文件上传
使用van-uploader和wx.uploadFile实现文件上传,后端使用ThinkPHP。 1、前端代码 json:引入van-uploader {"usingComponents": {"van-uploader": "vant/weapp/uploader/index"} }wxml:deletedFile是删除文件函…...
人工智能在计算机视觉中的应用与挑战
引言 计算机视觉是人工智能领域的一个重要分支,旨在让计算机能够像人一样理解和解释视觉信息,实现图像和视频的自动识别、理解和分析。计算机视觉技术已经在许多领域产生了深远的影响,如人脸识别、自动驾驶、医学影像分析等。本篇博客将深入…...
以太网接口指示灯状态分析和电路设计
一、RJ45以太网连接器介绍 以带网络隔离变压器的RJ45接头为例,如HR911105A,其技术参数如下 原理框图 指示灯部分 二、PHY芯片 phy芯片以DP83848CVV/NOPB为例,查看数据手册。引脚26,引脚27和引脚28和LED灯相关,如下截…...
Redis的基础
一、进入redis 内部 / 关闭 # 方式一: // 进入redis redis-cli // 有密码输入密码 :auth [username] password auth 123456 # 方式二: // 进入redis 并且输入密码 redis-cli -a 123456// 如果在docker 里面的则可以 docker exec -it redis…...
LeetCode 626. 换座位
题目链接:LeetCode 626. 换座位 题目描述 表名:Seat 编写SQL查询来交换每两个连续的学生的座位号。如果学生的数量是奇数,则最后一个学生的id不交换。 按 id 升序 返回结果表。 查询结果格式如下所示。 示例1: 题目分析 如…...
华为、阿里巴巴、字节跳动 100+ Python 面试问题总结(六)
系列文章目录 个人简介:机电专业在读研究生,CSDN内容合伙人,博主个人首页 Python面试专栏:《Python面试》此专栏面向准备面试的2024届毕业生。欢迎阅读,一起进步!🌟🌟🌟 …...
hash 模式和 history 模式的实现原理
hash 模式和 history 模式的实现原理: #后面的 hash 值的变化不会导致浏览器向服务器发出请求,浏览器不发出请求,就不会刷新页面。通过监听 hashchange 事件的变化可以知道 hash 值发生了哪些变化,然后根据 hash 值的变化来实现更…...
并发编程Part 2
1. JMM 问题:请你谈谈你对volatile的理解? volitile 是 Java 虚拟机提供的一种轻量级的同步机制 ,三大特性: 保证可见性 不保证原子性 禁止指令重排 线程之间如何通信? 通信是指线程之间以如何来交换信息。一般线程之间的通信…...
springboot异步多线程的实现
1、配置线程池相关参数 package com.xxx.test.config;import lombok.extern.slf4j.Slf4j; import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation…...
测试相关基础概念与常见开发模型
目录 1. 什么是需求 1.1 需求的定义 1.2 为什么有需求?为什么需求对软件测试人员如此重要? 1.3 测试人员眼里的需求(重要) 1.4 如何深入了解需求 2. 测试用例 2.1 什么是测试用例 2.2 为什么有测试用例 3. 什么是BUG 3.1 BUG定义 3.2 如何描述一个BUG 3.3 如何定义bug的级别 …...
MySQL安装详细教程!!!
安装之前,先卸载你之前安装过的数据库程序,否则会造成端口号占用的情况。 1.首先下载MySQL:MySQL :: Download MySQL Community Server(下载路径) 2.下载版本不一样,安装方法略有不同;(版本5的安装基本一致,…...
前端下载文化部几种方法(excel,zip,html,markdown、图片等等)和导出 zip 压缩包
文章目录 1、location.href2、location.href3、a标签4、请求后端的方式5、文件下载的方式6、Blob和Base647、下载附件方法(excel,zip,html,markdown)8、封装下载函数9、导出 zip 压缩包相关方法(流方式) 总结 1、location.href //get请求 window.location.href url;2、locati…...
Chart.js与Lightning Web Components集成:lwcc使用指南
Chart.js与Lightning Web Components集成:lwcc使用指南 【免费下载链接】awesome A curated list of awesome Chart.js resources and libraries 项目地址: https://gitcode.com/GitHub_Trending/awesome/awesome Chart.js作为一款功能强大的开源图表库&…...
【Excel 公式学习】告别“”时代:TEXTJOIN 函数的万能用法
在 Excel 的世界里,合并文本曾是一件让人头疼的“体力活”。如果你还在用 & 符号点到手软,或者为了去掉多余的逗号而写复杂的 IF 嵌套,那么今天的主角——TEXTJOIN,将彻底改变你的工作流。一、 为什么要弃用旧方法?…...
别再死磕ADAMS了!用Solidworks+Simulink做机电联合仿真的保姆级避坑指南
从ADAMS到SolidworksSimulink:机电联合仿真的高效转型指南 1. 为什么工程师正在放弃ADAMS? 在机电系统仿真领域,ADAMS曾长期占据主导地位,但近年来越来越多的工程师开始转向更高效的解决方案。这种转变并非偶然——ADAMS的复杂操作…...
Dexmal 原力灵机:开源 Dexbotic,落下具身智能的“第三十七手”
在技术领域,我们常常被那些闪耀的、可见的成果所吸引。今天,这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力,让我们得以一窥未来的轮廓。然而,作为在企业一线构建、部署和维护复杂系统的实践者,我们深知…...
软件设计原则详解:开闭原则、里氏替换原则、迪米特法则
软件设计三大核心原则(开闭里氏替换依赖倒置)全网最细讲解,附Java正反例|面试必背 在日常开发中,你一定遇到过这些痛点: 加个小功能,改出一堆Bug继承乱用,逻辑越跑越偏换个数据库/组…...
Cursor Pro 激活工具深度解析:破解AI编辑器限制的技术架构与实践指南
Cursor Pro 激活工具深度解析:破解AI编辑器限制的技术架构与实践指南 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve re…...
无线通信实战:如何用双线反射模型优化基站信号覆盖(附Python仿真代码)
无线通信实战:双线反射模型在基站信号覆盖优化中的应用与Python实现 站在城市高楼的天台上,通信工程师李明正用场强仪测试新建基站的信号覆盖情况。仪表显示某些区域存在明显的信号波动——这正是地面反射导致的典型问题。在5G网络部署和物联网设备激增的…...
收藏!小白/程序员入行AI应用开发必看,别被招聘要求吓退(附实操资源)
如果你是程序员小白,或是想转型AI应用开发的从业者,听我一句劝——大胆投简历,别被招聘启事上的“精通大模型底层原理”“2年以上AI相关经验”吓住!很多时候,招聘要求写的只是企业的“理想画像”,我和身边不…...
三步解锁WeMod专业版:Wand-Enhancer零基础免费教程
三步解锁WeMod专业版:Wand-Enhancer零基础免费教程 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer 你是否厌倦了WeMod专业版每月高昂的订阅费…...
从零到自动化:用FastAPI+Requests打造你的第一个接口测试平台(告别Postman手动点点点)
从零构建企业级接口自动化测试平台:FastAPIRequests实战指南 在当今快速迭代的软件开发周期中,接口测试已成为保障产品质量的关键环节。传统手工测试工具如Postman虽然直观易用,但面对频繁变更的接口和大量回归测试场景时,往往显得…...
