keil编译错误,音乐喷泉,请处理一下错误


#include <STC15F2K60S2.H>
#include <intrins.h>

void delay_us(int i);

uchar code blackblock[]={
0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0x00,0x00,
0x00,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x00,0x00};


 uchar code jiong1[]={
0x00,0xFE,0x82,0x42,0xA2,0x9E,0x8A,0x82,0x86,0x8A,0xB2,0x62,0x02,0xFE,0x00,0x00,
0x00,0x7F,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x7F,0x00,0x00};

 uchar code lei1[]={
0x80,0x80,0x80,0xBF,0xA5,0xA5,0xA5,0x3F,0xA5,0xA5,0xA5,0xBF,0x80,0x80,0x80,0x00,
0x7F,0x24,0x24,0x3F,0x24,0x24,0x7F,0x00,0x7F,0x24,0x24,0x3F,0x24,0x24,0x7F,0x00};

void transfer_command_lcd(int data1)   
{
    char i;
    lcd_cs1=0;
    lcd_rs=0;
    for(i=0;i<8;i++)
    {
        lcd_sclk=0;
        delay_us(1);
        if(data1&0x80) lcd_sid=1;
        else lcd_sid=0;
        lcd_sclk=1;
        delay_us(1);
        data1=data1<<=1;
    }
    lcd_cs1=1;
}


void transfer_data_lcd(int data1)
{
    char i;
    lcd_cs1=0;
    lcd_rs=1;
    for(i=0;i<8;i++)
    {
        lcd_sclk=0;
        if(data1&0x80) lcd_sid=1;
        else lcd_sid=0;
        lcd_sclk=1;
        data1=data1<<=1;
    }
    lcd_cs1=1;
}

void delay(int i)               
{
    int j,k;
    for(j=0;j<i;j++)
    for(k=0;k<500;k++);
}


void delay_us(int i)               
{
    int j,k;
    for(j=0;j<i;j++)
    for(k=0;k<2;k++);
}


void initial_lcd()
{
    lcd_reset=0;                 
    delay(20);
    lcd_reset=1;                
    delay(20);        
    transfer_command_lcd(0xe2);     
    delay(5);
    transfer_command_lcd(0x2c); 
    delay(5);    
    transfer_command_lcd(0x2e); 
    delay(5);
    transfer_command_lcd(0x2f);
    delay(5);
    transfer_command_lcd(0x24);  
    transfer_command_lcd(0x81); 
    transfer_command_lcd(0x15);  
    transfer_command_lcd(0xa2); 
    transfer_command_lcd(0xc8);  
    transfer_command_lcd(0xa0);  
    transfer_command_lcd(0x40);  
    transfer_command_lcd(0xaf);  
}

void lcd_address(uint page,uint column)
{
    column=column-1;
    transfer_command_lcd(0xb0+page-1);   
    transfer_command_lcd(0x10+(column>>4&0x0f));    
    transfer_command_lcd(column&0x0f);    
}


void clear_screen()
{
    unsigned char i,j;
    for(i=0;i<9;i++)
    {
        lcd_address(1+i,1);
        for(j=0;j<224;j++)
        {
              transfer_data_lcd(0x00);
        }
    }
     lcd_cs1=1;
}


void display_graphic_16x16(uint page,uint column,uchar reverse,uchar *dp)
{
    uint i,j;    
    for(j=0;j<2;j++)
    {
        lcd_address(page+j,column);
        for (i=0;i<16;i++)
        {    
            if(reverse==1)
                transfer_data_lcd(~*dp);        
            else
                transfer_data_lcd(*dp);        
            dp++;
        }
    }
}


/******************************************************************/

