⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 可控频率和占空比.txt

📁 频率可调 占空比可调 AVR 程序 程序可用 请放心用
💻 TXT
字号:
/******** 频率可调 占空比可调 ******/
#include <ioM16v.h>
#include <macros.h>
#define uchar	unsigned char
#define uint	unsigned int
uchar a=0; 
uchar b=0;


//端口初始化
void port_init(void)
{
 PORTC = 0xff;
 DDRC  = 0xFF;
 PORTB = 0x00;
 DDRB  = 0x00; 
 PORTD = 0x30;
 DDRD  = 0x30;
}

void delay_ms(uint ms)//精确延时1ms
{
        uint i,j;
	for(i=0;i<ms;i++)
	   {
	   for(j=0;j<1141;j++);
       }
}


//定时T1初始化
void timer1_init(void)
{
 TCCR1B = 0x00;//停止定时器
 TIMSK |= 0x00;//中断允许
 TCNT1H = 0x00;
 TCNT1L = 0x00;//初始值
 OCR1AH = 0x00;
 OCR1AL = 0x00;
 OCR1BH = 0x00;
 OCR1BL = 0x00;
 //ICR1H  = 0xFF;
// ICR1L  = 0xFF;//输入捕捉匹配值
 TCCR1A=0X63;
	TCCR1B=0X1A;//8分频 快速PWM模式 匹配时清零 top时置位
}
uchar key_press()//判断是否有键按下
{
    uchar j;
    DDRA|=0X0F;
	PORTA|=0X0F;
	
	DDRA&=0X0F;
	
	j=PINA;
	j=j&0X0F;//00001111
	if(j==0X0F)
	{
	  return 0;
	}
	else
	{
	 return 1;
	}
	
}

void key()//键控函数
{ //调频 min=3921HZ max=1000KHZ

 uchar key;
 delay_ms(1);
  if(key_press())  //
         {
		   key=PINA;
	       key&=0X0F;
		 }
     
          if (key==0X0E)
            { 
			/*PORTC&= ~BIT(3);//蜂鸣器
           delay_ms(10);
		   PORTC|=BIT(3);*/
			
             if (a!=255) 
               a++;//减小频率
             else   
               a=255;
             OCR1AL=a; 
            }
         
      
          if (key==0X0D) 
            { 
		  /* PORTC&= ~BIT(3);//蜂鸣器
           delay_ms(5);
		   PORTC|=BIT(3);*/
             if (a!=0) //增大频率
               --a;
             else   
               a=0;
             OCR1AL=a;
            }
         
/***************** 调节占空比***************************************/
        
       
          if (key==0X0B) //再次判断
            {  
		/*	PORTC&= ~BIT(3);//蜂鸣器
           delay_ms(5);
		   PORTC|=BIT(3); */
             if (b!=255) //增加占空比
               ++b;
             else   //使占空比比较器最大值保持为255
               b=255;
             OCR1BL=b;
            }
      
          if (key==0X07) //
            { 
		  /*PORTC&= ~BIT(3);//蜂鸣器
           delay_ms(10);
		   PORTC|=BIT(3);*/ 
             if (b!=0) //减少占空比
               --b;
             else   //使占空比比较器最小值保持为0
               b=0;
             OCR1BL=b;  
            }
         
	 delay_ms(50); //控制按键扫描间隔,防止按住不放时变化过快
	 }
void init_devices(void)
{
 CLI(); //禁止所有中断
// MCUCR  = 0x00;
 //MCUCSR = 0x80;//禁止JTAG
 //GICR   = 0x00;
 port_init();
 timer1_init();
 //SEI();//开全局中断
}
//主函数
void main(void)
{
 init_devices();
 //在这继续添加你的代码
 while(1)
 {uchar i;
 
 i=key_press();
	  if(i)
	  {
       key();
      } 
 }
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -