📄 pwm_sound.c
字号:
#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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -