天天看点

晶联讯JLX12864G-290液晶,STM32+HAL库 SPI显示成功。

晶联讯JLX12864G-290液晶,STM32+HAL库 SPI显示成功。
晶联讯JLX12864G-290液晶,STM32+HAL库 SPI显示成功。
晶联讯JLX12864G-290液晶,STM32+HAL库 SPI显示成功。

JLX12864G_290_PN.h

#ifndef __JLX12864G_290_PN_H__

#define __JLX12864G_290_PN_H__

#include "stm32f0xx_hal.h"

#define CS_H          HAL_GPIO_WritePin(CS_GPIO_Port,CS_Pin,GPIO_PIN_SET) // 输出高电平

#define CS_L          HAL_GPIO_WritePin(CS_GPIO_Port,CS_Pin,GPIO_PIN_RESET) // 输出低电平

#define RST_H         HAL_GPIO_WritePin(RST_GPIO_Port,RST_Pin,GPIO_PIN_SET) // 输出高电平

#define RST_L         HAL_GPIO_WritePin(RST_GPIO_Port,RST_Pin,GPIO_PIN_RESET) // 输出低电平

#define RS_H          HAL_GPIO_WritePin(RS_GPIO_Port,RS_Pin,GPIO_PIN_SET) // 输出高电平

#define RS_L          HAL_GPIO_WritePin(RS_GPIO_Port,RS_Pin,GPIO_PIN_RESET) // 输出低电平

//void delay(int i); 

void delay_us(uint8_t i); 

void transfer_command(uint8_t data1);

void transfer_data(uint8_t data1);

void initial_lcd(void);

void lcd_address(uint8_t page,uint8_t column);

void clear_screen(void);

void full_display(uint8_t data_left,uint8_t data_right);

void display_graphic_32x32(uint8_t page,uint8_t column,uint8_t *dp);

void display_graphic_16x16(uint8_t page,uint8_t column,uint8_t reverse,uint8_t *dp);

void display_graphic_8x16(uint8_t page,uint8_t column,uint8_t *dp);

void display_string_8x16(uint16_t page,uint16_t column,uint8_t *text);

void display_string_5x7(uint16_t page,uint16_t column,uint8_t *text);

void disp_grap(uint8_t page,uint8_t column,uint8_t *dp);

#endif  // __JLX12864G_290_PN_H__

JLX12864G_290_PN.c

#include "spi.h"

#include "JLX12864G_290_PN/JLX12864G_290_PN.H"

uint8_t ascii_table_8x16[95][16]; 

uint8_t ascii_table_5x7[95][5]; 

// 

//void delay(int i) 

//{ 

// int j,k; 

// for(j=0;j<i;j++) 

// for(k=0;k<110;k++); 

//} 

void delay_us(uint8_t i) 

 int j,k; 

 for(j=0;j<i;j++) 

 for(k=0;k<1;k++); 

//void waitkey() 

//{ 

//  repeat: 

//    if(key==1) 

//      goto repeat; 

//    else 

//      HAL_Delay(1000);

     delay(1000); 

//}

void transfer_command(uint8_t data1) 

   CS_L; 

   RS_L; 

   HAL_SPI_Transmit(&hspi1,&data1,1,0xff);

   CS_H; 

void transfer_data(uint8_t data1) 

   CS_L;

   RS_H;  

   HAL_SPI_Transmit(&hspi1,&data1,1,0xff);

   CS_H; 

void initial_lcd(void) 

//   CS_L;

   RST_L;  

   HAL_Delay(100); 

   RST_H;  

   HAL_Delay(100);  

   transfer_command(0xe2);  

   HAL_Delay(5);  

   transfer_command(0x2c);  

   HAL_Delay(5); 

   transfer_command(0x2e);  

   HAL_Delay(5); 

   transfer_command(0x2f);  

   HAL_Delay(5); 

   transfer_command(0x24);  

   transfer_command(0x81);  

   transfer_command(0x2a);  

   transfer_command(0xa2);  

   transfer_command(0xc8);  

   transfer_command(0xa0);  

   transfer_command(0x40);  

   transfer_command(0xaf);  

