基于Microblaze的PmodOLED驱动设计
设计目的:PmodOLED是一个基于Solomon Systech SSD1306的128*32像素的OLED模块,SPI通信接口,内屏缓冲。
据说,OLED是智能手机屏幕未来的选择趋势,同时苹果MAC Book笔记已经使用OLED做触控了,非常酷炫。
硬件准备:
CMODA7-35 开发板,
PmodOLED,
USB下载线。
软件环境:
VIVADO2015.2 / SDK 2015.2
PmodOLEDIP:https://github.com/Digilent/vivado-library/tree/master/ip/Pmods
如何使用IP配合Microblaze开发请看下面的连接:
https://reference.digilentinc.com/learn/programmable-logic/tutorials/pmod-ips/start
添加IP PmodOLED(这个IP库需要从刚刚给的链接中下载),USB UART(调试使用),Cell RAM,Connector JA(PmodOLED直接插在JA口即可) 。
同时,Microblaze的配置:
32KB Local Memory;
32KB Configuration Cache(Based on SRAM);
Others Default。
……进入SDK界面之后,
可容易发现 IP库中包含了示例驱动,将该mian.c文件复制到新建的PmodOLED APP工程src文件夹下,保存编译 -->>Program FPGA -->>Run as Launch on Hardware。
即可实现上图中的效果,本人将程序改写并给予一定的注释。
int main()
{
u8 *pat;
Xil_ICacheEnable(); //使能指令缓存
Xil_DCacheEnable(); //使能数据缓存
OLED_Begin(&myDevice, XPAR_PMODOLED_0_AXI_LITE_GPIO_BASEADDR,
XPAR_PMODOLED_0_AXI_LITE_SPI_BASEADDR);//初始化OLED 以及SPI
pat= OLED_GetStdPattern(0);
OLED_SetFillPattern(&myDevice,pat);
OLED_SetCharUpdate(&myDevice,1);//设置OLED为自动刷新
OLED_ClearBuffer(&myDevice); //清除显示缓存数据
OLED_SetCursor(&myDevice,0, 0);//设置第一行数据
OLED_PutString(&myDevice,"Hello Digilent");
OLED_SetCursor(&myDevice,0, 1);//128*32 可以显示4行,行高8个像素
OLED_PutString(&myDevice,"By Master Xu");
OLED_SetCursor(&myDevice,0, 2);
OLED_PutString(&myDevice,"2016/11/26");
OLED_SetCursor(&myDevice,0, 3);
OLED_PutString(&myDevice,"From Soochow");
// OLED_Delay(10000);
// DemoCleanup();
return 0;
}
效果图:
在以后的设计中,如果需要实时显示某些数据,用Pmod_OLED的会方便许多。并且128*32也足够显示很多内容了。
同时,OLED显示效果确实比LCD出彩很多,大家可以自行感受。
注:使用IP库配合Microblaze开发在第一次使用时难免遇到很多问题,请耐心参考之前提供的连接,不懂可以回复留言。
工程文件: https://pan.baidu.com/s/1nuGKEWL