一、原理简介

Vivado版本:2016.2

OLED型号:128*32的UG-2832HSWEG04

ZedBoard的OLED部分电路原理图如下:(需要我们关心的是我用红色椭圆标注出来的3处,一共6个信号)

zedboard控制OLED的主要方法是:自己设计一个IP核,把OLED对应的6个控制引脚进行逻辑设计和约束,IP核通过AXI总线,把OLED对应的6个控制引脚和PS联系起来。通过PS编写相应的驱动程序,即可实现对OLED的控制。方案如下:

 二、在Vivado中进行硬件设计

1.创建工程 (板子型号选zedboard)>> Tools >> Create and Package IP

2.选择Create AXI4 Peripheral

3.更改ip名

4.一路默认,在最后一页选择Edit IP(最小得选4个寄存器实际我们只用到了一个32位寄存器中的低6位)

5.此时会建立一个临时工程,在我们修改完成后会自行删除

6.给顶层文件添加输出端口OLED,即添加如下代码:output wire [5:0] OLED

给子模块添加.OLED(OLED),

7.同样,给子模块添加输出端口OLED,即添加如下代码: output reg [5:0] OLED, 

然后添加如下代码,将slv_reg0寄存器的低6位赋给OLED端口

8.保存,并在如下页面的Customization GUI中确认,所添加的输出端口是否显示出来,如果没有,在此页面顶部有会提示,点击更新一下即可

9.点击下图底部的Re-Package IP,此时软件自动关闭。可在IP catalog的下属文件夹中找到了定义的IP。(以上为创建AXI IP的基本步骤)

10.创建Block Design,名字默认。添加ZYNQ,以及自定义的myOLED_ip。点击Run Block Automation。

11.修改ZYNQ,只保留一个uart1和默认的GPIO。点击Run Connection Automation,并Regenerate Layout,最终的block设计图如下:

分配的地址如下:

12.validate design >> generate output products >> create HDL wrapper.

13.查看zedboard中OLED硬件连接原理图(我们需要用到的就是我红色椭圆标注出来的)

14.综合后,打开综合设计,在I/O Planning 视图中按原理图添加OLED端口约束管脚,这里的顺序可以随意,但一定要和后续的驱动程序相对应。

 这里给出我的约束文件代码:

  1. set_property IOSTANDARD LVCMOS33 [get_ports {OLED[]}]
  2. set_property IOSTANDARD LVCMOS33 [get_ports {OLED[]}]
  3. set_property IOSTANDARD LVCMOS33 [get_ports {OLED[]}]
  4. set_property IOSTANDARD LVCMOS33 [get_ports {OLED[]}]
  5. set_property IOSTANDARD LVCMOS33 [get_ports {OLED[]}]
  6. set_property IOSTANDARD LVCMOS33 [get_ports {OLED[]}]
  7. set_property PACKAGE_PIN U12 [get_ports {OLED[]}]
  8. set_property PACKAGE_PIN U11 [get_ports {OLED[]}]
  9. set_property PACKAGE_PIN AA12 [get_ports {OLED[]}]
  10. set_property PACKAGE_PIN U10 [get_ports {OLED[]}]
  11. set_property PACKAGE_PIN U9 [get_ports {OLED[]}]
  12. set_property PACKAGE_PIN AB12 [get_ports {OLED[]}]

 也就是说,我的引脚对应关系为:

15.生成比特流 >> export to hardware >> lanch sdk 。至此,vivado中的硬件设计就结束了。

 三、在SDK中进行软件设计

1.新建工程application project >> 选择hello world模板(这里有一些自动添加进来的文件可能会用到,比如:platform.h和platform.c  如果选择空模板的话,这些文件不会被自动添加进来,目前我也不知道怎么手动添加它们)

2.新建oled.h头文件,代码如下:

  1. /*
  2. * oled.h
  3. */
  4.  
  5. #ifndef OLED_H_
  6. #define OLED_H_
  7. #include "xil_types.h" // 数据类型定义
  8. #include "xil_io.h"
  9.  
  10. extern int usleep(unsigned int useconds);
  11.  
  12. #define OLED_BASE_ADDR 0X43c00000 //这里根据自己vivado中分配的地址来修改
  13.  
  14. #define OLED_DC 0
  15. #define OLED_RES 1
  16. #define OLED_SCLK 2
  17. #define OLED_SDIN 3
  18. #define OLED_VBAT 4
  19. #define OLED_VDD 5
  20. //Xil_Out32(OLED_BASE_ADDR,1<<i);
  21.  
  22. // DC
  23. #define Set_OLED_DC (Xil_Out32(OLED_BASE_ADDR,Xil_In32(OLED_BASE_ADDR)|(1<<OLED_DC)))
  24. #define Clr_OLED_DC (Xil_Out32(OLED_BASE_ADDR,Xil_In32(OLED_BASE_ADDR)&(~(1<<OLED_DC))))
  25. // RES
  26. #define Set_OLED_RES (Xil_Out32(OLED_BASE_ADDR,Xil_In32(OLED_BASE_ADDR)|(1<<OLED_RES)))
  27. #define Clr_OLED_RES (Xil_Out32(OLED_BASE_ADDR,Xil_In32(OLED_BASE_ADDR)&(~(1<<OLED_RES))))
  28.  
  29. // SCLK
  30. #define Set_OLED_SCLK (Xil_Out32(OLED_BASE_ADDR,Xil_In32(OLED_BASE_ADDR)|(1<<OLED_SCLK)))
  31. #define Clr_OLED_SCLK (Xil_Out32(OLED_BASE_ADDR,Xil_In32(OLED_BASE_ADDR)&(~(1<<OLED_SCLK))))
  32. // SDIN
  33. #define Set_OLED_SDIN (Xil_Out32(OLED_BASE_ADDR,Xil_In32(OLED_BASE_ADDR)|(1<<OLED_SDIN)))
  34. #define Clr_OLED_SDIN (Xil_Out32(OLED_BASE_ADDR,Xil_In32(OLED_BASE_ADDR)&(~(1<<OLED_SDIN))))
  35. // OLED_VBAT
  36. #define Set_OLED_VBAT (Xil_Out32(OLED_BASE_ADDR,Xil_In32(OLED_BASE_ADDR)|(1<<OLED_VBAT)))
  37. #define Clr_OLED_VBAT (Xil_Out32(OLED_BASE_ADDR,Xil_In32(OLED_BASE_ADDR)&(~(1<<OLED_VBAT))))
  38.  
  39. // OLED_VDD
  40. #define Set_OLED_VDD (Xil_Out32(OLED_BASE_ADDR,Xil_In32(OLED_BASE_ADDR)|(1<<OLED_VDD)))
  41. #define Clr_OLED_VDD (Xil_Out32(OLED_BASE_ADDR,Xil_In32(OLED_BASE_ADDR)&(~(1<<OLED_VDD))))
  42.  
  43. //OLED控制用函数
  44. void write_data(u8 data);
  45. void write_cmd(u8 data);
  46. void OLED_Display_On(void);
  47. void OLED_Display_Off(void);
  48. void OLED_Refresh_Gram(void);
  49.  
  50. void OLED_Init(void);
  51. void OLED_Clear(void);
  52. void OLED_DrawPoint(u8 x,u8 y,u8 t);
  53. void OLED_Fill(u8 x1,u8 y1,u8 x2,u8 y2,u8 dot);
  54. void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size,u8 mode);
  55. void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size);
  56. void OLED_ShowString(u8 x,u8 y,const u8 *p);
  57.  
  58. #endif /* OLED_H_ */

