void PWM_BUZZER( uint8 light, uint8 musical )
{
// 设置PWM端口为外设端口,非GPIO
P1SEL |= BV(1);
// 设置PWM端口为输出
P1DIR |= BV(1);
// 定时器的备用位置2
PERCFG |= BV(6);
// 32分频,模模式从0x0000到T1CC0反复计数 我现在的工作频率是1Mhz,为了方便计算
T1CTL = BV(3) | BV(1);
// 设置通道1,向上比较设置输出,比较模式,未捕获
T1CCTL1 = 0x1C;
switch( light )
{
case M_LOW: // 低音
switch ( musical )
{
case DO:
T1CC0H = 3816 / 0xFF;
T1CC0L = 3816 % 0xFF;
T1CC1H = 1908 / 0xFF;
T1CC1L = 1908 % 0xFF;
break;
case RE:
T1CC0H = 3401 / 0xFF;
T1CC0L = 3401 % 0xFF;
T1CC1H = 1700 / 0xFF;
T1CC1L = 1700 % 0xFF;
break;
case MI:
T1CC0H = 3030 / 0xFF;
T1CC0L = 3030 % 0xFF;
T1CC1H = 1515 / 0xFF;
T1CC1L = 1515 % 0xFF;
break;
case FA:
T1CC0H = 2865 / 0xFF;
T1CC0L = 2865 % 0xFF;
T1CC1H = 1433 / 0xFF;
T1CC1L = 1433 % 0xFF;
break;
case SO:
T1CC0H = 2551 / 0xFF;
T1CC0L = 2551 % 0xFF;
T1CC1H = 1276 / 0xFF;
T1CC1L = 1276 % 0xFF;
break;
case LA:
T1CC0H = 2272 / 0xFF;
T1CC0L = 2272 % 0xFF;
T1CC1H = 1136 / 0xFF;
T1CC1L = 1136 % 0xFF;
break;
case SI:
T1CC0H = 2024 / 0xFF;
T1CC0L = 2024 % 0xFF;
T1CC1H = 1012 / 0xFF;
T1CC1L = 1012 % 0xFF;
break;
}
break;
case M_MID: // 中音
switch ( musical )
{
case DO:
T1CC0H = 1912 / 0xFF;
T1CC0L = 1912 % 0xFF;
T1CC1H = 956 / 0xFF;
T1CC1L = 956 % 0xFF;
break;
case RE:
T1CC0H = 1703 / 0xFF;
T1CC0L = 1703 % 0xFF;
T1CC1H = 851 / 0xFF;
T1CC1L = 851 % 0xFF;
break;
case MI:
T1CC0H = 1517 / 0xFF;
T1CC0L = 1517 % 0xFF;
T1CC1H = 758 / 0xFF;
T1CC1L = 758 % 0xFF;
break;
case FA:
T1CC0H = 1432 / 0xFF;
T1CC0L = 1432 % 0xFF;
T1CC1H = 716 / 0xFF;
T1CC1L = 716 % 0xFF;
break;
case SO:
T1CC0H = 1275 / 0xFF;
T1CC0L = 1275 % 0xFF;
T1CC1H = 637 / 0xFF;
T1CC1L = 637 % 0xFF;
break;
case LA:
T1CC0H = 1136 / 0xFF;
T1CC0L = 1136 % 0xFF;
T1CC1H = 568 / 0xFF;
T1CC1L = 568 % 0xFF;
break;
case SI:
T1CC0H = 1012 / 0xFF;
T1CC0L = 1012 % 0xFF;
T1CC1H = 506 / 0xFF;
T1CC1L = 506 % 0xFF;
break;
}
break;
case M_HIGH: // 高音
switch ( musical )
{
case DO:
T1CC0H = 955 / 0xFF;
T1CC0L = 955 % 0xFF;
T1CC1H = 477 / 0xFF;
T1CC1L = 477 % 0xFF;
break;
case RE:
T1CC0H = 851 / 0xFF;
T1CC0L = 851 % 0xFF;
T1CC1H = 425 / 0xFF;
T1CC1L = 425 % 0xFF;
break;
case MI:
T1CC0H = 758 / 0xFF;
T1CC0L = 758 % 0xFF;
T1CC1H = 379 / 0xFF;
T1CC1L = 379 % 0xFF;
break;
case FA:
T1CC0H = 751 / 0xFF;
T1CC0L = 751 % 0xFF;
T1CC1H = 375 / 0xFF;
T1CC1L = 375 % 0xFF;
break;
case SO:
T1CC0H = 637 / 0xFF;
T1CC0L = 637 % 0xFF;
T1CC1H = 318 / 0xFF;
T1CC1L = 318 % 0xFF;
break;
case LA:
T1CC0H = 568 / 0xFF;
T1CC0L = 568 % 0xFF;
T1CC1H = 284 / 0xFF;
T1CC1L = 284 % 0xFF;
break;
case SI:
T1CC0H = 508 / 0xFF;
T1CC0L = 508 % 0xFF;
T1CC1H = 254 / 0xFF;
T1CC1L = 254 % 0xFF;
break;
}
break;
}
}