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

#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; // 设置重置值,定时1s
				TL0 = 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工作在模式1
    TH0 = 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工作在模式1
    TH1 = 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 {
		; 
	 }
	 
	}
	
}

相关推荐

  1. 02.3 基于Verilog控制LED以不同频率闪烁

    2024-04-23 09:22:03       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-23 09:22:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-23 09:22:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-23 09:22:03       82 阅读
  4. Python语言-面向对象

    2024-04-23 09:22:03       91 阅读

热门阅读

  1. 自然语言处理(NLP)技术

    2024-04-23 09:22:03       33 阅读
  2. Android 8.1 删除Launcher桌面搜索框

    2024-04-23 09:22:03       32 阅读
  3. flask后端实践02-全局Response返回和异常处理

    2024-04-23 09:22:03       35 阅读
  4. 全志H616学习笔记

    2024-04-23 09:22:03       35 阅读
  5. 【Python快速上手(一)】

    2024-04-23 09:22:03       34 阅读
  6. 描述一下PHP与HTML和CSS的关系

    2024-04-23 09:22:03       35 阅读
  7. 每天一个数据分析题(二百八十四)

    2024-04-23 09:22:03       33 阅读
  8. 关于抖音 担保支付 订单同步 报错

    2024-04-23 09:22:03       36 阅读
  9. WordPress 谷歌SEO是否还有必要做?又该如何做?

    2024-04-23 09:22:03       35 阅读
  10. RabbitMQ传递序列化/反序列化自定义对象时踩坑

    2024-04-23 09:22:03       36 阅读