//   CS_H;

void lcd_address(uint8_t page,uint8_t column) 

   column=column-1; //我们平常所说的第 1 列,在 LCD 驱动 IC 里是第 0 列。所以在这里减去 1. 

   page=page-1; 

   transfer_command(0xb0+page); //设置页地址。每页是 8 行。一个画面的 64 行被分成 8 个页。我们平常所说的第 1 页,在 LCD驱动 IC 里是第 0 页,所以在这里减去 1*/ 

   transfer_command(((column>>4)&0x0f)+0x10); //设置列地址的高 4 位 

   transfer_command(column&0x0f); //设置列地址的低 4 位 

void clear_screen(void) 

   uint8_t i,j; 

   for(i=0;i<9;i++) 

   { 

     lcd_address(1+i,1); 

     for(j=0;j<132;j++) 

     { 

        transfer_data(0x00); 

     } 

   } 

//==================display a piture of 128*64 dots================ 

void full_display(uint8_t data_left,uint8_t data_right) 

   int i,j; 

   for(i=0;i<8;i++) 

   { 

     CS_L; 

     lcd_address(i+1,1); 

     for(j=0;j<64;j++) 

     { 

       transfer_data(data_left); 

       transfer_data(data_right); 

     } 

   } 

void display_graphic_32x32(uint8_t page,uint8_t column,uint8_t *dp) 

   uint8_t i,j; 

   for(j=0;j<4;j++) 

   { 

     lcd_address(page+j,column); 

     for (i=0;i<31;i++) 

     { 

       transfer_data(*dp);  

       dp++; 

     } 

   } 

void display_graphic_16x16(uint8_t page,uint8_t column,uint8_t reverse,uint8_t *dp) 

   uint8_t i,j; 

   for(j=0;j<2;j++) 

   { 

     lcd_address(page+j,column); 

     for (i=0;i<16;i++) 

     { 

       if(reverse==1) 

       { 

          transfer_data(*dp);  

       } 

       else 

          transfer_data(~*dp); 

       dp++; 

     } 

   } 

void display_graphic_8x16(uint8_t page,uint8_t column,uint8_t *dp) 

   uint8_t i,j; 

   for(j=0;j<2;j++) 

   { 

     lcd_address(page+j,column); 

     for (i=0;i<8;i++) 

     { 

       transfer_data(*dp);  

       dp++; 

     } 

   } 

void display_string_8x16(uint16_t page,uint16_t column,uint8_t *text) 

   uint16_t i=0,j,k,n; 

   while(text[i]>0x00) 

   { 

      if((text[i]>=0x20)&&(text[i]<=0x7e)) 

       { 

         j=text[i]-0x20; 

         for(n=0;n<2;n++) 

         { 

           lcd_address(page+n,column); 

           for(k=0;k<8;k++) 

           { 

              transfer_data(ascii_table_8x16[j][k+8*n]); 

           } 

         } 

         i++; 

         column+=8;        

       } 

       else 

         i++; 

   } 

void display_string_5x7(uint16_t page,uint16_t column,uint8_t *text) 

   uint16_t i=0,j,k; 

   while(text[i]>0x00) 

   { 

     if((text[i]>=0x20)&&(text[i]<0x7e)) 

     { 

       j=text[i]-0x20; 

       lcd_address(page,column); 

       for(k=0;k<5;k++) 

       { 

          transfer_data(ascii_table_5x7[j][k]); 

       } 

       i++; 

       column+=6; 

     } 

     else 

     i++; 

   } 

//==================display a piture of 128*64 dots================ 

void disp_grap(uint8_t page,uint8_t column,uint8_t *dp) 

   int i,j; 

   for(i=0;i<8;i++) 

   { 

     lcd_address(page+i,column); 

     for(j=0;j<128;j++) 

     { 

       transfer_data(*dp); 

       dp++; 

     } 

   } 

在main.C中

晶联讯JLX12864G-290液晶,STM32+HAL库 SPI显示成功。
晶联讯JLX12864G-290液晶,STM32+HAL库 SPI显示成功。