unsigned int code NoteFrequ[] = { 
    523, 587, 659, 698, 784, 880, 988, 
    1047, 1175, 1319, 1397, 1568, 1760, 1976 
};
unsigned int code NoteReload[] = { 
    65536 - (11059200/12) / (523*2),
    65536 - (11059200/12) / (587*2),
    65536 - (11059200/12) / (659*2),
    65536 - (11059200/12) / (698*2),
    65536 - (11059200/12) / (784*2),
    65536 - (11059200/12) / (880*2),
    65536 - (11059200/12) / (988*2),
    65536 - (11059200/12) / (1047*2),
    65536 - (11059200/12) / (1175*2),
    65536 - (11059200/12) / (1319*2),
    65536 - (11059200/12) / (1397*2),
    65536 - (11059200/12) / (1568*2),
    65536 - (11059200/12) / (1760*2), 
    65536 - (11059200/12) / (1976*2), 
};
bit enable = 1;
bit tmrflag = 0; 
unsigned char T0RH = 0xFF; 
unsigned char T0RL = 0x00; 
int t;
uchar code bmp1[];
uchar  code bmp2[];
uchar code bmp3[];
uchar code mp4[];
uchar code mp5[];
ucharcode bmp6[];


unsigned char code TwoTigerNote[] = {
1, 2, 3, 1, 1, 2, 3, 1, 3, 4, 5, 3, 4, 5,
5,6, 5,4, 3, 1, 5,6, 5,4, 3, 1, 1, 5, 1, 1, 5, 1,
};


unsigned char code TwoTigerBeat[] = {
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 4, 4, 8,
3, 1, 3, 1, 4, 4, 3, 1, 3, 1, 4, 4, 4, 4, 8, 4, 4, 8,
};


void display_128x64(uchar *dp)
{
    uint i,j;
    for(j=0;j<8;j++)
    {
        lcd_address(j+1,1);
        for (i=0;i<128;i++)
        {    
            transfer_data_lcd(*dp);                    
            dp++;
        }
    }
}