3.新建oled.c源文件,代码如下:

  1. * oled.c
  2.  
  3. #include "oled.h"
  4. #include "stdlib.h"
  5. #include "font.h"
  6.  
  7. //SSD1306 OLED 驱动IC驱动代码
  8. //4线串口
  9. //版本:V1.1
  10. //cuter
  11. //2012-12-16
  12.  
  13. //OLED的显存
  14. //存放格式如下.
  15. //[0]0 1 2 3 ... 127
  16. //[1]0 1 2 3 ... 127
  17. //[2]0 1 2 3 ... 127
  18. //[3]0 1 2 3 ... 127
  19. //[4]0 1 2 3 ... 127
  20. //[5]0 1 2 3 ... 127
  21. //[6]0 1 2 3 ... 127
  22. //[7]0 1 2 3 ... 127
  23. u8 OLED_GRAM[][];
  24.  
  25. //更新显存到LCD
  26. void OLED_Refresh_Gram(void)
  27. {
  28. u8 i,n;
  29. for(i=;i<;i++)
  30. {
  31. write_cmd (0xb0+i); //设置页地址(0~7)
  32. write_cmd (0x02); //设置显示位置—列低地址,偏移了2列
  33. write_cmd (0x10); //设置显示位置—列高地址
  34. for(n=;n<;n++)write_data(OLED_GRAM[n][i]);
  35. }
  36. }
  37.  
  38. //向SSD1306写入一个字节的命令。
  39. void write_cmd(u8 data)
  40. {
  41. u8 i;
  42. Clr_OLED_DC;
  43.  
  44. for(i=;i<;i++)
  45. {
  46. Clr_OLED_SCLK;
  47.  
  48. if(data&0x80)
  49. Set_OLED_SDIN;
  50. else
  51. Clr_OLED_SDIN;
  52. Set_OLED_SCLK;
  53. data<<=;
  54. }
  55.  
  56. }
  57.  
  58. //向SSD1306写入一个字节的数据。
  59. void write_data(u8 data)
  60. {
  61. u8 i;
  62. Set_OLED_DC;
  63.  
  64. for(i=;i<;i++)
  65. {
  66. Clr_OLED_SCLK;
  67.  
  68. if(data&0x80)
  69. Set_OLED_SDIN;
  70. else
  71. Clr_OLED_SDIN;
  72. Set_OLED_SCLK;
  73. data<<=;
  74. }
  75.  
  76. }
  77.  
  78. //开启OLED显示
  79. void OLED_Display_On(void)
  80. {
  81. write_cmd(0X8D); //SET DCDC命令
  82. write_cmd(0X14); //DCDC ON
  83. write_cmd(0XAF); //DISPLAY ON
  84. }
  85. //关闭OLED显示
  86. void OLED_Display_Off(void)
  87. {
  88. write_cmd(0X8D); //SET DCDC命令
  89. write_cmd(0X10); //DCDC OFF
  90. write_cmd(0XAE); //DISPLAY OFF
  91. Set_OLED_VDD;
  92. Set_OLED_VBAT;
  93. }
  94. //清屏函数,清完屏,整个屏幕是黑色的!和没点亮一样!!!
  95. void OLED_Clear(void)
  96. {
  97. u8 i,n;
  98. for(i=;i<;i++)
  99. for(n=;n<;n++)
  100. OLED_GRAM[n][i]=0X00;
  101. OLED_Refresh_Gram();//更新显示
  102. }
  103.  
  104. //画点
  105. //x:0~127
  106. //y:0~63
  107. //t:1 填充 0,清空
  108. void OLED_DrawPoint(u8 x,u8 y,u8 t)
  109. {
  110. u8 pos,bx,temp=;
  111.  
  112. if(x>||y>)
  113. return;//超出范围了.
  114. pos=-y/;
  115. bx=y%;
  116. temp=<<(-bx);
  117.  
  118. if(t)
  119. OLED_GRAM[x][pos]|=temp;
  120. else
  121. OLED_GRAM[x][pos]&=~temp;
  122. }
  123.  
  124. //x1,y1,x2,y2 填充区域的对角坐标
  125. //确保x1<=x2;y1<=y2 0<=x1<=127 0<=y1<=63
  126. //dot:0,清空;1,填充
  127. void OLED_Fill(u8 x1,u8 y1,u8 x2,u8 y2,u8 dot)
  128. {
  129. u8 x,y;
  130. for(x=x1;x<=x2;x++)
  131. {
  132. for(y=y1;y<=y2;y++)
  133. OLED_DrawPoint(x,y,dot);
  134. }
  135. OLED_Refresh_Gram();//更新显示
  136. }
  137.  
  138. //在指定位置显示一个字符,包括部分字符
  139. //x:0~127
  140. //y:0~63
  141. //mode:0,反白显示;1,正常显示
  142. //size:选择字体 16/12
  143. void OLED_ShowChar(u8 x,u8 y,u8 chr,u8 size,u8 mode)
  144. {
  145. u8 temp,t,t1;
  146. u8 y0=y;
  147. chr=chr-' ';//得到偏移后的值
  148. for(t=;t<size;t++)
  149. {
  150. if(size==)temp=asc2_1206[chr][t]; //调用1206字体
  151. else temp=asc2_1608[chr][t]; //调用1608字体
  152. for(t1=;t1<;t1++)
  153. {
  154. if(temp&0x80)OLED_DrawPoint(x,y,mode);
  155. else OLED_DrawPoint(x,y,!mode);
  156. temp<<=;
  157. y++;
  158. if((y-y0)==size)
  159. {
  160. y=y0;
  161. x++;
  162. break;
  163. }
  164. }
  165. }
  166. }
  167.  
  168. //m^n函数
  169. u32 mypow(u8 m,u8 n)
  170. {
  171. u32 result=;
  172. while(n--)result*=m;
  173. return result;
  174. }
  175.  
  176. //显示2个数字
  177. //x,y :起点坐标
  178. //len :数字的位数
  179. //size:字体大小
  180. //mode:模式 0,填充模式;1,叠加模式
  181. //num:数值(0~4294967295);
  182. void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8 size)
  183. {
  184. u8 t,temp;
  185. u8 enshow=;
  186. for(t=;t<len;t++)
  187. {
  188. temp=(num/mypow(,len-t-))%;
  189. if(enshow==&&t<(len-))
  190. {
  191. if(temp==)
  192. {
  193. OLED_ShowChar(x+(size/)*t,y,' ',size,);
  194. continue;
  195. }else enshow=;
  196.  
  197. }
  198. OLED_ShowChar(x+(size/)*t,y,temp+'',size,);
  199. }
  200. }
  201.  
  202. //显示字符串
  203. //x,y:起点坐标
  204. //*p:字符串起始地址
  205. //用16字体
  206. void OLED_ShowString(u8 x,u8 y,const u8 *p)
  207. {
  208. #define MAX_CHAR_POSX 122
  209. #define MAX_CHAR_POSY 58
  210. while(*p!='\0')
  211. {
  212. if(x>MAX_CHAR_POSX){x=;y+=;}
  213. if(y>MAX_CHAR_POSY){y=x=;OLED_Clear();}
  214. OLED_ShowChar(x,y,*p,,);
  215. x+=;
  216. p++;
  217. }
  218. }
  219.  
  220. //初始化SSD1306
  221. void OLED_Init(void)
  222. {
  223. Clr_OLED_VDD;
  224. usleep(); // 300us
  225. Clr_OLED_RES;
  226. usleep(); // 30ms
  227. Set_OLED_RES;
  228. usleep(); // 30ms
  229. Clr_OLED_VBAT;
  230.  
  231. write_cmd(0xA8);
  232. write_cmd(0x3F);
  233.  
  234. write_cmd(0xD3);
  235. write_cmd(0x00);
  236.  
  237. write_cmd(0x40);
  238.  
  239. write_cmd(0xA0);
  240. write_cmd(0xC8);
  241.  
  242. write_cmd(0xDA);
  243. write_cmd(0x02);
  244.  
  245. write_cmd(0x81);
  246. write_cmd(0x7F);
  247.  
  248. write_cmd(0xA4);
  249. write_cmd(0xA6);
  250.  
  251. write_cmd(0xD5);
  252. write_cmd(0x80);
  253.  
  254. write_cmd(0x8D);
  255. write_cmd(0x14);
  256.  
  257. write_cmd(0xAF);
  258. }

