ST7567液晶驱动(基于HK32F030M)

液晶屏本体

// 点灯例程
#include "hk32f030m.h"
#include "systick_delay.h"

#define DelayMs SysTick_DelayMs
#define DelayUs SysTick_DelayUs

// CS  A3
// RST B4
// DC  C3
// SDA C6
// SCL A2
#define LCD_SCL_PORT         GPIOA
#define LCD_SCL_PIN          GPIO_Pin_2

#define LCD_SDA_PORT         GPIOC
#define LCD_SDA_PIN          GPIO_Pin_6

#define LCD_CS_PORT          GPIOA 
#define LCD_CS_PIN           GPIO_Pin_3

#define LCD_RST_PORT         GPIOB
#define LCD_RST_PIN          GPIO_Pin_4

#define LCD_RS_PORT       	 GPIOC
#define LCD_RS_PIN        	 GPIO_Pin_3   //A0

#define LCD_CMD  		     0
#define LCD_DATA             1
						
#define PORT(port)       	 LCD_##port##_PORT
#define PIN(pin)         	 LCD_##pin##_PIN

#define LCD_MAX_HEIGHT_BIT	 64
#define LCD_MAX_WIDTH_BIT    128
#define LCD_MAX_HEIGHT	     LCD_MAX_HEIGHT_BIT/16
#define LCD_MAX_WIDTH        LCD_MAX_WIDTH_BIT/8

							
#define LCD_PIN_OUT(pin,level) { if(level)                               \
							     { GPIO_SetBits(PORT(pin),PIN(pin));}    \
							     else                                    \
							     { GPIO_ResetBits(PORT(pin),PIN(pin));}  \
                               }	


