【蓝桥杯单片机进阶强化-04】PWM信号控制呼吸流水灯

【蓝桥杯单片机进阶强化-04】PWM信号控制呼吸流水灯

内容来自小蜜蜂老师
小蜜蜂老师博客链接
在这里插入图片描述

#include "regx52.h"
#include "absacc.h"
 
sbit S7 = P3^0;
sbit S4 = P3^3;
 
unsigned char pwm = 0;          
unsigned char pwm_duty = 0;              
unsigned char times = 0;        
unsigned char led_go = 0;       
unsigned char stat_go = 0;      
unsigned char stat = 0;         
unsigned char key_puse = 0;     
 
unsigned char code SMG_duanma[18]=
		{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
		 0x88,0x80,0xc6,0xc0,0x86,0x8e,0xbf,0x7f};
 
void DelaySMG(unsigned int t)
{
	while(t--);
}
 
void DisplaySMG_Bit(unsigned char pos, unsigned char value)
{
	XBYTE[0xE000] = 0xff;
	XBYTE[0xC000] = 0x01 << pos;
	XBYTE[0xE000] = value;
}
 
void Display_Info(unsigned char pos, unsigned char duty)
{
	DisplaySMG_Bit(0, SMG_duanma[pos]);
	DelaySMG(500);
 
	DelaySMG(500);
	DisplaySMG_Bit(6, SMG_duanma[duty / 10]);
	DelaySMG(500);
	DisplaySMG_Bit(7, SMG_duanma[duty % 10]);	
	DelaySMG(500);
	
	DisplaySMG_Bit(0, 0xff);
	DisplaySMG_Bit(6, 0xff);
	DisplaySMG_Bit(7, 0xff);
}
 
void Init_Timer0()
{
	TMOD = 0x01;
	TH0 = (65535 - 1000) / 256;			
	TL0 = (65535 - 1000) % 256;
	
	ET0 = 1;
	EA = 1;
	TR0 = 1;
}
 
void Service_Timer0() interrupt 1
{
	TH0 = (65535 - 1000) / 256;
	TL0 = (65535 - 1000) % 256;
	
	if(stat_go == 0)      						
      {
        XBYTE[0x8000] = 0xe7;						
        return;
      } 
	
        pwm++;                
  
      if(pwm <= pwm_duty)   
      {
	XBYTE[0x8000] = ~(0x01 << stat);	   
      }
      else if(pwm <= 10)
      {
        XBYTE[0x8000] = 0xff;
      }
      else
      {
        XBYTE[0x8000] = ~(0x01 << stat);
    
        pwm = 0;
        if(key_puse == 0)     
        {
          times++;
        }
      }
}
 
void LED_Control()
{
  if(times == 5)          
  {
    times = 0;
    if(led_go == 0)       
    {
      pwm_duty = pwm_duty + 1;
      if(pwm_duty == 11)
      {
				pwm_duty = 10;
        led_go = 1;
      }
    }
    else if(led_go == 1)  
    {
      pwm_duty = pwm_duty - 1;
      if(pwm_duty == 255)
      {
				pwm_duty = 0;
        led_go = 0;
        
        if(stat_go == 1)      
        {
          stat++;
          if(stat == 8)
          {
            stat = 0;
          }
        }
        else if(stat_go == 2) 
        {
          stat--;
          if(stat == 255)
          {
            stat = 7;
          }
        }
      }
    }
  }
}
 
void Scan_Keys()
{
	if(S4 == 0)
	{
		DelaySMG(100);
		if(S4 == 0)
		{
			while(S4 == 0)
			{
				key_puse = 1;
			}
			key_puse = 0;
			
      stat_go++;            
      if(stat_go == 3)
      {
        stat_go = 1;
      }
		}
	}
	
	if(S7 == 0)
	{
		DelaySMG(100);
		if(S7 == 0)
		{
			while(S7 == 0)
			{
				key_puse = 1;
				Display_Info(stat + 1, pwm_duty * 10);
			}
			key_puse = 0;
		}
	}
}
 
void Init_System()
{
	XBYTE[0xA000] = 0xff;
	XBYTE[0xA000] = 0x00;
	XBYTE[0xE000] = 0xff;
	XBYTE[0xC000] = 0xff;
	
	Init_Timer0();
}
 
void main()
{
	Init_System();
	while(1)
	{
		LED_Control();
		Scan_Keys();
	}
}


### 关于第十五届蓝桥杯单片机小蜜蜂比赛资料 对于希望参与或深入了解第十五届蓝桥杯单片机竞赛的小蜜蜂相关内容,以下是整理的相关资源和建议: #### 1. **官方资料获取** 可通过蓝桥杯官网下载整合后的单片机资源包,其中包含了详细的指导手册以及考点大纲[^1]。这些材料能够帮助参赛者全面掌握考试范围和技术要点。 #### 2. **优质教程推荐** 针对小蜜蜂相关的学习内容,可以参考蚂蚁工厂科技提供的蓝桥杯单片机教程,该课程覆盖了从基础知识到实际应用的多个方面。另外,“小蜜蜂蓝桥杯单片机基础技能与进阶强化教程”也是一份非常有价值的参考资料,其配套视频可在B站找到具体讲解[^2]。 #### 3. **其他辅助文章** - 提分技巧类的文章《【提分必看!】蓝桥杯单片机提分技巧(国一经验分享)》提供了许多实用的学习方法和实战策略。 - 还有针对不同模块编写的代码集合文档《【国一超全代码分享!】蓝桥杯单片机各模块代码整合》,可以帮助选手快速熟悉各类功能实现方式。 - 对于理论部分,《【蓝桥杯单片机客观题知识点汇总】》总结了许多重要概念,适合用来复习巩固。 #### 4. **实践经验分享** 来自获得过国家级奖项的经验之谈同样值得借鉴。例如,在另一篇博文中提到:“尽管外界对蓝桥杯评价不一,但它确实是提升个人能力并争取加分的好机会。”这表明即使面对争议,合理利用此类平台仍能带来显著收益[^3]。 ```python # 示例:简单的延时函数用于模拟硬件操作中的等待时间设置 def delay(ms): import time time.sleep(ms / 1000) # 测试调用 delay(500) # 延迟半秒 ``` 以上即为关于如何准备及查找第十五届蓝桥杯单片机项目下涉及“小蜜蜂”的主要信息源介绍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小殷学长

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值