找回密码
 立即注册
查看: 83|回复: 2

stc8h8k64u利用硬件SPI模式驱动ST7567液晶12864屏幕

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-07-30 21:40:09

1

主题

2

回帖

59

积分

注册会员

积分
59
发表于 6 天前 | 显示全部楼层 |阅读模式
2023年在数码之家论坛申请了 开天斧三的开发板,试了一次就吃灰了。前几天打算做个小东西,利用红包买了几个STC8H8K64U的单片机,之前大学就玩过STC89系列的,看了下stc8系列的使用前要初始化引脚,因为没系统学过,在这里载了大跟头。买了本丁向荣老师的“单片微机原理与接口技术-基于stc8h8k64u”,感觉比文档分了条理。拿出来在数码之家那里收集的屏幕,就是建设银行优盾拆的屏幕,128x64像素,带背光很适合再次利用。

IMG_20250725_231717.jpg 建行二代12864.png f7f1449329f6470f9f35004608753cee.png

cog是st7567已经明确了,驱动就好办了。但是之前一直是89系列模拟SPI时序驱动,这次想玩玩硬件驱动的,可惜《单片微机原理与接口技术-基于stc8h8k64u》里的范例给的是SPI管理25系列ROM,可以参考但有限,网上搜也没找到这个型号的,那就自己折腾。
  1. <font size="4">// 单片机和液晶引脚连接
  2. LCD_CS  = P2^0;   // 片选 (CS)
  3. LCD_RST = P2^1;   // 复位 (RST)
  4. LCD_DC  = P1^0;   // 数据/命令选择 (A0/DC) </font>
复制代码
st7567.c文件:
  1. <font size="4">#include "STC8H.H"
  2. #include "font16.h"
  3. // 引脚定义
  4. sbit LCD_CS  = P2^0;   // 片选 (CS)
  5. sbit LCD_RST = P2^1;   // 复位 (RST)
  6. sbit LCD_DC  = P1^0;   // 数据/命令选择 (DC)
  7. // LCD_SCL=P2^5  LCD_SDA=P2^3
  8. extern void delay_ms(unsigned int ms);
  9. extern void delay_us(unsigned int ms);
  10. //// 简单延时函数
  11. //void delay_ms(unsigned int ms) {
  12. //    unsigned int i, j;
  13. //    for(i = 0; i < ms; i++)
  14. //        for(j = 0; j < 1000; j++);
  15. //}
  16. /******************** SPI初始化函数(优化CS控制) ********************/
  17. void SPI_Init() {
  18.     // 1. 开启扩展寄存器访问
  19.     P_SW2 = 0x80;       // EAXFR=1
  20.    
  21.     // 2. 配置SPI引脚组选择
  22.     P_SW1 = 0x04;       // SPI_S[1:0]=01,选择第二组(P2.2/3/4/5)
  23.    
  24.     // 3. 配置SPI控制寄存器
  25.     SPCTL = 0xDC;       // 11011100:
  26.                         // SPEN=1, SSIG=1, CPHA=0, CPOL=1, MSTR=1
  27.                         // DORD=0, SPR1=1, SPR0=0 -> F_OSC/16 (24MHz/16=1.5MHz)
  28.    
  29.     // 4. 配置引脚模式
  30.     P2M0 = 0x2B;        // 00101011: P2.0(CS), P2.1(RST), P2.3(MOSI), P2.5(SCLK)推挽输出
  31.     P2M1 = 0x00;        // 所有P2引脚设置为模式0(推挽输出)
  32.    
  33.     P1M0 = 0x01;        // P1.0(DC)推挽输出
  34.     P1M1 = 0x00;        // 所有P1引脚设置为模式0(推挽输出)
  35.    
  36.     // 5. 初始状态设置
  37.     LCD_CS = 1;         // 初始片选无效
  38.     LCD_DC = 0;         // 命令模式
  39.     LCD_RST = 1;        // 不复位
  40.    
  41.     SPDAT = 0;          // 清空数据寄存器
  42.     SPSTAT = 0xC0;      // 清除状态标志
  43.    
  44.     // 6. 关闭扩展寄存器访问
  45.     P_SW2 = 0x00;       // EAXFR=0
  46. }
  47. /******************** SPI发送函数 ********************/
  48. void SPI_SendByte(unsigned char dat) {
  49.     SPDAT = dat;                // 写入数据
  50.     while (!(SPSTAT & 0x80));   // 等待传输完成
  51.     SPSTAT = 0xC0;              // 清除标志位
  52. }
  53. /******************** LCD写命令函数(简化CS) ********************/
  54. void LCD_Write_Command(unsigned char cmd) {
  55.     LCD_DC = 0;           // 命令模式
  56.     SPI_SendByte(cmd);    // 发送命令
  57.     delay_us(1);          // 短延时确保稳定
  58. }
  59. /******************** LCD写数据函数(简化CS) ********************/
  60. void LCD_Write_Data(unsigned char dat) {
  61.     LCD_DC = 1;           // 数据模式
  62.     SPI_SendByte(dat);    // 发送数据
  63.     delay_us(1);
  64. }
  65. /******************** lcd显示清屏 ********************/
  66. void LCD_Claer() {
  67.    unsigned char x,y;
  68.          for(y=0;y<8;y++)
  69.                         {
  70.                                  LCD_Write_Command(0xb0+y);//页地址
  71.                                  LCD_Write_Command(0x00);//低地址
  72.                                  LCD_Write_Command(0x10);//高地址
  73.                                 for(x=0;x<128;x++)
  74.                                         LCD_Write_Data(0x00);
  75.                         }
  76.         }
  77. /******************** LCD初始化函数(优化CS控制) ********************/
  78. void LCD_Init() {
  79.     // 硬件复位
  80.     LCD_RST = 0;
  81.     delay_us(15);
  82.     LCD_RST = 1;
  83.    delay_us(15);
  84.    
  85.     // 开始通信:永久拉低CS
  86.     LCD_CS = 0;
  87.    
  88.     // 初始化序列
  89.     LCD_Write_Command(0xE2);  // 软复位
  90.     delay_us(100);
  91.    
  92.     LCD_Write_Command(0xA2);  // 1/9 bias
  93.     LCD_Write_Command(0xA0);  // ADC正常方向
  94.     LCD_Write_Command(0xC8);  // COM输出反向
  95.    
  96.     LCD_Write_Command(0xA4);  // 正常显示(非全亮)
  97.     LCD_Write_Command(0xA6);  // 正常显示(非反白)
  98.     LCD_Write_Command(0x24);  // V0电阻设置
  99.    
  100.     // 对比度设置
  101.     LCD_Write_Command(0x81);
  102.     LCD_Write_Command(0x28);  // 对比度值
  103.    
  104.     // 升压电路设置
  105.     LCD_Write_Command(0xF8);
  106.     LCD_Write_Command(0x00);  // 升压比2x
  107.    
  108.     // 分步开启电源
  109.     LCD_Write_Command(0x2C);  // Booster on
  110.     delay_us(22);
  111.     LCD_Write_Command(0x2E);  // Regulator on
  112.     delay_us(22);
  113.     LCD_Write_Command(0x2F);  // Follower on
  114.    delay_us(8);
  115.      LCD_Claer() ;
  116.     LCD_Write_Command(0x40);  // 显示起始行0
  117.     LCD_Write_Command(0xAF);  // 开启显示
  118. }
  119. /******************** 设置显示位置 ********************/
  120. void LCD_SetPosition(unsigned char x, unsigned char y) {
  121.     LCD_Write_Command(0xB0 | y);      // 设置页地址
  122.     LCD_Write_Command(0x10 | (x >> 4)); // 设置列地址高4位
  123.     LCD_Write_Command(x & 0x0F);      // 设置列地址低4位
  124. }
  125. /******************** 显示字符调用font文件的函数 ********************/
  126. //x横坐标,y页地址=纵坐标除以8,注意每个字符高度占用16bit=2page,最多完整显示4page,y不是座标!
  127. //如果用font文件,那么只能完美显示4行y=0-1,2-3,4-5,6-7page,bit 这个参数是反显一个像素,没有用st7567的命令而是用像素取反运算
  128. void Display_Char(unsigned char x, unsigned char y, unsigned char ch_index,bit b) {
  129.     unsigned char i;
  130.     LCD_SetPosition(x, y);
  131.     ch_index= ch_index-32;
  132.          for(i=0;i<8;i++)
  133.                         {
  134.                                 if(b)
  135.                                         LCD_Write_Data(~F8X16[ch_index*16+i]);
  136.   else
  137.                                         LCD_Write_Data(F8X16[ch_index*16+i]);
  138.                         }//P8x16上半部分显示
  139.   LCD_SetPosition(x,y+1);
  140.         for(i=0;i<8;i++)
  141.                         {
  142.                                 if(b)
  143.                                         LCD_Write_Data(~F8X16[ch_index*16+i+8]);
  144.         else
  145.                                         LCD_Write_Data(F8X16[ch_index*16+i+8]);
  146. }//P8x16下半部分显示
  147. }
  148. /******************** 显示字符串调用font文件的函数 ********************/
  149. /*函数名称:Display_Chars
  150. 功能:Lcd显示字符串
  151. 输入:x坐标,y坐标其实是8y行,因为每Page占用8行,字符串,b反显
  152. 输出:无
  153. 备注:x<=128,y<=64
  154. *********************************/
  155. void Display_Chars(unsigned char x,y,unsigned char *ch,bit b)
  156. {
  157. while(*ch!='\0')
  158. {
  159.   if(x>120){x=0;y+=2;}//如果x在最右边,则回到左边且下移1页=8行
  160.         Display_Char(x,y,*ch++,b);
  161.   x+=8;
  162. }
  163. }
  164. /*********************************
  165. 函数名称:Display_pic
  166. 功能:Lcd显示图片
  167. 输入:x起始坐标,y起始坐标,x终止坐标,y终止坐标,图片数组
  168. 输出:无
  169. 备注:x<=128,y<=64,x1<x2,y1<y2
  170. *********************************/
  171. void Display_pic(unsigned char x0,y0,x1,y1,unsigned char *pic)
  172. {
  173.         unsigned char x,y;
  174.   if(y1%8==0) y=y1/8;      
  175.   else y=y1/8+1;
  176.         for(y=y0;y<y1;y++)
  177.         {
  178.                 LCD_SetPosition(x0,y);
  179.     for(x=x0;x<x1;x++)
  180.             {      
  181.                     LCD_Write_Data(*pic++);
  182.             }
  183.         }
  184. }
  185. </font>
