打印
[活动专区]

【AT-START-L021测评】+LCD5110屏显示驱动

[复制链接]
881|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jinglixixi|  楼主 | 2024-12-4 17:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 jinglixixi 于 2024-12-5 00:01 编辑

在AT-START-L021开发板上配有ArduinoTM Uno R3扩展接口,合理地所用它可起到事半功倍的效果。这里以一款SPI接口的显示屏为例加以驱动测试,该显示屏早期曾用在诺基亚手机上,为Nokia5110。为了借用图1所示的扩展接口而免去接线的问题,故显示屏与开发板的连接关系为:
SCL---PB7
SDA---PA15
RST---PA6
DC ---PA7
CS ---PA5
BLK---PA9

1  所用接口



所用引脚输出高低电平的语句定义为:
#define LCD_SCLK_Set   gpio_bits_write(GPIOB,GPIO_PINS_7,TRUE)  //CLK
#define LCD_SCLK_Clr   gpio_bits_write(GPIOB,GPIO_PINS_7,FALSE)

#define LCD_SDIN_Set   gpio_bits_write(GPIOA,GPIO_PINS_15,TRUE)  //DIN
#define LCD_SDIN_Clr   gpio_bits_write(GPIOA,GPIO_PINS_15,FALSE)

#define LCD_RST_Set    gpio_bits_write(GPIOA,GPIO_PINS_6,TRUE)  //RES
#define LCD_RST_Clr    gpio_bits_write(GPIOA,GPIO_PINS_6,FALSE)

#define LCD_DC_Set     gpio_bits_write(GPIOA,GPIO_PINS_7,TRUE)  //DC
#define LCD_DC_Clr     gpio_bits_write(GPIOA,GPIO_PINS_7,FALSE)

#define LCD_CS_Set     gpio_bits_write(GPIOA,GPIO_PINS_5,TRUE)  //CS
#define LCD_CS_Clr     gpio_bits_write(GPIOA,GPIO_PINS_5,FALSE)

#define LCD_BLK_Set    gpio_bits_write(GPIOA,GPIO_PINS_9,TRUE)  //BLK  
#define LCD_BLK_Clr    gpio_bits_write(GPIOA,GPIO_PINS_9,FALSE)


配置所用引脚为输出功能的函数为:
void LCD_config(void)
{
  gpio_init_type gpio_init_struct;
  crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
  gpio_default_para_init(&gpio_init_struct);
  gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  gpio_init_struct.gpio_out_type  = GPIO_OUTPUT_PUSH_PULL;
  gpio_init_struct.gpio_mode = GPIO_MODE_OUTPUT;
  gpio_init_struct.gpio_pins = GPIO_PINS_5|GPIO_PINS_6|GPIO_PINS_7|GPIO_PINS_9|GPIO_PINS_15;
  gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
  gpio_init(GPIOA, &gpio_init_struct);
  crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE);
  gpio_init_struct.gpio_pins = GPIO_PINS_7;
  gpio_init(GPIOB, &gpio_init_struct);
}

该显示屏的初始化函数为:
void LCD_init(void)
{
   LCD_RST_Clr;
   delay_us(1);
   LCD_RST_Set;
   LCD_CS_Clr;
   delay_us(1);
   LCD_CS_Set;
   delay_us(1);
   LCD_write_byte(0x21, 0);
   LCD_write_byte(0xc8, 0);
   LCD_write_byte(0x06, 0);
   LCD_write_byte(0x13, 0);
   LCD_write_byte(0x20, 0);
   LCD_clear();
   LCD_write_byte(0x0c, 0);
   LCD_CS_Clr;
   LCD_ BLK_Set;
}

实现清屏处理的函数为:
void LCD_clear(void)
{
    unsigned int i;
    LCD_write_byte(0x0c, 0);                        
    LCD_write_byte(0x80, 0);                        
    for (i=0; i<504; i++)
      LCD_write_byte(0, 1);                        
}

实现字符显示功能的函数为:
void LCD_write_char(unsigned char c)
{
    unsigned char line;
    c -= 32;
    for (line=0; line<6; line++)
      LCD_write_byte(font6x8[c][line], 1);
}

实现字符串显示功能的函数为:
void LCD_write_english_string(unsigned char X,unsigned char Y,char *s)
{
    LCD_set_XY(X,Y);
    while (*s)
    {
             LCD_write_char(*s);
             s++;
    }
}

显示显示功能测试的主程序为:
int main(void)
{
  system_clock_config();
  at32_board_init();
  LCD_config();
  LCD_init();
  LCD_clear();
  LCD_write_english_string(16,0,"AT32L021");
  LCD_write_english_string(16,2,"Nokia_5110");
  LCD_write_english_string(16,4,"jingliixi");
  while(1)
  {
    at32_led_toggle(LED2);
    delay_ms(200);
  }
}

经程序的编译与下载,其显示效果如图2所示。
2  显示效果


使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

463

主题

2774

帖子

38

粉丝