51单片机使用两个按钮控制LED灯不同频率的闪烁

news/2024/9/24 12:38:43/
#include <reg52.h>sbit button1 = P1^1; // 间隔2秒的按钮
sbit button2 = P1^5; // 间隔0.6秒的按钮sbit led = P1^3;unsigned int cnt1 = 0; // 设置LED1灯的定时器溢出次数
unsigned int cnt2 = 0; // 设置LED2灯的定时器溢出次数
unsigned int flg1 = 0; // 模式1的标识值
unsigned int flg2 = 0; // 模式2的标识值
unsigned int flg = 0; // 选择模式方式 1或者2// 模式1灯的闪烁逻辑
void enableled(){if(TF0) // 定时器T0溢出{TF0 = 0; // 清除溢出标志TH0 = 0xB8; // 设置重置值,定时1sTL0 = 0x00;cnt1++;// 间隔 0.02*100 = 2秒if(cnt1 > 100){cnt1 = 0;led = !led; // 翻转LED1状态}}
}
// 模式2灯的闪烁模式
void enableled2(){if(TF1) // 定时器T1溢出{TF1 = 0; // 清除溢出标志TH1 = 0xB8; // 设置重置值;TL1 = 0x00;cnt2++;// 间隔 0.02*30 = 0.6秒if(cnt2 > 30){cnt2 = 0;led = !led; // 翻转LED1状态}}
}// 定时器T0
void Init_Timer0()
{TMOD |= 0x01;; // 定时器T0工作在模式1TH0 = 0xB8; // 设置重置值,高位 定时0.02秒 a = 1/11.0592(时钟周期) b = 12* a (机器周期) (256*256 -1) - ( 0.02 / b ) TL0 = 0x00; //设置重置值,低位TR0 = 1; // 启动T0}// 定时器T1
void Init_Timer1()
{TMOD |= 0x10;; // 定时器T1工作在模式1TH1 = 0xB8; // 设置重置值,高位 定时0.02秒 a = 1/11.0592(时钟周期) b = 12* a (机器周期) (256*256 -1) - ( 0.02 / b ) TL1 = 0x00; //设置重置值,低位TR1 = 1; // 启动T0}void main(){while(1){// 当按钮1按下时, 使用的上拉电阻模式if(button1 == 0) {flg1 = 1; // 按钮1的flg初始值为1;flg2 = 3; // 按钮2的flg置为3;flg = 1; // 当前的运行模式是1;} else {flg1 = 2; // 如果按钮1没有按下,就设状态是2;}// flg1状态是1时,初始化T0;if(flg1 == 1){Init_Timer0();// flg1状态是2 时,并且没有启用按钮2;让灯按照模式1闪烁;} else if (flg1 == 2 && flg == 1) {enableled();// 其他状态不需要闪烁} else {; }// 当按钮2按下时if(button2 == 0) {flg2 = 1; // 按钮2的flg初始值为1;flg1 = 3; // 按钮1的flg置为3;flg = 2; // 当前的运行模式是2;} else {flg2 = 2; // 如果按钮2没有按下,就设状态是2;}// flg2状态是1时,初始化T1;if(flg2 == 1){Init_Timer1();// flg2状态是2 时,并且没有启用按钮1;让灯按照模式2闪烁;} else if (flg2 == 2 && flg == 2){enableled2();// 其他状态不需要闪烁} else {; }}}


http://www.ppmy.cn/news/1438250.html

相关文章

alert() 函数功能

基本的 alert() 函数用法&#xff1a; 最基本的用法是通过 alert() 函数显示一条简单的文本消息&#xff0c;如下所示&#xff1a; alert("Hello, World!");这将在浏览器中显示一个消息框&#xff0c;其中包含文本 “Hello, World!”。 显示变量的值&#xff1a; a…

HDFS分布式文件存储系统

1-1 HDFS的存储机制 按块&#xff08;block&#xff09;存储 hdfs在对文件数据进行存储时&#xff0c;默认是按照128M(包含)大小进行文件数据拆分&#xff0c;将不同拆分的块数据存储在不同datanode服务器上 拆分后的块数据会被分别存储在不同的服务器上 副本机制 为了保证hdfs…

卸载jenkins和docker

要卸载Docker中部署的Jenkins以及相关的容器和数据卷&#xff0c;您可以按照以下步骤操作&#xff1a; 卸载Jenkins容器及关联数据卷 停止并删除Jenkins容器&#xff1a; 使用Docker命令找到Jenkins容器的ID&#xff08;如果您还不知道&#xff09;&#xff0c;然后停止并删除…

如何在PostgreSQL中使用索引覆盖扫描提高查询性能?

文章目录 解决方案1. 创建合适的索引2. 确保查询能够使用索引覆盖扫描3. 调整查询以利用索引覆盖扫描4. 监控和调优 示例代码1. 创建索引2. 编写查询3. 检查是否使用索引覆盖扫描4. 调整索引 总结 在PostgreSQL中&#xff0c;索引是提高查询性能的关键工具之一。索引允许数据库…

Elment ui 表单上滑 加载更多数据方法

方法记录 方便以后使用 方法一&#xff1a; <template><div><el-table:data"tableData"height"calc(100vh - 300px)"ref"table":show-header"false"><el-table-columnprop"date"label"日期"…

小型内衣裤洗衣机哪个牌子好?六大选购锦囊私藏分享

内衣洗衣机是现代家庭必不可少的小家电&#xff0c;它不仅方便快捷&#xff0c;还能够保持衣物清洁和卫生。然而&#xff0c;市场上洗衣机品牌众多&#xff0c;质量和性能参差不齐&#xff0c;使得消费者购买时难以做出选择。那么&#xff0c;小型内衣裤洗衣机哪个牌子好&#…

mysql的约束和表关系

根据查询的结果&#xff0c;复制出一个新表 create table newTable AS select * from oldTable; create table newPeople AS select * from day2_test.people; 约束 引入&#xff1a;如果某一列如id列&#xff0c;有重复的数据&#xff0c;无法准确定位&#xff0c;有的列有空…

力扣HOT100 - 200. 岛屿数量

解题思路&#xff1a; 岛屿题目一般使用dfs。 1.判断是否越界 2.用0&#xff0c;1&#xff0c;2三个状态标识当前格子的状态&#xff08;三个状态比两个状态更清晰&#xff09; 3.向周围四个方向遍历 class Solution {public int numIslands(char[][] grid) {int cnt 0;fo…