复制代码
CPHA=0, CPOL=1, 我的理解是这样的:(为了简单测试成功。我采用单片机做主机,lcd从机,忽略ss引脚,cs一直拉低)

PixPin_2025-07-25_23-51-32.png



LCD_Init里初始化st7567的参数是来自数码之家 ID:lizi 的st7565源码,修改了对比度值为0x28,

Display_Char函数是为了显示font16.h文件内字符设计的。Display_Chars顾名思义显示字符串,

main文件:
  1. <font size="4">#include "STC8H.H"
  2. #include <intrins.h>
  3. #include "ST7567.H"
  4. unsigned char code  BMP0[1024] = { /* 单色bmp文件,不要文件头信息,此图片是stc炼丹炉 */
  5. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  6. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  7. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  8. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X08,0X10,0X20,0X20,0X60,
  9. 0XE0,0X10,0X08,0X18,0X1C,0X3E,0X1C,0X1C,0X0C,0X18,0X18,0X00,0X00,0X00,0X00,0X00,
  10. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  11. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  12. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  13. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  14. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  15. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  16. 0X00,0X00,0X00,0X00,0X00,0X00,0X40,0XC0,0X80,0XC0,0XF0,0XEC,0XFC,0XFC,0X7C,0X00,
  17. 0X00,0X00,0X00,0X00,0X08,0X00,0X00,0X04,0X06,0X0F,0X07,0X01,0X00,0X00,0X00,0X00,
  18. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  19. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  20. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  21. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  22. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  23. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  24. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0XC0,0X00,0XF7,0X0F,0X0F,0X0F,0X05,0X04,0X00,
  25. 0X00,0X00,0X00,0X00,0X04,0X00,0X00,0XC0,0X00,0X00,0X07,0X00,0X00,0XC0,0X00,0X00,
  26. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  27. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  28. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  29. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  30. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  31. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X04,0X1C,0XAC,
  32. 0XFC,0X8C,0X0C,0XEC,0XFC,0XFE,0XFE,0XFF,0XFE,0XFF,0XDF,0XFE,0XFE,0XFC,0XFE,0XDE,
  33. 0XDE,0X38,0XD8,0X90,0X98,0X14,0X05,0X05,0X14,0XB4,0XB4,0XB4,0X25,0X25,0X24,0X10,
  34. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  35. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  36. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  37. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  38. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  39. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0X00,0XC0,0X10,0X02,0X8B,
  40. 0X9B,0X96,0XDE,0X07,0X5F,0X1F,0XD7,0X9B,0X7F,0X9F,0X3E,0X5F,0XB6,0XB6,0XEF,0X86,
  41. 0X34,0XF2,0X12,0X22,0X02,0X02,0X41,0XE1,0X03,0X30,0X71,0X81,0X02,0X81,0X10,0X00,
  42. 0XC0,0XF0,0X80,0X00,0X80,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  43. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  44. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  45. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  46. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  47. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X08,0X1F,0X3E,0X1D,0X52,0X7E,0X7C,
  48. 0XFD,0XFF,0XFA,0XFC,0XFC,0XFA,0XFF,0XFC,0XF4,0XFC,0XFF,0XFC,0XFC,0XFF,0XFE,0XFA,
  49. 0X7C,0XFF,0XFC,0XFE,0XFE,0XFC,0XFC,0XF7,0XFC,0XF3,0XFC,0XE5,0XEC,0X6F,0XBE,0X1E,
  50. 0X23,0X00,0X02,0X02,0X07,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  51. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  52. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  53. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  54. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  55. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  56. 0X11,0X3F,0XFF,0XFF,0XFF,0XFF,0XFF,0X03,0X03,0X01,0X7F,0X80,0XEC,0XF8,0XFA,0XDA,
  57. 0XD8,0XF8,0XF8,0XC8,0X80,0X3F,0X01,0X7F,0XFF,0XFF,0XFF,0XFF,0XFA,0X28,0X00,0X00,
  58. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  59. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  60. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  61. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  62. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  63. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X01,
  64. 0X03,0X07,0X07,0X07,0X07,0X03,0X03,0X00,0X00,0X00,0X00,0X01,0XC3,0XE7,0XE7,0XE7,
  65. 0XE7,0XC5,0X05,0X00,0X00,0X00,0X00,0X00,0X01,0X03,0X03,0X07,0X07,0X07,0X02,0X02,
  66. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  67. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  68. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
  69. };
  70. //// 简单延时函数//@24.000MHz
  71. void delay_ms(unsigned int ms) {
  72.         unsigned char data i, j;
  73.         while(ms--){
  74.         i = 24;
  75.         j = 85;
  76.         do
  77.         {
  78.                 while (--j);
  79.         } while (--i);}
  80. }
  81. void delay_us(unsigned int us)        //@24.000MHz
  82. {
  83.         unsigned char data i;
  84.         while(us--){
  85.         _nop_();
  86.         _nop_();
  87.         i = 3;
  88.         while (--i);}
  89. }
  90. /******************** 主函数 ********************/
  91. void main() {
  92.     /* 时钟设置 */
  93. //    P_SW2 = 0x80;        // 开启扩展寄存器访问
  94. //   
  95. //    // 设置24MHz主时钟
  96. //    IRCBAND = 0x01;      // 内部24MHz时钟
  97. //   
  98. //    // 时钟分频器设置
  99. //    #if defined(CLKDIV)
  100. //        CLKDIV = 0x00;   // 不分频
  101. //    #elif defined(CKDIV)
  102. //        CKDIV = 0x00;    // 不分频
  103. //    #else
  104. //        // 直接地址访问作为备选
  105. //        unsigned char xdata *clkdiv = (unsigned char xdata *)0xFE00;
  106. //        *clkdiv = 0x00;
  107. //    #endif
  108.    
  109.     P_SW2 = 0x00;        // 关闭扩展寄存器访问
  110.    
  111.     SPI_Init();          // 初始化SPI
  112.     LCD_Init();          // 初始化LCD
  113.    
  114.     // 显示"HELLO"
  115. //     Display_Char(0,0,'H',1); Display_Char(0,2,'e',0);
  116. //                  Display_Char(0,4,'&',1); Display_Char(0,6,'@',0);
  117. //                        Display_Chars(8,3,"hello,STC8H",0);
  118.                 Display_pic(0,0,128,8,BMP0);
  119.                 delay_ms(1000);
  120.                 Display_Chars(0,0,"hello,STC8H8k",0);
  121.                 Display_Chars(0,2,"ST7567-SPI",1);
  122.     while(1) {
  123.         // 主循环
  124.                 Display_pic(0,0,128,8,BMP0);
  125.                 delay_ms(1000);LCD_Claer();
  126.                 Display_Chars(0,0,"hello,STC8H8K64U",0);
  127.                 Display_Chars(0,2,"   ST7567-SPI   ",1);
  128.                 delay_ms(1000);LCD_Claer();
  129.     }
  130. }</font>