//本文使用的取模方式为:阴码、逆向、列行式
const unsigned char Ascii_8x16[][16]=	  
{
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/
{0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00},/*"!",1*/
{0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*""",2*/
{0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00},/*"#",3*/
{0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00},/*"$",4*/
{0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00},/*"%",5*/
{0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10},/*"&",6*/
{0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/
{0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00},/*"(",8*/
{0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00},/*")",9*/
{0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00},/*"*",10*/
{0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00},/*"+",11*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00},/*",",12*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01},/*"-",13*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00},/*".",14*/
{0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00},/*"/",15*/
{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00},/*"0",16*/
{0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},/*"1",17*/
{0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00},/*"2",18*/
{0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00},/*"3",19*/
{0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00},/*"4",20*/
{0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00},/*"5",21*/
{0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00},/*"6",22*/
{0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00},/*"7",23*/
{0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00},/*"8",24*/
{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00},/*"9",25*/
{0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00},/*":",26*/
{0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00},/*";",27*/
{0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00},/*"<",28*/
{0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00},/*"=",29*/
{0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00},/*">",30*/
{0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00},/*"?",31*/
{0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00},/*"@",32*/
{0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20},/*"A",33*/
{0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00},/*"B",34*/
{0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00},/*"C",35*/
{0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00},/*"D",36*/
{0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00},/*"E",37*/
{0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00},/*"F",38*/
{0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00},/*"G",39*/
{0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20},/*"H",40*/
{0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},/*"I",41*/
{0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00},/*"J",42*/
{0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00},/*"K",43*/
{0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00},/*"L",44*/
{0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00},/*"M",45*/
{0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00},/*"N",46*/
{0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00},/*"O",47*/
{0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00},/*"P",48*/
{0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00},/*"Q",49*/
{0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20},/*"R",50*/
{0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00},/*"S",51*/
{0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00},/*"T",52*/
{0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00},/*"U",53*/
{0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00},/*"V",54*/
{0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00},/*"W",55*/
{0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20},/*"X",56*/
{0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00},/*"Y",57*/
{0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00},/*"Z",58*/
{0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00},/*"[",59*/
{0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00},/*"\",60*/
{0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00},/*"]",61*/
{0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"^",62*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80},/*"_",63*/
{0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/
{0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20},/*"a",65*/
{0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00},/*"b",66*/
{0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00},/*"c",67*/
{0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20},/*"d",68*/
{0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00},/*"e",69*/
{0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},/*"f",70*/
{0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00},/*"g",71*/
{0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20},/*"h",72*/
{0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},/*"i",73*/
{0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00},/*"j",74*/
{0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00},/*"k",75*/
{0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00},/*"l",76*/
{0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F},/*"m",77*/
{0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20},/*"n",78*/
{0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00},/*"o",79*/
{0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00},/*"p",80*/
{0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80},/*"q",81*/
{0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00},/*"r",82*/
{0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00},/*"s",83*/
{0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00},/*"t",84*/
{0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20},/*"u",85*/
{0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00},/*"v",86*/
{0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00},/*"w",87*/
{0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00},/*"x",88*/
{0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00},/*"y",89*/
{0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00},/*"z",90*/
{0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40},/*"{",91*/
{0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00},/*"|",92*/
{0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00},/*"}",93*/
{0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"~",94*/
};

static void LcdIoInit(void)
{
	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
	RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);

	GPIO_InitTypeDef        GPIO_InitStructure;

	GPIO_InitStructure.GPIO_Pin = LCD_RST_PIN ;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
	GPIO_InitStructure.GPIO_Pin = LCD_CS_PIN|LCD_SCL_PIN;
	GPIO_Init(GPIOA, &GPIO_InitStructure);
    GPIO_InitStructure.GPIO_Pin = LCD_SDA_PIN|LCD_RS_PIN;
	GPIO_Init(GPIOC, &GPIO_InitStructure);
}							   
							   							   							
/*
ismcd:高为数据,低为指令
*/
static void LcdWrite(uint8_t iscmd ,uint8_t data)
{
	uint8_t  i;
	
	LCD_PIN_OUT(CS,0);
	
	LCD_PIN_OUT(RS,iscmd);

	for(i=0;i<8;i++)
	{
		if(data&0x80)
		{
			LCD_PIN_OUT(SDA,1);
		}
		else
		{
			LCD_PIN_OUT(SDA,0);
		}
		LCD_PIN_OUT(SCL,0);
		DelayUs(10); 
		LCD_PIN_OUT(SCL,1);
		DelayUs(10);
		data=data<<1;
	}
	
	LCD_PIN_OUT(CS,1);
}					   
		
/*
page   :0-7
column :0-127
*/
static void LcdAddress(uint8_t  page,uint8_t column) 
{
	LcdWrite(LCD_CMD,0xb0+page); 
	LcdWrite(LCD_CMD,((column>>4)&0x0f)+0x10); //设置列地址的高4 位 
	LcdWrite(LCD_CMD,((column>>0)&0x0f)+0x00); //设置列地址的低4 位
}

/*全屏清屏*/ 
void LcdClearScreen(void) 
{
	uint8_t  i,j; 
	
	for(i=0;i<8;i++) 
	{
		LcdAddress(i,0);
		
		for(j=0;j<128;j++) 
		{
			LcdWrite(LCD_DATA,0x0); 
		}
	}
}

/*清屏某一行*/ 
void LcdClearScreenLine(uint8_t line) 
{
	uint8_t  j; 
	
	LcdAddress(line,0);
		
	for(j=0;j<128;j++) 
	{
		LcdWrite(LCD_DATA,0x0); 
	}
}


void LcdDispBG(void) 
{
	uint8_t  i;
	//上框 
	LcdAddress(0,0); 
	for (i=0;i<128;i++) 
	{
		LcdWrite(LCD_DATA,0x01); 
	}
	//下框 
	LcdAddress(7,0); 
	for (i=0;i<128;i++) 
	{
		LcdWrite(LCD_DATA,0x80); 
	}
	
	//左框 
	for(i=0;i<8;i++) 
	{
		LcdAddress(i,0); 
		LcdWrite(LCD_DATA,0xff); 
	}
	//右框 
	for(i=0;i<8;i++) 
	{
		LcdAddress(i,127); 
		LcdWrite(LCD_DATA,0xff); 
	}
}

void LcdDispStr8x16(uint8_t reverse,uint8_t page,uint8_t column,uint8_t *str) 
{
	uint16_t i=0,j=0,k=0;
	
	while(str[i]>0x00) 
	{
		if((str[i]>=0x20)&&(str[i]<=0x7e)) 
		{
			j=str[i]-0x20; 
			LcdAddress(page,column); //上半部分
			for(k=0;k<8;k++) 
			{
				if (reverse==1) 
				{
					LcdWrite(LCD_DATA,Ascii_8x16[j][k]);
				}
				else 
				{
					LcdWrite(LCD_DATA,~(Ascii_8x16[j][k])); 
				}
			}
			LcdAddress(page+1,column);//下半部分
			
			for(k=0;k<8;k++) 
			{
				if (reverse==1) 
				{
					LcdWrite(LCD_DATA,Ascii_8x16[j][k+8]);
				}
				else 
				{
					LcdWrite(LCD_DATA,~(Ascii_8x16[j][k+8])); 
				}
			}
			i++; 
			column+=8;
		}
	}
}

void LcdInit(void)
{   
	LcdIoInit();
	
	LCD_PIN_OUT(RST,0);
	DelayMs(20); 
	LCD_PIN_OUT(RST,1);     /*复位完毕*/ 
	DelayMs(20); 
		
	LcdWrite(LCD_CMD,0xe2);	 /*软复位*/
	LcdWrite(LCD_CMD,0x2c);  /*升压步聚1*/	
	LcdWrite(LCD_CMD,0x2e);  /*升压步聚2*/
	LcdWrite(LCD_CMD,0x2f);  /*升压步聚3*/
	LcdWrite(LCD_CMD,0x25);  /*粗调对比度,可设置范围0x20~0x27*/
	LcdWrite(LCD_CMD,0x81);  /*微调对比度*/
	LcdWrite(LCD_CMD,0x1a);  /*0x1a,微调对比度的值,可设置范围0x00~0x3f*/
	LcdWrite(LCD_CMD,0xa2);  /*1/9偏压比(bias)*/
	LcdWrite(LCD_CMD,0xc8);  /*行扫描顺序:从上到下*/
	LcdWrite(LCD_CMD,0xa0);  /*列扫描顺序:从左到右*/
	LcdWrite(LCD_CMD,0x40);  /*起始行:第一行开始*/
	LcdWrite(LCD_CMD,0xaf);  /*开显示*/
}

int main(){
    SysTick_Init();
    LcdInit();

	LcdClearScreen();
	LcdDispBG();
	LcdDispStr8x16(1,3,36,(uint8_t *)"LCD12864");
	LcdDispStr8x16(0,5,28,(uint8_t *)"1234567890");

    while (1){}
    
}
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ST7567是一款常用的单色图形液晶控制器,常用于嵌入式系统中。STM32是STMicroelectronics(意法半导体)公司生产的一系列基于ARM Cortex-M内核的32位微控制器。 要驱动ST7567显示器模块,首先需要连接STM32微控制器和ST7567控制器。通过控制STM32的GPIO引脚与ST7567的时钟(CLK)、数据命令(D/C)、数据(DIN)、复位(RST)等引脚连接,在STM32上配置相应的GPIO模式和时序。此外,还需通过SPI(串行外设接口)或I2C(串行总线)协议来与ST7567进行通信。 接下来,在STM32上实现驱动程序。可以使用STMicroelectronics提供的HAL库或者自己编写底层驱动程序驱动程序通常包括初始化设置、屏幕亮度控制、显示缓冲区管理、图像数据渲染和刷新等功能。 首先,需要进行初始化设置,包括配置SPI或I2C通信参数、初始化GPIO引脚、对ST7567进行复位等。 然后,需要实现屏幕亮度控制。可以通过调整ST7567的对比度控制来实现屏幕的亮度调节。 接着,需要管理显示缓冲区。可以创建一个与ST7567像素矩阵大小相同的内存数组作为显示缓冲区,并在需要更新屏幕内容时,将需要显示的图像数据写入缓冲区。 然后,需要实现图像数据的渲染。可以根据需要在缓冲区中绘制图形、文本等,然后通过驱动程序将数据发送给ST7567。 最后,需要定时刷新屏幕内容。通过控制驱动程序的刷新频率,实现屏幕内容的更新和显示。 以上是驱动ST7567液晶显示器的基本步骤和方法。通过掌握STM32的GPIO、SPI或I2C等相关知识,结合ST7567驱动规范,就可以成功驱动ST7567液晶显示器,并在嵌入式系统中实现所需的图形显示功能。 ### 回答2: ST7567是一款基于SPI总线协议的液晶驱动芯片,可以与STM32微控制器进行连接和驱动。 首先,我们需要在STM32的开发环境中创建一个新的工程,并将ST7567驱动程序库导入到工程中。这个驱动程序库通常包含了与ST7567芯片通信所需的函数和定义。 接下来,我们需要根据连接电路图将ST7567芯片与STM32微控制器进行物理连接。通常,SPI总线由四个主要的信号线组成:时钟线(SCK),数据线(MOSI),从机选择线(SSB)和数据/命令控制线(DC)。确保将这些信号线正确连接到STM32的相应引脚上,并为ST7567芯片提供正确的电源电压和地接线。 然后,我们可以根据ST7567的数据手册编写代码,实现与ST7567芯片的通信和控制。首先,我们需要初始化SPI总线,并设置相关的寄存器和参数,以确保与ST7567的正常通信。然后,我们可以使用相应的函数和指令发送数据和命令到ST7567,并进行屏幕显示的控制,例如清屏、绘制图形和显示文本等。 最后,我们可以编译和下载程序到STM32微控制器,并将其与ST7567和其他相关硬件一起启动。通过正确的物理连接和软件驱动,STM32可以与ST7567芯片进行通信,并实现对液晶屏的控制和显示。 需要注意的是,以上仅为一般步骤的概述,并且具体的驱动方法和代码实现可能因不同的开发环境和硬件连接而有所不同。因此,在具体的项目中,我们需要参考ST7567的数据手册、STM32的参考资料以及驱动程序库的文档来详细了解和实现ST7567驱动STM32的具体步骤和方法。 ### 回答3: ST7567是一种图形液晶显示器控制器驱动芯片,可以用于控制128x64或者132x32像素的单色液晶显示屏。而STM32是一系列的32位ARM Cortex-M微控制器,广泛应用于嵌入式系统开发。 要在STM32上使用ST7567驱动,首先需要连接硬件。将STM32的引脚与ST7567的引脚相连,包括数据线、时钟线、片选线等,以便实现数据和指令的传输。还要连接电源线,保证ST7567正常供电。 接下来,在STM32的开发环境中编写驱动程序。首先,初始化STM32的GPIO和SPI(或者I2C)接口,以便与ST7567进行通信。然后,编写LCD的初始化函数,设置ST7567的工作模式、显示模式、对比度等参数。在初始化函数中,还需要发送一系列指令和数据,以便设置ST7567的内部寄存器。这些指令和数据可以从ST7567的数据手册中获得。 一旦ST7567和STM32成功建立通信,就可以在STM32的主程序中使用ST7567驱动进行显示操作了。通过向ST7567发送数据,可以在液晶屏上显示文字、图像等内容。可以编写函数来实现绘制点、直线、矩形和填充矩形等基本图形,以及显示字符串等高级操作。 最后,需要注意的是,ST7567驱动程序的具体实现可能会有所不同,因为它取决于具体的STM32型号和开发环境。特定的STM32开发板和软件包可能提供了相应的库函数或者示例代码,可以更方便地进行ST7567驱动开发。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值