十速科技MCU驱动OLED

作者: wudianjun2001
上传时间为: 2014-11-19 10:10 AM
2014-11-19
阅读:

这几天工作上在测试个十速科技公司的MCU,这个公司大家很陌生吧,不多说,避免打广告嫌疑。

先从IO口开始学起,正好前段时间得到个SAM4S的套件,然后就把OLED屏小板用上,来学习下这颗MCU。把SAM4S里面的SSD1306程序移植到这颗MCU上来。

先看看OLED的接口控制信号,直接用IO口来模拟SPI

OLED板的外观

OLED部分的原理图

本OLED是128*32点阵的。字库ASCII码就用5*8的,可以显示4行。汉字库用16*16的,可以显示2行。SAM4S里的ASCII字库是不等宽的,使用了指针数组,移植到51MCU上不方便,直接把所有字库都搞成5*8等宽的,为了字符分开点,在两个字符字符之间再增加一个空行。

OLED板和十速开发板直接用跳线连接,顺便再控制一个LED。连线图

显示效果

部分程序

void main(void)

{

unsigned char hz[8];

unsigned char i;

char *str;

TM52F2260Demo_Init(); //Demo上电初始化

ssd1306_init();

ssd1306_clear();

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

{

hz[i] = i;

}

Display_Hanzi_Buf (LINE1, 32, hz, 4);

str = "Welcome to";

Display_Text (LINE3, (128 - strlen(str) * 6) / 2, str);

str = "www.eeboard.com!";

Display_Text (LINE4, (128 - strlen(str) * 6) / 2, str);

while(1) //主程序循环

{

LED = 0;

Delay_Nms(500);

LED = 1;

Delay_Nms(500);

}

}

//显示一个5*8的ASCII字符

void Display_ASCII (unsigned char num)

{

unsigned char i;

unsigned char show_data;

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

{

show_data = *(ASCII_TAB + num * 5 + i);

ssd1306_write_data(show_data);

}

}

//显示字符串

void Display_Text (unsigned char line, unsigned char cloume, char *string)

{

if (line > 4) //保证在显示范围内

{

line = 4;

}

ssd1306_set_page_address(line);

ssd1306_set_column_address(cloume);

while (*string != 0)

{

if (*string < 0x7F)

{

Display_ASCII (*string - 32);

}

ssd1306_write_data(0x00); //每一个字符后增加一个空列

string ++;

}

}

全部评论 ()
条评论
写评论

创建讨论帖子

登录 后参与评论
系统提示