复制代码
字模头文件:
  1. <font size="4">/*
  2. 常用字母及其符号字模,8*16像素大小。使用时每个显示的字符占用16Byte,分为上下半部分显示,
  3. 前8Byte是字符上半部分,后8Byte是下班部分。和ascii的顺序相差32,所以要显示的ascii
  4. ascii[n]= F8X16[n-32]
  5. */
  6. code unsigned char F8X16[]=
  7. {
  8. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 0
  9. 0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,//! 1
  10. 0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" 2
  11. 0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,//# 3
  12. 0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,//$ 4
  13. 0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,//% 5
  14. 0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,//& 6
  15. 0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//' 7
  16. 0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,//( 8
  17. 0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,//) 9
  18. 0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,//* 10
  19. 0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,//+ 11
  20. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,//, 12
  21. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//- 13
  22. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,//. 14
  23. 0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,/// 15
  24. 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//0 16
  25. 0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//1 17
  26. 0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//2 18
  27. 0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//3 19
  28. 0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//4 20
  29. 0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//5 21
  30. 0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//6 22
  31. 0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//7 23
  32. 0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//8 24
  33. 0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,//9 25
  34. 0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,//: 26
  35. 0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,//; 27
  36. 0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,//< 28
  37. 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//= 29
  38. 0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,//> 30
  39. 0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,//? 31
  40. 0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,//@ 32
  41. 0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,//A 33
  42. 0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B 34
  43. 0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C 35
  44. 0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D 36
  45. 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E 37
  46. 0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F 38
  47. 0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G 39
  48. 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H 40
  49. 0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I 41
  50. 0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J 42
  51. 0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K 43
  52. 0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L 44
  53. 0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M 45
  54. 0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N 46
  55. 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O 47
  56. 0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P 48
  57. 0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q 49
  58. 0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R 50
  59. 0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S 51
  60. 0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T 52
  61. 0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U 53
  62. 0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V 54
  63. 0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W 55
  64. 0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X 56
  65. 0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y 57
  66. 0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z 58
  67. 0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,//[ 59
  68. 0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,//\ 60
  69. 0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,//] 61
  70. 0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//^ 62
  71. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,//_ 63
  72. 0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//` 64
  73. 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,//a 65
  74. 0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,//b 66
  75. 0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,//c 67
  76. 0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,//d 68
  77. 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,//e 69
  78. 0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//f 70
  79. 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,//g 71
  80. 0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//h 72
  81. 0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//i 73
  82. 0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,//j 74
  83. 0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,//k 75
  84. 0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//l 76
  85. 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,//m 77
  86. 0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//n 78
  87. 0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//o 79
  88. 0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,//p 80
  89. 0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,//q 81
  90. 0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,//r 82
  91. 0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,//s 83
  92. 0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,//t 84
  93. 0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,//u 85
  94. 0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,//v 86
  95. 0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,//w 87
  96. 0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,//x 88
  97. 0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,//y 89
  98. 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,//z 90
  99. 0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,//{ 91
  100. 0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,//| 92
  101. 0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,//} 93
  102. 0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~ 94
  103. };
  104. //unsigned char code F16x16[]={
  105. //};</font>