//===============main program===================
void main(void)
{
    Rom_CS=1;
    lcd_cs1=0;
    initial_lcd();    
    delay(1000);          
    
    EA = 1; 
    TMOD = 0x01; 
    TH0 = T0RH;
    TL0 = T0RL;
    ET0 = 1; 
    TR0 = 1; 
    while(1)
    {
        clear_screen(); 
        if(TwoTigerNote[t] == 1)
        {
            display_128x64(bmp1);
        }
        else if(TwoTigerNote[t] == 2)
        {
            display_128x64(bmp2);
        }
        else if(TwoTigerNote[t] == 3)
        {
            display_128x64(bmp3);
        }
        else if(TwoTigerNote[t] == 4)
        {
            display_128x64(bmp4);
        }
        else if(TwoTigerNote[t] == 5)
        {
            display_128x64(bmp5);
        }
        else if(TwoTigerNote[t] == 6)
        {
            display_128x64(bmp6);
        }
        
unsigned char beat;
unsigned char note; 
unsigned int time = 0; 
unsigned int beatTime = 0; 
unsigned int soundTime = 0; 

    

void InterruptTimer0() interrupt 1
{
    TH0 = T0RH; 
    TL0 = T0RL;
    tmrflag = 1;
    if (enable) 
        BUZZ = ~BUZZ;
    else 
        BUZZ = 1;
    
    
    
    if (time == 0) 
    {
        t++;
        note = TwoTigerNote[beat] - 1;
        T0RH = NoteReload[note] >> 8;
        T0RL = NoteReload[note];
        
        beatTime = (TwoTigerBeat[beat] * NoteFrequ[note]) >> 2;
        
        soundTime = beatTime - (beatTime >> 2);
        enable = 1; 
        time++;
    }
    else 
    {
        if (time >= beatTime) 
        { 
            time = 0;
            beat++;
        }
        else 
        {
            time++; 
            if (time == soundTime) 
            { 
                enable = 0; 
            }
        }
    }    
}


//请改一下代码,如果代码没问题请指导一下怎么处理,软件是keil5
目的是(1)根据歌曲简谱中音符的频率和节拍,改变PWM频率和占空比,使蜂鸣器发出相应曲调。
(2)利用C语言编程使蜂鸣器唱歌并且音节高低在显示屏上动态显示。

img

img

出现的错误是demo.c(7): error C129: missing ';' before 'code'

1、在数组定义中,有两个 code,这是一个语法错误,应该将它们删除。正确的写法应该是:

uchar blackblock[]={
0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0x00,0x00,
0x00,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x00,0x00};

2、在函数 transfer_data_lcd() 中,在发送数据之后没有调用延迟函数,这可能会导致液晶屏无法正常显示。可以在发送完数据之后调用 delay_us() 函数来延迟执行。

3、在函数 initial_lcd() 中,最后一个调用的是 transfer_command_lcd(0x25);,而不是 transfer_command_lcd(0x24);。

4、在函数 initial_lcd() 中,调用了 transfer_command_lcd(0x81); 和transfer_command_lcd(0x30);之后,没有再调用延迟函数。这可能会导致后续的命令无法正常执行。

定义数组的时候不能有空格吧,感觉可是把所有的“code”去掉或者只去掉code后边的空格,也可以把空格改成“_”。
懂得不多,仅供参考。

uchar code*blackblock[]这个是错的,数组名本身就是指针

定义数组时只能有一个名称,这些code是多余的,需要删除

img

img

先删除后再编译看看还有没有错误
错误是需要边调边改的



#include <STC15F2K60S2.H>
#include <intrins.h>

void delay_us(int i);


unsigned char blackblock[]={
0x00,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0x00,0x00,
0x00,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x00,0x00};

unsigned char jiong1[]={
0x00,0xFE,0x82,0x42,0xA2,0x9E,0x8A,0x82,0x86,0x8A,0xB2,0x62,0x02,0xFE,0x00,0x00,
0x00,0x7F,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x7F,0x40,0x40,0x7F,0x00,0x00};

unsigned char lei1[]={
0x80,0x80,0x80,0xBF,0xA5,0xA5,0xA5,0x3F,0xA5,0xA5,0xA5,0xBF,0x80,0x80,0x80,0x00,
0x7F,0x24,0x24,0x3F,0x24,0x24,0x7F,0x00,0x7F,0x24,0x24,0x3F,0x24,0x24,0x7F,0x00};

void transfer_command_lcd(int data1)   
{
    char i;
    lcd_cs1=0;
    lcd_rs=0;
    for(i=0;i<8;i++)
    {
        lcd_sclk=0;
        delay_us(1);
        if(data1&0x80) lcd_sid=1;
        else lcd_sid=0;
        lcd_sclk=1;
        delay_us(1);
        data1=data1<<=1;
    }
    lcd_cs1=1;
}
void transfer_data_lcd(int data1)
{
    char i;
    lcd_cs1=0;
    lcd_rs=1;
    for(i=0;i<8;i++)
    {
        lcd_sclk=0;
        if(data1&0x80) lcd_sid=1;
        else lcd_sid=0;
        lcd_sclk=1;
        data1=data1<<=1;
    }
    lcd_cs1=1;
}
void delay(int i)               
{
    int j,k;
    for(j=0;j<i;j++)
    for(k=0;k<500;k++);
}
void delay_us(int i)               
{
    int j,k;
    for(j=0;j<i;j++)
    for(k=0;k<2;k++);
}
void initial_lcd()
{
    lcd_reset=0;                 
    delay(20);
    lcd_reset=1;                
    delay(20);        
    transfer_command_lcd(0xe2);     
    delay(5);
    transfer_command_lcd(0x2c); 
    delay(5);    
    transfer_command_lcd(0x2e); 
    delay(5);
    transfer_command_lcd(0x2f);
    delay(5);
    transfer_command_lcd(0x24);  
    transfer_command_lcd(0x81); 
    transfer_command_lcd(0x15);  
    transfer_command_lcd(0xa2); 
    transfer_command_lcd(0xc8);  
    transfer_command_lcd(0xa0);  
    transfer_command_lcd(0x40);  
    transfer_command_lcd(0xaf);  
}
void lcd_address(uint page,uint column)
{
    column=column-1;
    transfer_command_lcd(0xb0+page-1);   
    transfer_command_lcd(0x10+(column>>4&0x0f));    
    transfer_command_lcd(column&0x0f);    
}
void clear_screen()
{
    unsigned char i,j;
    for(i=0;i<9;i++)
    {
        lcd_address(1+i,1);
        for(j=0;j<224;j++)
        {
              transfer_data_lcd(0x00);
        }
    }
     lcd_cs1=1;
}
void display_graphic_16x16(uint page,uint column,uchar reverse,uchar *dp)
{
    uint i,j;    
    for(j=0;j<2;j++)
    {
        lcd_address(page+j,column);
        for (i=0;i<16;i++)
        {    
            if(reverse==1)
                transfer_data_lcd(~*dp);        
            else
                transfer_data_lcd(*dp);        
            dp++;
        }
    }
}
/******************************************************************/
unsigned int code NoteFrequ[] = { 
    523, 587, 659, 698, 784, 880, 988, 
    1047, 1175, 1319, 1397, 1568, 1760, 1976 
};
unsigned int code NoteReload[] = { 
    65536 - (11059200/12) / (523*2),
    65536 - (11059200/12) / (587*2),
    65536 - (11059200/12) / (659*2),
    65536 - (11059200/12) / (698*2),
    65536 - (11059200/12) / (784*2),
    65536 - (11059200/12) / (880*2),
    65536 - (11059200/12) / (988*2),
    65536 - (11059200/12) / (1047*2),
    65536 - (11059200/12) / (1175*2),
    65536 - (11059200/12) / (1319*2),
    65536 - (11059200/12) / (1397*2),
    65536 - (11059200/12) / (1568*2),
    65536 - (11059200/12) / (1760*2), 
    65536 - (11059200/12) / (1976*2), 
};

bit enable = 1;
bit tmrflag = 0; 
unsigned char T0RH = 0xFF; 
unsigned char T0RL = 0x00; 
int t;
unsigned char   bmp1[64];
unsigned char   bmp2[64];
unsigned char   bmp3[64];
unsigned char   bmp4[64];
unsigned char   bmp5[64];
unsigned char   bmp6[64];

unsigned char TwoTigerNote[] = {
1, 2, 3, 1, 1, 2, 3, 1, 3, 4, 5, 3, 4, 5,
5,6, 5,4, 3, 1, 5,6, 5,4, 3, 1, 1, 5, 1, 1, 5, 1,
};
unsigned char TwoTigerBeat[] = {
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 4, 4, 8,
3, 1, 3, 1, 4, 4, 3, 1, 3, 1, 4, 4, 4, 4, 8, 4, 4, 8,
};
void display_128x64(uchar *dp)
{
    uint i,j;
    for(j=0;j<8;j++)
    {
        lcd_address(j+1,1);
        for (i=0;i<128;i++)
        {    
            transfer_data_lcd(*dp);                    
            dp++;
        }
    }
}
//===============main program===================
void main(void)
{
    Rom_CS=1;
    lcd_cs1=0;
    initial_lcd();    
    delay(1000);          
    EA = 1; 
    TMOD = 0x01; 
    TH0 = T0RH;
    TL0 = T0RL;
    ET0 = 1; 
    TR0 = 1; 
    while(1)
    {
        clear_screen(); 
        if(TwoTigerNote[t] == 1)
        {
            display_128x64(bmp1);
        }
        else if(TwoTigerNote[t] == 2)
        {
            display_128x64(bmp2);
        }
        else if(TwoTigerNote[t] == 3)
        {
            display_128x64(bmp3);
        }
        else if(TwoTigerNote[t] == 4)
        {
            display_128x64(bmp4);
        }
        else if(TwoTigerNote[t] == 5)
        {
            display_128x64(bmp5);
        }
        else if(TwoTigerNote[t] == 6)
        {
            display_128x64(bmp6);
        }
    }
}

unsigned char beat = 0;
unsigned char note; 
unsigned int time = 0; 
unsigned int beatTime = 0; 
unsigned int soundTime = 0; 
void InterruptTimer0() interrupt 1
{
    TH0 = T0RH; 
    TL0 = T0RL;
    tmrflag = 1;
    if (enable) 
        BUZZ = ~BUZZ;
    else 
        BUZZ = 1;
    
    if (time == 0) 
    {
        t++;
        note = TwoTigerNote[beat] - 1;
        T0RH = NoteReload[note] >> 8;
        T0RL = NoteReload[note];
        beatTime = (TwoTigerBeat[beat] * NoteFrequ[note]) >> 2;
        soundTime = beatTime - (beatTime >> 2);
        enable = 1; 
        time++;
    }
    else 
    {
        if (time >= beatTime) 
        { 
            time = 0;
            beat++;
        }
        else 
        {
            time++; 
            if (time == soundTime) 
            { 
                enable = 0; 
            }
        }
    }    
}

乱写了一下,看起来这代码里面问题很多