这里要驱动是IIC接口的OLED,没有使用硬件IIC,这样便于移植相关的程序到其他的芯片上。
oled的资料就不再赘述了。
OLED和CW32F030CxTx的对应接口是PA3--SCL,PA4--SDA
使用宏定义,便于后期好修改IO口。
#define OLED_SCLK_Pin GPIO_PIN_3
#define OLED_SCLK_GPIO_Port CW_GPIOA
#define OLED_SDIN_Pin GPIO_PIN_4
#define OLED_SDIN_GPIO_Port CW_GPIOA 使用宏定义,确定SCL和SDA的IO操作。CW库里面直接给定义好了如何给IO置高或者置低。
cw32f030_gpio.h里面有所有的IO的操作。
#define OLED_SCLK_Clr() PA03_SETLOW()//SCL 拉低
#define OLED_SCLK_Set() PA03_SETHIGH() //SCL 拉高
#define OLED_SDIN_Clr() PA04_SETLOW()//SDA 拉低
#define OLED_SDIN_Set() PA04_SETHIGH() //SDA 拉高 初始化一下IO口。
GPIO_InitTypeDef GPIO_InitStructure;
__RCC_GPIOA_CLK_ENABLE();
GPIO_InitStructure.Pins = OLED_SDIN_Pin|OLED_SCLK_Pin;
GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStructure.IT = GPIO_IT_NONE;
GPIO_InitStructure.Speed = GPIO_SPEED_HIGH;
GPIO_Init(OLED_SDIN_GPIO_Port, &GPIO_InitStructure); 其他的设置都是开发板默认的设置了。
OLED_Init();
OLED_Clear();
OLED_ShowStringCN(0,16,"芯源CW32 MCU ",1);
OLED_ShowString(0,0,"bbs.21ic.com",16,1); //表示x=4,y=8开始显示字符串
OLED_Refresh();
主要是介绍一下,如何将汉字和英文字符混合显示。
void OLED_ShowStringCN(uint8_t x,uint8_t y,uint8_t *chr,uint8_t mode)
{ unsigned short k,x0;
unsigned char i,j;
while(*chr) {
if((*chr) < 128)
{
OLED_ShowChar(x,y,*chr,16,mode);
x+=8;
chr++;
} else {
for (k=0; k<hz16_num; k++)
{
if ((hz16[k].Index[0]==*(chr))&&(hz16[k].Index[1]==*(chr+1)))
{
for(i=0; i<16; i++)
{
for(j=0; j<8; j++)
{
if(hz16[k].Msk[i*2]&(0x80>>j)) OLED_DrawPoint(x+j,y+i,mode);
else {
OLED_DrawPoint(x+j,y+i,!mode);;
}
}
for(j=0; j<8; j++)
{
if(hz16[k].Msk[i*2+1]&(0x80>>j)) OLED_DrawPoint(x+j+8,y+i,mode);
else
{
OLED_DrawPoint(x+j+8,y+i,!mode);;
}
}
}
}
}
chr+=2;
x+=16;
}
}
} 看看显示的效果怎么样?
源代码:
CW32F030.rar
(2.99 MB)
|