复制代码



最终显示效果:显示stc炼丹炉[取模方式在图片上]和字符串循环显示。
IMG_20250725_231633.jpg IMG_20250725_231632.jpg

源码,取模软件,st7567.pdf 已打包,keil5测试没问题。
st7567-spi测试.zip (1.19 MB, 下载次数: 3)

有一个问题,我怎么感觉硬件spi和软件spi没啥区别啊,能节省多少资源呢?因为我是爱好者不知道实际开发中存在的问题,我想做的是STC8H8K64 + HWL8110(uart通信,电量统计的芯片)+st7567+UART蓝牙无线发送一点数据。这个工程我需要注意什么?欢迎赐教。
最终感谢stc公司送我的开天斧三开发板,
IMG_20250725_225414.jpg
IMG_20250725_225420.jpg
PixPin_2025-07-25_22-41-09.png
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-07-30 21:40:09

1

主题

2

回帖

59

积分

注册会员

积分
59
发表于 6 天前 | 显示全部楼层
下载时6-24Mhz都可以,应该是我对st7567没看完,也不知道F_OSC/16 (24MHz/16=1.5MHz)怎么取值,就按照模拟spi随意取大的,估计浪费了单片机时间。页请交大佬,这个屏幕的SPI时钟到底怎么看,我脑子晕晕的。

