代码之家  ›  专栏  ›  技术社区  ›  A191919

二进制常量之前的keil uvision 5语法错误

  •  1
  • A191919  · 技术社区  · 7 年前

    我正在尝试构建此代码。 但我不知道错误在哪里?我做错了什么?

    #include "stm32f10x.h"
    #include "stm32f10x_rcc.h"
    #include "stm32f10x_gpio.h"
     
    #define LCD_PORT GPIOC
    #define LCD_RCC_GPIO RCC_AHB1Periph_GPIOC
    #define LCD_E_Pin GPIO_Pin_12
    #define LCD_RS_Pin GPIO_Pin_10
    
    void delay(unsigned int s);
    void lcd_init_gpio();
    void lcd_write_data(u16 data);
    void lcd_init();
    void lcd_write_str(char*str);
    void lcd_write_cmd(u16 cmd);
    void lcd_set_cursor(int line,int pos);
    void lcd_write_dec_xxx(uint16_t data);
    void lcd_write_dec_xxx(uint16_t data);
    void lcd_write_dec_xx(uint8_t data);
    void lcd_write_dec_x(uint8_t data);
    int main(void)
    {
        lcd_init();
      while (1)
        {
    
        }
    }
    
    void delay(unsigned int s){
        while(--s > 0) {
            __NOP();
        }
    }
    
    const uint8_t lcd_2x16_decode[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
    
    void lcd_write_dec_xxxx(uint16_t data){
        lcd_write_data(lcd_2x16_decode[(data / 1000) & 0x0F]);
        lcd_write_data(lcd_2x16_decode[((data % 1000) / 100) & 0x0F]);
        lcd_write_data(lcd_2x16_decode[((data % 1000) % 100) / 10 & 0x0F]);
        lcd_write_data(lcd_2x16_decode[((data % 1000) % 100) % 10 & 0x0F]);
    }
    
    void lcd_write_dec_xxx(uint16_t data){
        lcd_write_data(lcd_2x16_decode[(data / 100) & 0x0F]);
        lcd_write_data(lcd_2x16_decode[((data % 100) / 10) & 0x0F]);
        lcd_write_data(lcd_2x16_decode[((data % 100) % 10) & 0x0F]);
    }
    
    void lcd_write_dec_xx(uint8_t data){
        lcd_write_data(lcd_2x16_decode[((data % 100) / 10) & 0x0F]);
        lcd_write_data(lcd_2x16_decode[((data % 100) % 10) & 0x0F]);
    }
    
    void lcd_write_dec_x(uint8_t data) {
        lcd_write_data(lcd_2x16_decode[data]);
    }
    void lcd_init_gpio() {
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
        GPIO_InitTypeDef init;
        init.GPIO_Mode = GPIO_Mode_Out_PP;
        init.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_10 | GPIO_Pin_12;
        GPIO_Init(LCD_PORT,&init);
    }
    void lcd_write_data(u16 data) {
        GPIO_SetBits(LCD_PORT,data | LCD_E_Pin);
        delay(0xFFFF);
        GPIO_ResetBits(LCD_PORT,LCD_E_Pin | data);
    }
    void lcd_init() {
        lcd_init_gpio();
        int del = 99999;
        GPIO_ResetBits(LCD_PORT, LCD_RS_Pin);
        delay(del);
        lcd_write_data(0b00110000);
        delay(del);
        lcd_write_data(0b00110000);
        delay(del);
        lcd_write_data(0b00110000);
        delay(del);
        lcd_write_data(0b00111000);
        delay(del);
        lcd_write_data(0b00001111);
        delay(del);
        lcd_write_data(0b00000001);
        delay(del);
        lcd_write_data(0b00000110);
        delay(del);
        lcd_write_data(0b00000010);
        delay(del);
        GPIO_SetBits(LCD_PORT,LCD_RS_Pin);
    }
    
    void lcd_write_str(char*str) {
        do {
            lcd_write_data(*str);
        }while(*++str);
    }
    void lcd_write_cmd(u16 cmd) {
        GPIO_ResetBits(LCD_PORT,LCD_RS_Pin);
        lcd_write_data(cmd);
        GPIO_SetBits(LCD_PORT,LCD_RS_Pin);
    }
    void lcd_set_cursor(int line,int pos) {
        pos |= 0b10000000;
        if (line == 1) {
            pos += 0x40;
        }
        lcd_write_cmd(pos);
    }
     
    

    主要的c(76):错误:#18:应为a“)”lcd\U write\U数据(0B0011000);

    主要的c(78):错误:#18:应为a“)”lcd\U write\U数据(0B0011000);

    主要的c(80):错误:#18:应为a“)”lcd\U write\U数据(0B0011000);

    主要的c(82):错误:#18:应为a“)”lcd\U write\U data(0b00111000);

    主要的c(84):错误:#18:应为a“)”lcd\U write\U数据(0b00001111);

    主要的c(86):错误:#18:应为a“)”lcd\U write\U data(0b00000001);

    主要的c(88):错误:#18:应为a“)”lcd\U write\U data(0b00000110);

    主要的c(90):错误:#18:应为a“)”lcd\U写入数据(0b00000010);

    主要的c(106):错误:#65:应为“pos |=0b10000000;

    1 回复  |  直到 5 年前
        1
  •  1
  •   cxw    7 年前

    Keil支持二进制常量吗?uVision 3未按 this link 。尝试替换 0b00110000 使用等效物 0x30 ,另一个也一样 0b... 价值观( Another support page )

    0b00110000 0x30
    0b00110000 0x30
    0b00110000 0x30
    0b00111000 0x38
    0b00001111 0x0f
    0b00000001 0x01
    0b00000110 0x06
    0b00000010 0x02
    0b10000000 0x80