找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1791|回复: 1
打印 上一主题 下一主题
收起左侧

stm32用spi方式控制oled

[复制链接]
跳转到指定楼层
楼主
  1. SPI.h
复制代码
  1. SPI.c
  2. /*函数功能: GPIO模拟SPI端口初始化                                         */
  3. /*************************************************************************/
  4. void OLED_SPI_Init(void)
  5. {
  6.         GPIO_InitTypeDef GPIO_InitStructure;
  7.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA ,ENABLE);//使能PA端口时钟
  8.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4; //端口配置
  9.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出
  10.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//IO口速度为50MHz
  11.         GPIO_Init(GPIOA,&GPIO_InitStructure);//根据设定参数初始化GPIOA
  12. }

  13. /*************************************************************************/
  14. /*函数功能: 通过SPIO软件模拟SPI通信协议,向模块(SSD1306)写入一个字节                                  */
  15. /*入口参数:                                                                                                                                                                                                                                                         */       
  16. /*                                                data:要写入的数据/命令                                                                                                                                                 */                               
  17. /*                                                cmd :数据/命令标志 0,表示命令;1,表示数据;                   */
  18. /*************************************************************************/
  19. void SPI_WriteByte(unsigned char data,unsigned char cmd)
  20. {
  21.         unsigned char i=0;
  22.         OLED_DC =cmd;
  23.         OLED_CLK=0;
  24.         for(i=0;i<8;i++)
  25.         {
  26.                 OLED_CLK=0;
  27.                 if(data&0x80)OLED_MOSI=1; //从高位到低位
  28.                 else OLED_MOSI=0;
  29.                 OLED_CLK=1;
  30.                 data<<=1;
  31.         }
  32.         OLED_CLK=1;
  33.         OLED_DC=1;
  34. }
  35. /*************************************************************************/
  36. /*函数功能: 写命令                                                        */
  37. /*************************************************************************/
  38. void WriteCmd(unsigned char cmd)
  39. {
  40.         SPI_WriteByte(cmd,OLED_CMD);
  41. }
  42. /*************************************************************************/
  43. /*函数功能: 写数据                                                        */
  44. /*************************************************************************/
  45. void WriteData(unsigned char data)
  46. {
  47.         SPI_WriteByte(data,OLED_DATA);
  48. }
复制代码



20170607180030742.jpg (42.1 KB, 下载次数: 93)

20170607180030742.jpg

OLED.rar

9.34 KB, 下载次数: 14, 下载积分: 黑币 -5

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:573864 发表于 2019-7-24 10:41 | 只看该作者
Spi.h
#define OLED_CMD 0   //命令声明
#define OLED_DATA 1 //数据声明

#define OLED_CLK         PAout(4)        // CLK时钟         d0
#define OLED_MOSI         PAout(3)        // MOSI                d1
#define OLED_RST         PAout(2)        // RET复位        ret
#define OLED_DC          PAout(1)        // 命令|数据        dc        (0表传输命令1表传输数据)

void OLED_SPI_Init(void); //配置MCU的SPI
void SPI_WriteByte(uint8_t addr,uint8_t data); //向寄存器地址写一个byte的数据
void WriteCmd(unsigned char cmd); //写命令
void WriteDat(unsigned char data); //写数据

回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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