点评

一般手册里有这种时序图,只要时序在规定范围内都可以。 另外硬件spi当然模拟spi优先使用,无论是节省mcu时间还是配合dma\p2p(Ai8051U系列)等功能使用。 延时阅读: AiCube图形化程序自动生成【SPI,SPI-DMA,I2C,  详情 回复 发表于 4 天前
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:254
  • 最近打卡:2025-08-01 08:52:46
已绑定手机

78

主题

2779

回帖

5722

积分

荣誉版主

无情的代码机器

积分
5722
发表于 4 天前 | 显示全部楼层
nok*** 发表于 2025-7-26 00:21
下载时6-24Mhz都可以,应该是我对st7567没看完,也不知道F_OSC/16 (24MHz/16=1.5MHz)怎么取值,就按照模拟s ...


一般手册里有这种时序图,只要时序在规定范围内都可以。
另外硬件spi当然模拟spi优先使用,无论是节省mcu时间还是配合dma\p2p(Ai8051U系列)等功能使用。
延时阅读:
AiCube图形化程序自动生成【SPI,SPI-DMA,I2C,I2C-DMA】代码,驱动OLED-12864 - AiCube-ISP , 程序自动生成工具, 支持STC89/15/8H/32/AI8051U 国芯人工智能技术交流网站 - AI32位8051交流社区
用AiCube配置硬件SPI和DMA点亮OLED12864 | 跟帖问OLED12864程序给您全搞定 - AiCube-ISP , 程序自动生成工具, 支持STC89/15/8H/32/AI8051U 国芯人工智能技术交流网站 - AI32位8051交流社区
截图202507281721291673.jpg
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-8-1 18:36 , Processed in 0.119786 second(s), 65 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表