pwm_sound.c

来自「用pic单片机做的一个温度计 实现实时时钟显示和存储」· C语言 代码 · 共 138 行

C
138
字号
#include<p18f452.h>	/* PIC18系列的头文件 */


void sounddelay0(int mf   )
{
  int i=mf;
  int j;               //定义循环变量
 for(j=i;j>0;j--);                 //根据频率决定延时时间
} 

void pwm_initial(void)
{
	TRISC=TRISC&0xfb;	/* 设置CCP1(RC2),CCP2(RC1)引脚为输出方式 */		
	PR2=0XFF;			/* 设置PWM工作周期=((PR2)+1)*4*Tosc*(TMR2前分频值)*/		
	CCPR1L=0X00;		
	CCP1CON=0X3C;		/* CCP1模块为PWM工作方式,高电平值低2位为00*/

	T2CON=0X06;			/* 打开TMR2,且使其前后分频为1,同时开始输出PWM波形 */
	PIE1&=0xFB;			/* CCP1中断禁止 */
}


void pwm_set(float x)				
{
   CCPR1L=x/50*256;
}

void sound(void )
{
   int j;
   TRISBbits.TRISB4=0;  
    for(j=100;j>0;j--)    
       {
                PORTBbits.RB4=1;                       //输出声音
                sounddelay0(0x55);      //延长一段时间
                PORTBbits.RB4=0;                       //关闭声音
                sounddelay0(0x55);           //延长一段时间
        }
    for(j=10000;j>0;j--) ;
    for(j=10000;j>0;j--) ;
    for(j=10000;j>0;j--) ;
    for(j=10000;j>0;j--) ;
    for(j=10000;j>0;j--) ;

  for(j=100;j>0;j--)           //每个声音循环4次
     {

                PORTBbits.RB4=1;                       //输出声音
                sounddelay0(0x120);      //延长一段时间
                PORTBbits.RB4=0;                       //关闭声音
                sounddelay0(0x120);           //延长一段时间

     }

    for(j=10000;j>0;j--) ;
    for(j=10000;j>0;j--) ;
    for(j=10000;j>0;j--) ;
    for(j=10000;j>0;j--) ;
    for(j=10000;j>0;j--) ;

  for(j=100;j>0;j--)           //每个声音循环4次
     {

                PORTBbits.RB4=1;                       //输出声音
                sounddelay0(0x55);      //延长一段时间
                PORTBbits.RB4=0;                       //关闭声音
                sounddelay0(0x55);           //延长一段时间

     }
    for(j=10000;j>0;j--) ;
    for(j=10000;j>0;j--) ;
    for(j=10000;j>0;j--) ;
    for(j=10000;j>0;j--) ;
    for(j=10000;j>0;j--) ;

  for(j=100;j>0;j--)           //每个声音循环4次
     {

                PORTBbits.RB4=1;                       //输出声音
                sounddelay0(0x120);      //延长一段时间
                PORTBbits.RB4=0;                       //关闭声音
                sounddelay0(0x120);           //延长一段时间

     }   
 TRISBbits.TRISB4=1;  


}


void uplight(void)
{
  

  PORTAbits.RA2=~PORTAbits.RA2;
  PORTAbits.RA3=~PORTAbits.RA3;
  if(PORTAbits.RA2==PORTAbits.RA3) PORTAbits.RA2=~PORTAbits.RA2;
  TRISAbits.TRISA2=0;
  TRISAbits.TRISA3=0; 
  

}
void dowmlight(void)
{
 

  PORTAbits.RA5=~PORTAbits.RA5;
  
  PORTAbits.RA1=~PORTAbits.RA1;
  if(PORTAbits.RA1==PORTAbits.RA5) PORTAbits.RA1=~PORTAbits.RA1;
  TRISAbits.TRISA5=0; 
  TRISAbits.TRISA1=0;
}
























⌨️ 快捷键说明

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