c - 根据图片 18f4550 的位值发音颜色

标签 c microcontroller pic microchip

更新2

我想制作一个可以在我的图片18f4550上播放声音(可以说红色、绿色和蓝色)的程序,有一个扬声器连接到picdem,该部分工作正常,我用微芯片版本6.83编写了以下程序使用 C 编译器。

当我说红色时(这有一个位模式),我需要检索 .wav 文件的位值。 我的正确问题是,如何获取 .wav 文件的位值。

void main (void)
{   

    TRISD = 0x00;               // PORTD  als uitgang
    TRISB = 0b00110000;         // RB4 en RB5 als ingang
    TRISA = 0x00;               // RA output
        
    RCONbits.IPEN = 0;  // interrupts
    INTCONbits.GIE = 1; 
    INTCONbits.RBIE = 1;
    
    while(1)
    {   
        _asm sleep _endasm  
    }
}

#pragma interrupt ISR
void ISR (void)
{
    int red[] = {bit values off sound red???};
    int blue[] = {bit values off sound green???};
    int green[] = {bit values off sound blue???};


    if (INTCONbits.RBIF==1)
    {
        if(PORTBbits.RB5==0)        // S3 pressed?
        {
            int i = 0;
            int b;
            do {
                LATAbits.LATA2 = rood[i];
                LATDbits.LATD1 ^= 1;
                b = 0;

                //do-while voor de frequentie (1500 is de freq)
                do {
                    b++;
                }while(b <= 2000);

                i++;
            }while(rood[i] <= 50);

            //LATDbits.LATD1 ^= 1;      // D2 togglen

        }
        
    }   
    INTCONbits.RBIF = 0;
}

最佳答案

原始问题的答案: 你要求的“红色频率,以位表示”是480到405太赫兹,所以以位为单位是111100000到110010101。但你也说“它以纳米定义”,所以这是630到740nm,即1001110110到1011100100以二进制形式。如果您想用波形驱动扬声器,您需要样本音频波形或语音合成芯片。无论哪种情况,我给你的二进制值都与“红色”一词的声音无关,这需要更多的位来表示任何可听声音(例如,16 kbps PCM 下至少 0.5 秒将是 8 kbp = 1 KB)。

另一种用二进制表示颜色的方法是 RGB 系统,其中红色为 0xFF0000,二进制表示为 111111110000000000000000。

回答有关如何获取 wav 文件中的位的问题 首先我们必须确定 wav 文件的存储位置。它可以作为 const 数组存储在 PIC 中,或者存储在外部存储设备中,您必须通过某种串行或并行总线读取它。由于 PIC18F4550 有 32k 字节的闪存,如果您的程序相当小,则可能有足够的空间容纳 3 个 wav 文件。

然后我们必须确定硬件将如何播放声音。您似乎试图通过移位将字节值从位端口发送出去。但为了做到这一点,我们需要更多地了解硬件,因为您无法将扬声器连接到位端口并期望发出声音(无论如何都不能不进一步处理 PCM 信号 - 您是否正在尝试 1 bit DAC 设计?如果是这样,有 further notes here 但这是相当雄心勃勃的)。

除此之外,wav 文件中的位值可以通过获取文件中的每个样本(8 位?)并使用按位 AND 运算将掩码值 0x01 进行移位来确定设置了哪些位。

关于c - 根据图片 18f4550 的位值发音颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5859877/

相关文章:

c - 寻找最快的汉明距离 C 实现

c - 用C语言读写32位wav文件

在 C 中使用 printf 的彩色文本

c - 查找西门子 C167 编译器

c - 如何通过代码重写 PIC32 引导闪存?

c - 在 C 代码中获取 valgrind 错误

c - PIC单片机中的无线TDM,使用C或汇编来控制时间偏差?

c - 如何使用按位运算将 4 个 uint8_t 转换为单个 float

c 结构将自身作为参数传递给指针函数

c - 如何通过环绕将 4 字节数组移位所有 32 位?