矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: 分立元件

求一个51单片机驱动SPI液晶的测试程序!

[复制链接]
     
发表于 2020-1-8 09:59:55 | 显示全部楼层
分立元件 发表于 2020-1-7 21:31
的确SPI比IIC简单,可是现在看还是有点头疼

SPI 在数据端口按顺序输出 1byte 中的 8bit(IIC 其实也是),所以对于要发送到端口的 1byte 数据,只需要

0、数据和时钟端口空闲(比如低空闲)
1、检查最高位或最低位(看你喜欢)是 1 还是 0,然后把它丢到数据端口
2、时钟端口抖一抖
3、将 byte 左移或右移一 bit(看你喜欢哪个方向),然后重复步骤 1,一直到 8bit 移完
4、数据和时钟端口空闲(比如低空闲)

步骤 2 抖时钟端口的时机在于有的芯片是上升沿存入数据,有的是高电平存入数据,有的是下降沿存入数据,总之,我们务必使得不管它在何时存入数据,都要正确把数据给它存入即可。


  1. void StrobeSSD1309(void)
  2. {
  3.         //_delay_us(1);
  4.         OLED_CLK_STATE_HIGH();
  5.         _delay_us(1);
  6.         OLED_CLK_STATE_LOW();
  7.         //_delay_us(1);
  8. }

  9. void WriteInstruction(unsigned char bDat)
  10. {
  11.         OLED_DoI_STATE_Instruction();
  12.         OLED_StB_STATE_LOW();
  13.         _delay_us(1);
  14.         for (unsigned char i = 0; i < 8; i = i + 1)
  15.         {
  16.                 if (bDat & 0b10000000)
  17.                 {
  18.                         OLED_DAT_STATE_HIGH();
  19.                 }
  20.                 else
  21.                 {
  22.                         OLED_DAT_STATE_LOW();
  23.                 }
  24.                 StrobeSSD1309();
  25.                 bDat = bDat << 1;
  26.         }
  27.         _delay_us(1);
  28.         OLED_DAT_STATE_LOW();
  29.         OLED_StB_STATE_HIGH();       
  30. }

  31. void WriteDatums(unsigned char bDat)
  32. {
  33.         OLED_DoI_STATE_Datums();
  34.         OLED_StB_STATE_LOW();
  35.         _delay_us(1);
  36.         for (unsigned char i = 0; i < 8; i = i + 1)
  37.         {
  38.                 if (bDat & 0b10000000)
  39.                 {
  40.                         OLED_DAT_STATE_HIGH();
  41.                 }
  42.                 else
  43.                 {
  44.                         OLED_DAT_STATE_LOW();
  45.                 }
  46.                 StrobeSSD1309();
  47.                 bDat = bDat << 1;
  48.         }
  49.         _delay_us(1);
  50.         OLED_DAT_STATE_LOW();
  51.         OLED_StB_STATE_HIGH();               
  52.         OLED_DoI_STATE_Instruction();
  53. }

复制代码

评分

1

查看全部评分

回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2020-1-8 11:36:32 | 显示全部楼层
iffi123 发表于 2020-1-8 00:08
I2C不难啊, 老早以前玩pic单片机时就编过, 这次stm32,我自己写了一遍就成功了(不参考别人的), 用示波器 ...

最近也在研究这几个协议,IIC,SPI,UART,CAN,485,232,USB
回复 支持 反对

使用道具 举报

     
发表于 2020-2-8 00:06:21 来自手机 | 显示全部楼层
我也买了这屏,玩不了,12864显示任意点都卡在那了,慢慢来吧
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-29 15:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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