4.新建font.h头文件,代码如下:

  1. * font.h
  2.  
  3. #ifndef FONT_H_
  4. #define FONT_H_
  5.  
  6. //常用ASCII表
  7. //偏移量32
  8. //ASCII字符集
  9. //偏移量32
  10. //大小:12*6
  11. const unsigned char asc2_1206[][]={
  12. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/
  13. {0x00,0x00,0x00,0x00,0x3F,0x40,0x00,0x00,0x00,0x00,0x00,0x00},/*"!",1*/
  14. {0x00,0x00,0x30,0x00,0x40,0x00,0x30,0x00,0x40,0x00,0x00,0x00},/*""",2*/
  15. {0x09,0x00,0x0B,0xC0,0x3D,0x00,0x0B,0xC0,0x3D,0x00,0x09,0x00},/*"#",3*/
  16. {0x18,0xC0,0x24,0x40,0x7F,0xE0,0x22,0x40,0x31,0x80,0x00,0x00},/*"$",4*/
  17. {0x18,0x00,0x24,0xC0,0x1B,0x00,0x0D,0x80,0x32,0x40,0x01,0x80},/*"%",5*/
  18. {0x03,0x80,0x1C,0x40,0x27,0x40,0x1C,0x80,0x07,0x40,0x00,0x40},/*"&",6*/
  19. {0x10,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/
  20. {0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x80,0x20,0x40,0x40,0x20},/*"(",8*/
  21. {0x00,0x00,0x40,0x20,0x20,0x40,0x1F,0x80,0x00,0x00,0x00,0x00},/*")",9*/
  22. {0x09,0x00,0x06,0x00,0x1F,0x80,0x06,0x00,0x09,0x00,0x00,0x00},/*"*",10*/
  23. {0x04,0x00,0x04,0x00,0x3F,0x80,0x04,0x00,0x04,0x00,0x00,0x00},/*"+",11*/
  24. {0x00,0x10,0x00,0x60,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*",",12*/
  25. {0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x00,0x00},/*"-",13*/
  26. {0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*".",14*/
  27. {0x00,0x20,0x01,0xC0,0x06,0x00,0x38,0x00,0x40,0x00,0x00,0x00},/*"/",15*/
  28. {0x1F,0x80,0x20,0x40,0x20,0x40,0x20,0x40,0x1F,0x80,0x00,0x00},/*"0",16*/
  29. {0x00,0x00,0x10,0x40,0x3F,0xC0,0x00,0x40,0x00,0x00,0x00,0x00},/*"1",17*/
  30. {0x18,0xC0,0x21,0x40,0x22,0x40,0x24,0x40,0x18,0x40,0x00,0x00},/*"2",18*/
  31. {0x10,0x80,0x20,0x40,0x24,0x40,0x24,0x40,0x1B,0x80,0x00,0x00},/*"3",19*/
  32. {0x02,0x00,0x0D,0x00,0x11,0x00,0x3F,0xC0,0x01,0x40,0x00,0x00},/*"4",20*/
  33. {0x3C,0x80,0x24,0x40,0x24,0x40,0x24,0x40,0x23,0x80,0x00,0x00},/*"5",21*/
  34. {0x1F,0x80,0x24,0x40,0x24,0x40,0x34,0x40,0x03,0x80,0x00,0x00},/*"6",22*/
  35. {0x30,0x00,0x20,0x00,0x27,0xC0,0x38,0x00,0x20,0x00,0x00,0x00},/*"7",23*/
  36. {0x1B,0x80,0x24,0x40,0x24,0x40,0x24,0x40,0x1B,0x80,0x00,0x00},/*"8",24*/
  37. {0x1C,0x00,0x22,0xC0,0x22,0x40,0x22,0x40,0x1F,0x80,0x00,0x00},/*"9",25*/
  38. {0x00,0x00,0x00,0x00,0x08,0x40,0x00,0x00,0x00,0x00,0x00,0x00},/*":",26*/
  39. {0x00,0x00,0x00,0x00,0x04,0x60,0x00,0x00,0x00,0x00,0x00,0x00},/*";",27*/
  40. {0x00,0x00,0x04,0x00,0x0A,0x00,0x11,0x00,0x20,0x80,0x40,0x40},/*"<",28*/
  41. {0x09,0x00,0x09,0x00,0x09,0x00,0x09,0x00,0x09,0x00,0x00,0x00},/*"=",29*/
  42. {0x00,0x00,0x40,0x40,0x20,0x80,0x11,0x00,0x0A,0x00,0x04,0x00},/*">",30*/
  43. {0x18,0x00,0x20,0x00,0x23,0x40,0x24,0x00,0x18,0x00,0x00,0x00},/*"?",31*/
  44. {0x1F,0x80,0x20,0x40,0x27,0x40,0x29,0x40,0x1F,0x40,0x00,0x00},/*"@",32*/
  45. {0x00,0x40,0x07,0xC0,0x39,0x00,0x0F,0x00,0x01,0xC0,0x00,0x40},/*"A",33*/
  46. {0x20,0x40,0x3F,0xC0,0x24,0x40,0x24,0x40,0x1B,0x80,0x00,0x00},/*"B",34*/
  47. {0x1F,0x80,0x20,0x40,0x20,0x40,0x20,0x40,0x30,0x80,0x00,0x00},/*"C",35*/
  48. {0x20,0x40,0x3F,0xC0,0x20,0x40,0x20,0x40,0x1F,0x80,0x00,0x00},/*"D",36*/
  49. {0x20,0x40,0x3F,0xC0,0x24,0x40,0x2E,0x40,0x30,0xC0,0x00,0x00},/*"E",37*/
  50. {0x20,0x40,0x3F,0xC0,0x24,0x40,0x2E,0x00,0x30,0x00,0x00,0x00},/*"F",38*/
  51. {0x0F,0x00,0x10,0x80,0x20,0x40,0x22,0x40,0x33,0x80,0x02,0x00},/*"G",39*/
  52. {0x20,0x40,0x3F,0xC0,0x04,0x00,0x04,0x00,0x3F,0xC0,0x20,0x40},/*"H",40*/
  53. {0x20,0x40,0x20,0x40,0x3F,0xC0,0x20,0x40,0x20,0x40,0x00,0x00},/*"I",41*/
  54. {0x00,0x60,0x20,0x20,0x20,0x20,0x3F,0xC0,0x20,0x00,0x20,0x00},/*"J",42*/
  55. {0x20,0x40,0x3F,0xC0,0x24,0x40,0x0B,0x00,0x30,0xC0,0x20,0x40},/*"K",43*/
  56. {0x20,0x40,0x3F,0xC0,0x20,0x40,0x00,0x40,0x00,0x40,0x00,0xC0},/*"L",44*/
  57. {0x3F,0xC0,0x3C,0x00,0x03,0xC0,0x3C,0x00,0x3F,0xC0,0x00,0x00},/*"M",45*/
  58. {0x20,0x40,0x3F,0xC0,0x0C,0x40,0x23,0x00,0x3F,0xC0,0x20,0x00},/*"N",46*/
  59. {0x1F,0x80,0x20,0x40,0x20,0x40,0x20,0x40,0x1F,0x80,0x00,0x00},/*"O",47*/
  60. {0x20,0x40,0x3F,0xC0,0x24,0x40,0x24,0x00,0x18,0x00,0x00,0x00},/*"P",48*/
  61. {0x1F,0x80,0x21,0x40,0x21,0x40,0x20,0xE0,0x1F,0xA0,0x00,0x00},/*"Q",49*/
  62. {0x20,0x40,0x3F,0xC0,0x24,0x40,0x26,0x00,0x19,0xC0,0x00,0x40},/*"R",50*/
  63. {0x18,0xC0,0x24,0x40,0x24,0x40,0x22,0x40,0x31,0x80,0x00,0x00},/*"S",51*/
  64. {0x30,0x00,0x20,0x40,0x3F,0xC0,0x20,0x40,0x30,0x00,0x00,0x00},/*"T",52*/
  65. {0x20,0x00,0x3F,0x80,0x00,0x40,0x00,0x40,0x3F,0x80,0x20,0x00},/*"U",53*/
  66. {0x20,0x00,0x3E,0x00,0x01,0xC0,0x07,0x00,0x38,0x00,0x20,0x00},/*"V",54*/
  67. {0x38,0x00,0x07,0xC0,0x3C,0x00,0x07,0xC0,0x38,0x00,0x00,0x00},/*"W",55*/
  68. {0x20,0x40,0x39,0xC0,0x06,0x00,0x39,0xC0,0x20,0x40,0x00,0x00},/*"X",56*/
  69. {0x20,0x00,0x38,0x40,0x07,0xC0,0x38,0x40,0x20,0x00,0x00,0x00},/*"Y",57*/
  70. {0x30,0x40,0x21,0xC0,0x26,0x40,0x38,0x40,0x20,0xC0,0x00,0x00},/*"Z",58*/
  71. {0x00,0x00,0x00,0x00,0x7F,0xE0,0x40,0x20,0x40,0x20,0x00,0x00},/*"[",59*/
  72. {0x00,0x00,0x70,0x00,0x0C,0x00,0x03,0x80,0x00,0x40,0x00,0x00},/*"\",60*/
  73. {0x00,0x00,0x40,0x20,0x40,0x20,0x7F,0xE0,0x00,0x00,0x00,0x00},/*"]",61*/
  74. {0x00,0x00,0x20,0x00,0x40,0x00,0x20,0x00,0x00,0x00,0x00,0x00},/*"^",62*/
  75. {0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10,0x00,0x10},/*"_",63*/
  76. {0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/
  77. {0x00,0x00,0x02,0x80,0x05,0x40,0x05,0x40,0x03,0xC0,0x00,0x40},/*"a",65*/
  78. {0x20,0x00,0x3F,0xC0,0x04,0x40,0x04,0x40,0x03,0x80,0x00,0x00},/*"b",66*/
  79. {0x00,0x00,0x03,0x80,0x04,0x40,0x04,0x40,0x06,0x40,0x00,0x00},/*"c",67*/
  80. {0x00,0x00,0x03,0x80,0x04,0x40,0x24,0x40,0x3F,0xC0,0x00,0x40},/*"d",68*/
  81. {0x00,0x00,0x03,0x80,0x05,0x40,0x05,0x40,0x03,0x40,0x00,0x00},/*"e",69*/
  82. {0x00,0x00,0x04,0x40,0x1F,0xC0,0x24,0x40,0x24,0x40,0x20,0x00},/*"f",70*/
  83. {0x00,0x00,0x02,0xE0,0x05,0x50,0x05,0x50,0x06,0x50,0x04,0x20},/*"g",71*/
  84. {0x20,0x40,0x3F,0xC0,0x04,0x40,0x04,0x00,0x03,0xC0,0x00,0x40},/*"h",72*/
  85. {0x00,0x00,0x04,0x40,0x27,0xC0,0x00,0x40,0x00,0x00,0x00,0x00},/*"i",73*/
  86. {0x00,0x10,0x00,0x10,0x04,0x10,0x27,0xE0,0x00,0x00,0x00,0x00},/*"j",74*/
  87. {0x20,0x40,0x3F,0xC0,0x01,0x40,0x07,0x00,0x04,0xC0,0x04,0x40},/*"k",75*/
  88. {0x20,0x40,0x20,0x40,0x3F,0xC0,0x00,0x40,0x00,0x40,0x00,0x00},/*"l",76*/
  89. {0x07,0xC0,0x04,0x00,0x07,0xC0,0x04,0x00,0x03,0xC0,0x00,0x00},/*"m",77*/
  90. {0x04,0x40,0x07,0xC0,0x04,0x40,0x04,0x00,0x03,0xC0,0x00,0x40},/*"n",78*/
  91. {0x00,0x00,0x03,0x80,0x04,0x40,0x04,0x40,0x03,0x80,0x00,0x00},/*"o",79*/
  92. {0x04,0x10,0x07,0xF0,0x04,0x50,0x04,0x40,0x03,0x80,0x00,0x00},/*"p",80*/
  93. {0x00,0x00,0x03,0x80,0x04,0x40,0x04,0x50,0x07,0xF0,0x00,0x10},/*"q",81*/
  94. {0x04,0x40,0x07,0xC0,0x02,0x40,0x04,0x00,0x04,0x00,0x00,0x00},/*"r",82*/
  95. {0x00,0x00,0x06,0x40,0x05,0x40,0x05,0x40,0x04,0xC0,0x00,0x00},/*"s",83*/
  96. {0x00,0x00,0x04,0x00,0x1F,0x80,0x04,0x40,0x00,0x40,0x00,0x00},/*"t",84*/
  97. {0x04,0x00,0x07,0x80,0x00,0x40,0x04,0x40,0x07,0xC0,0x00,0x40},/*"u",85*/
  98. {0x04,0x00,0x07,0x00,0x04,0xC0,0x01,0x80,0x06,0x00,0x04,0x00},/*"v",86*/
  99. {0x06,0x00,0x01,0xC0,0x07,0x00,0x01,0xC0,0x06,0x00,0x00,0x00},/*"w",87*/
  100. {0x04,0x40,0x06,0xC0,0x01,0x00,0x06,0xC0,0x04,0x40,0x00,0x00},/*"x",88*/
  101. {0x04,0x10,0x07,0x10,0x04,0xE0,0x01,0x80,0x06,0x00,0x04,0x00},/*"y",89*/
  102. {0x00,0x00,0x04,0x40,0x05,0xC0,0x06,0x40,0x04,0x40,0x00,0x00},/*"z",90*/
  103. {0x00,0x00,0x00,0x00,0x04,0x00,0x7B,0xE0,0x40,0x20,0x00,0x00},/*"{",91*/
  104. {0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xF0,0x00,0x00,0x00,0x00},/*"|",92*/
  105. {0x00,0x00,0x40,0x20,0x7B,0xE0,0x04,0x00,0x00,0x00,0x00,0x00},/*"}",93*/
  106. {0x40,0x00,0x80,0x00,0x40,0x00,0x20,0x00,0x20,0x00,0x40,0x00},/*"~",94*/
  107. };
  108. const unsigned char asc2_1608[][]={
  109. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*" ",0*/
  110. {0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xCC,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00},/*"!",1*/
  111. {0x00,0x00,0x08,0x00,0x30,0x00,0x60,0x00,0x08,0x00,0x30,0x00,0x60,0x00,0x00,0x00},/*""",2*/
  112. {0x02,0x20,0x03,0xFC,0x1E,0x20,0x02,0x20,0x03,0xFC,0x1E,0x20,0x02,0x20,0x00,0x00},/*"#",3*/
  113. {0x00,0x00,0x0E,0x18,0x11,0x04,0x3F,0xFF,0x10,0x84,0x0C,0x78,0x00,0x00,0x00,0x00},/*"$",4*/
  114. {0x0F,0x00,0x10,0x84,0x0F,0x38,0x00,0xC0,0x07,0x78,0x18,0x84,0x00,0x78,0x00,0x00},/*"%",5*/
  115. {0x00,0x78,0x0F,0x84,0x10,0xC4,0x11,0x24,0x0E,0x98,0x00,0xE4,0x00,0x84,0x00,0x08},/*"&",6*/
  116. {0x08,0x00,0x68,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"'",7*/
  117. {0x00,0x00,0x00,0x00,0x00,0x00,0x07,0xE0,0x18,0x18,0x20,0x04,0x40,0x02,0x00,0x00},/*"(",8*/
  118. {0x00,0x00,0x40,0x02,0x20,0x04,0x18,0x18,0x07,0xE0,0x00,0x00,0x00,0x00,0x00,0x00},/*")",9*/
  119. {0x02,0x40,0x02,0x40,0x01,0x80,0x0F,0xF0,0x01,0x80,0x02,0x40,0x02,0x40,0x00,0x00},/*"*",10*/
  120. {0x00,0x80,0x00,0x80,0x00,0x80,0x0F,0xF8,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x00},/*"+",11*/
  121. {0x00,0x01,0x00,0x0D,0x00,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*",",12*/
  122. {0x00,0x00,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x00,0x80},/*"-",13*/
  123. {0x00,0x00,0x00,0x0C,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*".",14*/
  124. {0x00,0x00,0x00,0x06,0x00,0x18,0x00,0x60,0x01,0x80,0x06,0x00,0x18,0x00,0x20,0x00},/*"/",15*/
  125. {0x00,0x00,0x07,0xF0,0x08,0x08,0x10,0x04,0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00},/*"0",16*/
  126. {0x00,0x00,0x08,0x04,0x08,0x04,0x1F,0xFC,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00},/*"1",17*/
  127. {0x00,0x00,0x0E,0x0C,0x10,0x14,0x10,0x24,0x10,0x44,0x11,0x84,0x0E,0x0C,0x00,0x00},/*"2",18*/
  128. {0x00,0x00,0x0C,0x18,0x10,0x04,0x11,0x04,0x11,0x04,0x12,0x88,0x0C,0x70,0x00,0x00},/*"3",19*/
  129. {0x00,0x00,0x00,0xE0,0x03,0x20,0x04,0x24,0x08,0x24,0x1F,0xFC,0x00,0x24,0x00,0x00},/*"4",20*/
  130. {0x00,0x00,0x1F,0x98,0x10,0x84,0x11,0x04,0x11,0x04,0x10,0x88,0x10,0x70,0x00,0x00},/*"5",21*/
  131. {0x00,0x00,0x07,0xF0,0x08,0x88,0x11,0x04,0x11,0x04,0x18,0x88,0x00,0x70,0x00,0x00},/*"6",22*/
  132. {0x00,0x00,0x1C,0x00,0x10,0x00,0x10,0xFC,0x13,0x00,0x1C,0x00,0x10,0x00,0x00,0x00},/*"7",23*/
  133. {0x00,0x00,0x0E,0x38,0x11,0x44,0x10,0x84,0x10,0x84,0x11,0x44,0x0E,0x38,0x00,0x00},/*"8",24*/
  134. {0x00,0x00,0x07,0x00,0x08,0x8C,0x10,0x44,0x10,0x44,0x08,0x88,0x07,0xF0,0x00,0x00},/*"9",25*/
  135. {0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x0C,0x03,0x0C,0x00,0x00,0x00,0x00,0x00,0x00},/*":",26*/
  136. {0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*";",27*/
  137. {0x00,0x00,0x00,0x80,0x01,0x40,0x02,0x20,0x04,0x10,0x08,0x08,0x10,0x04,0x00,0x00},/*"<",28*/
  138. {0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x00,0x00},/*"=",29*/
  139. {0x00,0x00,0x10,0x04,0x08,0x08,0x04,0x10,0x02,0x20,0x01,0x40,0x00,0x80,0x00,0x00},/*">",30*/
  140. {0x00,0x00,0x0E,0x00,0x12,0x00,0x10,0x0C,0x10,0x6C,0x10,0x80,0x0F,0x00,0x00,0x00},/*"?",31*/
  141. {0x03,0xE0,0x0C,0x18,0x13,0xE4,0x14,0x24,0x17,0xC4,0x08,0x28,0x07,0xD0,0x00,0x00},/*"@",32*/
  142. {0x00,0x04,0x00,0x3C,0x03,0xC4,0x1C,0x40,0x07,0x40,0x00,0xE4,0x00,0x1C,0x00,0x04},/*"A",33*/
  143. {0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x04,0x11,0x04,0x0E,0x88,0x00,0x70,0x00,0x00},/*"B",34*/
  144. {0x03,0xE0,0x0C,0x18,0x10,0x04,0x10,0x04,0x10,0x04,0x10,0x08,0x1C,0x10,0x00,0x00},/*"C",35*/
  145. {0x10,0x04,0x1F,0xFC,0x10,0x04,0x10,0x04,0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00},/*"D",36*/
  146. {0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x04,0x17,0xC4,0x10,0x04,0x08,0x18,0x00,0x00},/*"E",37*/
  147. {0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x00,0x17,0xC0,0x10,0x00,0x08,0x00,0x00,0x00},/*"F",38*/
  148. {0x03,0xE0,0x0C,0x18,0x10,0x04,0x10,0x04,0x10,0x44,0x1C,0x78,0x00,0x40,0x00,0x00},/*"G",39*/
  149. {0x10,0x04,0x1F,0xFC,0x10,0x84,0x00,0x80,0x00,0x80,0x10,0x84,0x1F,0xFC,0x10,0x04},/*"H",40*/
  150. {0x00,0x00,0x10,0x04,0x10,0x04,0x1F,0xFC,0x10,0x04,0x10,0x04,0x00,0x00,0x00,0x00},/*"I",41*/
  151. {0x00,0x03,0x00,0x01,0x10,0x01,0x10,0x01,0x1F,0xFE,0x10,0x00,0x10,0x00,0x00,0x00},/*"J",42*/
  152. {0x10,0x04,0x1F,0xFC,0x11,0x04,0x03,0x80,0x14,0x64,0x18,0x1C,0x10,0x04,0x00,0x00},/*"K",43*/
  153. {0x10,0x04,0x1F,0xFC,0x10,0x04,0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x0C,0x00,0x00},/*"L",44*/
  154. {0x10,0x04,0x1F,0xFC,0x1F,0x00,0x00,0xFC,0x1F,0x00,0x1F,0xFC,0x10,0x04,0x00,0x00},/*"M",45*/
  155. {0x10,0x04,0x1F,0xFC,0x0C,0x04,0x03,0x00,0x00,0xE0,0x10,0x18,0x1F,0xFC,0x10,0x00},/*"N",46*/
  156. {0x07,0xF0,0x08,0x08,0x10,0x04,0x10,0x04,0x10,0x04,0x08,0x08,0x07,0xF0,0x00,0x00},/*"O",47*/
  157. {0x10,0x04,0x1F,0xFC,0x10,0x84,0x10,0x80,0x10,0x80,0x10,0x80,0x0F,0x00,0x00,0x00},/*"P",48*/
  158. {0x07,0xF0,0x08,0x18,0x10,0x24,0x10,0x24,0x10,0x1C,0x08,0x0A,0x07,0xF2,0x00,0x00},/*"Q",49*/
  159. {0x10,0x04,0x1F,0xFC,0x11,0x04,0x11,0x00,0x11,0xC0,0x11,0x30,0x0E,0x0C,0x00,0x04},/*"R",50*/
  160. {0x00,0x00,0x0E,0x1C,0x11,0x04,0x10,0x84,0x10,0x84,0x10,0x44,0x1C,0x38,0x00,0x00},/*"S",51*/
  161. {0x18,0x00,0x10,0x00,0x10,0x04,0x1F,0xFC,0x10,0x04,0x10,0x00,0x18,0x00,0x00,0x00},/*"T",52*/
  162. {0x10,0x00,0x1F,0xF8,0x10,0x04,0x00,0x04,0x00,0x04,0x10,0x04,0x1F,0xF8,0x10,0x00},/*"U",53*/
  163. {0x10,0x00,0x1E,0x00,0x11,0xE0,0x00,0x1C,0x00,0x70,0x13,0x80,0x1C,0x00,0x10,0x00},/*"V",54*/
  164. {0x1F,0xC0,0x10,0x3C,0x00,0xE0,0x1F,0x00,0x00,0xE0,0x10,0x3C,0x1F,0xC0,0x00,0x00},/*"W",55*/
  165. {0x10,0x04,0x18,0x0C,0x16,0x34,0x01,0xC0,0x01,0xC0,0x16,0x34,0x18,0x0C,0x10,0x04},/*"X",56*/
  166. {0x10,0x00,0x1C,0x00,0x13,0x04,0x00,0xFC,0x13,0x04,0x1C,0x00,0x10,0x00,0x00,0x00},/*"Y",57*/
  167. {0x08,0x04,0x10,0x1C,0x10,0x64,0x10,0x84,0x13,0x04,0x1C,0x04,0x10,0x18,0x00,0x00},/*"Z",58*/
  168. {0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0xFE,0x40,0x02,0x40,0x02,0x40,0x02,0x00,0x00},/*"[",59*/
  169. {0x00,0x00,0x30,0x00,0x0C,0x00,0x03,0x80,0x00,0x60,0x00,0x1C,0x00,0x03,0x00,0x00},/*"\",60*/
  170. {0x00,0x00,0x40,0x02,0x40,0x02,0x40,0x02,0x7F,0xFE,0x00,0x00,0x00,0x00,0x00,0x00},/*"]",61*/
  171. {0x00,0x00,0x00,0x00,0x20,0x00,0x40,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x00,0x00},/*"^",62*/
  172. {0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,0x01},/*"_",63*/
  173. {0x00,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"`",64*/
  174. {0x00,0x00,0x00,0x98,0x01,0x24,0x01,0x44,0x01,0x44,0x01,0x44,0x00,0xFC,0x00,0x04},/*"a",65*/
  175. {0x10,0x00,0x1F,0xFC,0x00,0x88,0x01,0x04,0x01,0x04,0x00,0x88,0x00,0x70,0x00,0x00},/*"b",66*/
  176. {0x00,0x00,0x00,0x70,0x00,0x88,0x01,0x04,0x01,0x04,0x01,0x04,0x00,0x88,0x00,0x00},/*"c",67*/
  177. {0x00,0x00,0x00,0x70,0x00,0x88,0x01,0x04,0x01,0x04,0x11,0x08,0x1F,0xFC,0x00,0x04},/*"d",68*/
  178. {0x00,0x00,0x00,0xF8,0x01,0x44,0x01,0x44,0x01,0x44,0x01,0x44,0x00,0xC8,0x00,0x00},/*"e",69*/
  179. {0x00,0x00,0x01,0x04,0x01,0x04,0x0F,0xFC,0x11,0x04,0x11,0x04,0x11,0x00,0x18,0x00},/*"f",70*/
  180. {0x00,0x00,0x00,0xD6,0x01,0x29,0x01,0x29,0x01,0x29,0x01,0xC9,0x01,0x06,0x00,0x00},/*"g",71*/
  181. {0x10,0x04,0x1F,0xFC,0x00,0x84,0x01,0x00,0x01,0x00,0x01,0x04,0x00,0xFC,0x00,0x04},/*"h",72*/
  182. {0x00,0x00,0x01,0x04,0x19,0x04,0x19,0xFC,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00},/*"i",73*/
  183. {0x00,0x00,0x00,0x03,0x00,0x01,0x01,0x01,0x19,0x01,0x19,0xFE,0x00,0x00,0x00,0x00},/*"j",74*/
  184. {0x10,0x04,0x1F,0xFC,0x00,0x24,0x00,0x40,0x01,0xB4,0x01,0x0C,0x01,0x04,0x00,0x00},/*"k",75*/
  185. {0x00,0x00,0x10,0x04,0x10,0x04,0x1F,0xFC,0x00,0x04,0x00,0x04,0x00,0x00,0x00,0x00},/*"l",76*/
  186. {0x01,0x04,0x01,0xFC,0x01,0x04,0x01,0x00,0x01,0xFC,0x01,0x04,0x01,0x00,0x00,0xFC},/*"m",77*/
  187. {0x01,0x04,0x01,0xFC,0x00,0x84,0x01,0x00,0x01,0x00,0x01,0x04,0x00,0xFC,0x00,0x04},/*"n",78*/
  188. {0x00,0x00,0x00,0xF8,0x01,0x04,0x01,0x04,0x01,0x04,0x01,0x04,0x00,0xF8,0x00,0x00},/*"o",79*/
  189. {0x01,0x01,0x01,0xFF,0x00,0x85,0x01,0x04,0x01,0x04,0x00,0x88,0x00,0x70,0x00,0x00},/*"p",80*/
  190. {0x00,0x00,0x00,0x70,0x00,0x88,0x01,0x04,0x01,0x04,0x01,0x05,0x01,0xFF,0x00,0x01},/*"q",81*/
  191. {0x01,0x04,0x01,0x04,0x01,0xFC,0x00,0x84,0x01,0x04,0x01,0x00,0x01,0x80,0x00,0x00},/*"r",82*/
  192. {0x00,0x00,0x00,0xCC,0x01,0x24,0x01,0x24,0x01,0x24,0x01,0x24,0x01,0x98,0x00,0x00},/*"s",83*/
  193. {0x00,0x00,0x01,0x00,0x01,0x00,0x07,0xF8,0x01,0x04,0x01,0x04,0x00,0x00,0x00,0x00},/*"t",84*/
  194. {0x01,0x00,0x01,0xF8,0x00,0x04,0x00,0x04,0x00,0x04,0x01,0x08,0x01,0xFC,0x00,0x04},/*"u",85*/
  195. {0x01,0x00,0x01,0x80,0x01,0x70,0x00,0x0C,0x00,0x10,0x01,0x60,0x01,0x80,0x01,0x00},/*"v",86*/
  196. {0x01,0xF0,0x01,0x0C,0x00,0x30,0x01,0xC0,0x00,0x30,0x01,0x0C,0x01,0xF0,0x01,0x00},/*"w",87*/
  197. {0x00,0x00,0x01,0x04,0x01,0x8C,0x00,0x74,0x01,0x70,0x01,0x8C,0x01,0x04,0x00,0x00},/*"x",88*/
  198. {0x01,0x01,0x01,0x81,0x01,0x71,0x00,0x0E,0x00,0x18,0x01,0x60,0x01,0x80,0x01,0x00},/*"y",89*/
  199. {0x00,0x00,0x01,0x84,0x01,0x0C,0x01,0x34,0x01,0x44,0x01,0x84,0x01,0x0C,0x00,0x00},/*"z",90*/
  200. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x3E,0xFC,0x40,0x02,0x40,0x02},/*"{",91*/
  201. {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00},/*"|",92*/
  202. {0x00,0x00,0x40,0x02,0x40,0x02,0x3E,0xFC,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"}",93*/
  203. {0x00,0x00,0x60,0x00,0x80,0x00,0x80,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x20,0x00},/*"~",94*/
  204. };
  205.  
  206. #endif /* FONT_H_ */

5.修改hello world主程序,代码如下:

  1. #include <stdio.h>
  2. //#include "platform.h"
  3. #include "xil_types.h"
  4. #include "xparameters.h"
  5. //#include "xgpiops.h"
  6. //#include "xil_io.h"
  7. #include "oled.h"
  8.  
  9. int main(void)
  10. {
  11.  
  12. print("##### Application Starts #####\n\r");
  13. OLED_Init();
  14. while(){
  15. OLED_ShowString(,, "Hello LengWaWa");
  16. OLED_Refresh_Gram();
  17. sleep();
  18. OLED_Clear();//清屏,否则如果后续显示的长度比较短的话,就不会完全更新为新的数据,有拖尾
  19. OLED_ShowNum(,,,,);
  20. OLED_Refresh_Gram();
  21. sleep();
  22.   }
  23.  
  24. return ;
  25. }

6.编译程序,没有错误的话会出现以下结果

7.使用两根usb线,一根用来下载程序,另一根线连接uart1,用来查看打印结果,方便调试。上电。

8.下载bit流到FPGA,xilinx tools >> Program FPGA

9.运行程序,即可在oled上看到 " Hello LengWaWa "和" 123456789 "交替显示。间隔为1s。

四、总结

最终实现的原理图如下:

1.在本设计中,实际上我们在PL中只是相当于用6根导线将OLED所需要信号从PS中传递出来,具体输入的数据OLED_SDIN和OLED_SCLK都是由PS端配置的,所以,最主要的设计难度还是在PS部分的软件设计;

2.zedboard的OLED是使用spi时序进行控制的,我们的方案中自建的ip使用了4个寄存器,实际上我们只使用了其中一个寄存器的其中6位,有点浪费资源;

3.因为选用了slv_reg0这个寄存器,所以在SDK中直接将该OLED外设的基地址设置为自动分配给我们的0x43c00000即可。那假如我们使用的是其他寄存器呢(你为什么要这么执拗,非要用其他寄存器),比如选用slv_reg2,那么在上面的oled.h程序中,如果只想改OLED_BASE_ADDR这个变量的值,应该怎么改?我猜想应该是0x43c00000 + (2 - 0)*(32 /8)=0x43c00008,经验证,准确无误。(大神请忽略这个步骤,可能过于幼稚)

使用Vivado初探ZedBoard的OLED驱动的更多相关文章

  1. zedboard学习(1)OLED驱动显示图像

    1. 干点啥?驱动一下上面的屏吧 2. 找个代码研究一下,cat命令用于读取文件(普通文件或设备文件)的内容并进行输出.据说板子已经做好OLED的驱动了,驱动映射为/dev/zed_oled,所以直接 ...

  2. zedboard之GPIO驱动(从FPGA一直到LINUX应用)

    1 EDK 大家知道我们在EDK中建立GPIO然后倒出到SDK中,在SDK中可以用C语言操作外设GPIO,但是这还是裸机程序,没有用到LINUX.本文将记录从FPGA  EDK生成GPIO一直到导入S ...

  3. SPI OLED 驱动

    根据之前说过的 SPI 驱动的框架,在我们添加 SPI 设备驱动的时候需要与 SPI Master 完成匹配,通过 spi_register_board_info 进行注册. 构造设备 static ...

  4. zedboard中OLED源码

    #include <stdio.h> #include "platform.h" #include "xil_types.h" #include & ...

  5. zedboard学习记录.3.oled,创建IP

    环境:win7 .vivado 2017.4 .zedboard rev.d 首先建立工程. 1.Tools -> Create and Package New IP 2.Create AXI4 ...

  6. Zedboard(二)使用Vivado+SDK开发嵌入式应用程序——实例一

    本次介绍用Vivado构建Zedboard开发板的硬件平台+SDK开发应用程序(Zedboard裸机开发) 过程如下: 一.运行Vivado,建立新工程 指定好工程路径,下一步,选择RTL Proje ...

  7. spi子系统之驱动SSD1306 OLED

    spi子系统之驱动SSD1306 OLED 接触Linux之前,曾以为读源码可以更快的学习软件,于是前几个博客都是一边读源码一边添加注释,甚至精读到每一行代码,实际上效果并不理想,看过之后就忘记了.主 ...

  8. 基于TQ2440的SPI驱动学习(OLED)

    平台简介 开发板:TQ2440 (NandFlash:256M  内存:64M) u-boot版本:u-boot-2015.04 内核版本:Linux-3.14 作者:彭东林 邮箱:pengdongl ...

  9. Linux内核调用SPI平台级驱动_实现OLED的显示功能

    Linux内核调用SPI驱动_实现OLED显示功能 0. 导语 进入Linux的世界,发现真的是无比的有趣,也发现搞Linux驱动从底层嵌入式搞起真的是很有益处.我们在单片机.DSP这些无操作系统的裸 ...

随机推荐

  1. Java并发编程:4种线程池和缓冲队列BlockingQueue

    一. 线程池简介 1. 线程池的概念: 线程池就是首先创建一些线程,它们的集合称为线程池.使用线程池可以很好地提高性能,线程池在系统启动时即创建大量空闲的线程,程序将一个任务传给线程池,线程池就会启动 ...

  2. https认证握手过程

  3. 【Git】git pull和git pull --rebase的使用

    git pull = git fetch + git mergegit pull --rebase = git fetch + git rebase 现在来看看git merge和git rebase ...

  4. 记录一下idea自动生成Entity

    最近在鼓捣spring -boot ,真好用,学习到jpa. 通过生成Entity 文件,能够快速的生成数据库,并且使用 JpaRepository 的基本增删查改 方法,好用的一批. 可是随之,问题 ...

  5. getCanonicalFile与getAbsoluteFile区别

    package test; import java.io.File; import java.io.IOException; public class TestFilePath { public st ...

  6. WOW.js和animate.css让页面滚动时显示动画

    官网:http://mynameismatthieu.com/WOW/ bootstrap CDN服务:http://www.bootcdn.cn/wow/ 1.wow.js 实现了在网页滚动时的动画 ...

  7. 关系数据库(RDBMS)小记

    关系数据库三个范式 三个范式: 第一范式(1NF):数据表中的每一列(每个字段)必须是不可拆分的最小单元,也就是确保每一列的原子性 这里说的不可拆分通常是放在业务背景下而言的,是否可拆分视业务需求而定 ...

  8. 解决java.lang.annotation.AnnotationFormatError: Invalid default: public abstract java.lang.Class org.robolectric.annotation.Config.application()

    Deleting the .gradle folder worked for me too. Odd. Guessing some high level caching going on somewh ...

  9. IT观察】网络通信、图片显示、数据库操作……Android程序员如何利用开源框架

    每个Android 程序员都不是Android应用开发之路上孤军奋战的一个人,GitHub上浩如烟海的开源框架或类库就是前人为我们发明的轮子,有的轮子能提高软件性能,而有的轮子似乎是以牺牲性能为代价换 ...

  10. MTK LCM的添加

    对于LCM驱动移植,一般分为三部曲: 1.硬件IO口配置: 2.确保LCM背光能够正常点亮: 3.LCM驱动移植: 硬件电路: 1.GPIO配置 打开 mediatek\dct\DrvGen.exe ...