我看到的OLED12864可以使用两种协议,一种是SPI协议,另外一种是IIC协议。这次我采用的是SPI协议。
本次是直接采用GPIO来模拟SPI协议的,而没有用到内部的spi接口。具体的连接如下:
DC -> PC10
RST -> PC11
SDA -> PC12
SCL -> PD2
上图!
程序是从51的移植过来的,部分代码:
#define Set_DC HAL_GPIO_WritePin(GPIOC,GPIO_PIN_10,GPIO_PIN_SET)
#define Clr_DC HAL_GPIO_WritePin(GPIOC,GPIO_PIN_10,GPIO_PIN_RESET)
#define Set_RST HAL_GPIO_WritePin(GPIOC,GPIO_PIN_11,GPIO_PIN_SET)
#define Clr_RST HAL_GPIO_WritePin(GPIOC,GPIO_PIN_11,GPIO_PIN_RESET)
#define Set_SDA HAL_GPIO_WritePin(GPIOC,GPIO_PIN_12,GPIO_PIN_SET)
#define Clr_SDA HAL_GPIO_WritePin(GPIOC,GPIO_PIN_12,GPIO_PIN_RESET)
#define Set_SCL HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET)
#define Clr_SCL HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RESET)
void LCD_WrDat(unsigned char dat)
{
unsigned char i;
Set_DC;
for(i=0;i<8;i++)
{
if((dat << i) & 0x80)
{
Set_SDA;
}
else
{
Clr_SDA;
}
Clr_SCL;
Set_SCL;
}
}
void LCD_Set_Pos(unsigned char x, unsigned char y)
{
LCD_WrCmd(0xb0+y);
LCD_WrCmd(((x&0xf0)>>4)|0x10);
LCD_WrCmd((x&0x0f)|0x01);
}