找回密码
 立即注册
查看: 5026|回复: 13

新手求助 SPI OLED最简单的点亮全屏,验证通讯

[复制链接]

1

主题

3

回帖

21

积分

新手上路

积分
21
发表于 2023-3-30 15:33:57 | 显示全部楼层 |阅读模式

#include<STC15F2K60S2.H>
typedef unsigned char u8;

// 下面的应该不需要定义
// sbit OLED_MISO = P1^4;        //单主机模式下,没有数据交互用不到
// sbit OLED_SCLK=P1^5;        //时钟
// sbit OLED_MOSI = P1^3;        //主机模式下,数据发送

sbit OLED_RES=P1^0;                //复位
sbit OLED_SS = P1^2;        //片选
sbit OLED_DC=P1^1;                //数据|命令选择


void spi_init()
{
        SPDAT = 0;
        SPSTAT |= 0XC0;                        //清SPI中断标志位和写保护 写1清除
        SPCTL |= 0XDC;                         //SPEN=1 SPI使能打开 SSIG=1 忽略SPI_SS引脚P1^2         MSTR=1 固定的单主机模式
        P_SW1 |= 0X0C;                        //SPI选择第一组
}

void spi_write_byte(u8 byte, bit flag)         // D/C = 0 写命令         = 1 写数据
{
        if(flag == 0)
        {
                OLED_DC = 0;       
        }
        else
        {
                OLED_DC = 1;
        }
        OLED_SS = 0;
        SPDAT = byte;
        OLED_SS = 1;
        OLED_DC = 1;

}

void Delay100ms()                //@11.0592MHz
{
        unsigned char i, j, k;

        i = 5;
        j = 52;
        k = 195;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}

void ssd1306init()
{
        OLED_RES = 1;
        Delay100ms();
        Delay100ms();
        OLED_RES = 0;
        Delay100ms();
        Delay100ms();
        OLED_RES = 1;

        spi_write_byte(0xAE,0);
        spi_write_byte(0x00,0);
        spi_write_byte(0x10,0);
        spi_write_byte(0x40,0);
        spi_write_byte(0x81,0);
        spi_write_byte(0xCF,0);
        spi_write_byte(0xA1,0);
        spi_write_byte(0xC8,0);
        spi_write_byte(0xA6,0);
        spi_write_byte(0xA8,0);
        spi_write_byte(0x3F,0);
        spi_write_byte(0xD3,0);
        spi_write_byte(0x00,0);
        spi_write_byte(0xD5,0);
        spi_write_byte(0x80,0);
        spi_write_byte(0xD9,0);
        spi_write_byte(0xF1,0);
        spi_write_byte(0xDA,0);
        spi_write_byte(0x12,0);
        spi_write_byte(0xDB,0);
        spi_write_byte(0x40,0);
        spi_write_byte(0x20,0);
        spi_write_byte(0x02,0);
        spi_write_byte(0x8D,0);
        spi_write_byte(0x14,0);
        spi_write_byte(0xA4,0);
        spi_write_byte(0xA6,0);
        spi_write_byte(0xAF,0);
}

void oled_display_on()
{
         spi_write_byte(0X8D,0);
         spi_write_byte(0X14,0);
         spi_write_byte(0XAf,0);
}

void OLED_Clear(void)  
{  
        u8 i,n;                    
        for(i=0;i<8;i++)  
        {  
                spi_write_byte(0xb0+i,0);    //设置页地址(0~7)
                spi_write_byte(0x00,0);      //设置显示位置—列低地址
                spi_write_byte(0x10,0);      //设置显示位置—列高地址   
                for(n=0;n<128;n++)
                {
                        spi_write_byte(0XFF,1);
                }
                 
        }
}

void main()
{
        spi_init();
        IE2 |= 0X02;
        EA = 1;
       
        ssd1306init();
        while(1)
        {       
                Delay100ms();

                OLED_Clear();
                Delay100ms();
                oled_display_on();
                Delay100ms();               
        }
}


void spi() interrupt 9
{
        SPSTAT = 0XC0;        //清除标志位
}


////////////////////////////////////////////
屏幕就是没反应,示波器测时钟和MOSI有输出,请教一下问题出在哪里?

TE.rar

23.15 KB, 下载次数: 228

keil

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:32
  • 最近打卡:2025-04-30 10:59:33

25

主题

1154

回帖

2391

积分

超级版主

积分
2391
发表于 2023-3-30 16:41:37 | 显示全部楼层
屠龙刀-STC32G12K128 核心功能实验板,
开天斧-STC8H8K64U 核心功能实验板,
一箭双雕之USB转双串口-STC8H8K64U 核心功能实验板中:
都有科学计算器强大的开源程序,强大的OLED128*64显示
都有老刘爱捣鼓开源示波器强大的开源程序,强大的OLED128*64显示
   具体可参考本坛以下帖子链接:https://www.stcaimcu.com/forum.p ... &extra=page%3D1


屠龙刀-STC32G12K128核心功能实验板演示程序
第33个演示程序,就是科学计算器,OLED128*64显示
第29个演示程序,是老刘爱捣鼓开源示波器,也是OLED128*64显示

第30个演示程序,是 GUI/U8g2-OLED12864  for STC32G12K128,完全免费开源的 GUI-OLED12864




STC官网:https://www.stcai.com/
QQ:2593903262
微信号:18106296598
回复 支持 0 反对 1

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:485
  • 最近打卡:2025-05-03 08:49:35
已绑定手机

23

主题

589

回帖

2817

积分

金牌会员

积分
2817
发表于 2023-3-30 17:04:55 | 显示全部楼层
源码备份202204042005.rar (14.35 KB, 下载次数: 240) 这里有一份示例程序,是OLED显示程序,在STC8H1K28上面测试通过的,已经于2022-04-03上午在STC8H1K28上面测试通过。
不停地学习
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:56
  • 最近打卡:2025-05-03 10:05:34

718

主题

1万

回帖

1万

积分

管理员

积分
15648
发表于 2023-3-30 20:55:47 | 显示全部楼层
从学习来说,还是跟着 STC32G12K128/STC8H8K64U的实验箱和核心板学习比较好
STC15系列很畅销N年了,但是现在 STC的生态建设是围绕着 STC32G12K128/STC8H8K64U展开的

另外 SPI/I2C的外设,控制信号线,全部加 10K上拉电阻

另外STC15F2K60S2 有 STC8G2K64S4的特殊版本 STC15H2K64S4-36I-LQFP44/32 现货来代替,这样程序和 STC8H兼容
1.png
资料在STC8G系列的资料中
1.png
2.png
3.png

回复 支持 反对

使用道具 举报 送花

1

主题

3

回帖

21

积分

新手上路

积分
21
发表于 2023-3-31 13:41:34 | 显示全部楼层
神*** 发表于 2023-3-30 20:55
从学习来说,还是跟着 STC32G12K128/STC8H8K64U的实验箱和核心板学习比较好
STC15系列很畅销N年了,但是现 ...

谢谢您提供建议,但这并不适用我解决此问题,SPI硬件IO是不需要加上拉电阻的
回复 支持 反对

使用道具 举报 送花

1

主题

3

回帖

21

积分

新手上路

积分
21
发表于 2023-3-31 13:42:48 | 显示全部楼层
wenhuixuan 发表于 2023-3-30 17:04
这里有一份示例程序,是OLED显示程序,在STC8H1K28上面测试通过的,已经于2022-04-03上午在STC8H1K28上面测 ...

非常感谢您,不过我看代码是io模拟的,我是想看看硬件SPI相关的问题
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:328
  • 最近打卡:2025-03-09 19:40:01

9

主题

328

回帖

4501

积分

荣誉版主

积分
4501
发表于 2023-3-31 14:35:08 | 显示全部楼层


SPI少了等待发送完毕的代码
你的代码可能填入SPDAT寄存器后立即就把SS引脚拉高了,因此发送数据时从机并不认为被选中了,可以用双通道的示波器看看波形

Screenshot 2023-03-31 143111.png
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:328
  • 最近打卡:2025-03-09 19:40:01

9

主题

328

回帖

4501

积分

荣誉版主

积分
4501
发表于 2023-3-31 14:36:49 | 显示全部楼层
另外如果SPI只连接这一个设备的话,SS可以考虑直接接地
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:56
  • 最近打卡:2025-05-03 10:05:34

718

主题

1万

回帖

1万

积分

管理员

积分
15648
发表于 2023-3-31 15:08:20 | 显示全部楼层
我是建议 SS也用 MCU 来控制,防止外设 SPI-外设异常,可以通过控制SS让外围的SPI外设的状态机复位等
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:485
  • 最近打卡:2025-05-03 08:49:35
已绑定手机

23

主题

589

回帖

2817

积分

金牌会员

积分
2817
发表于 2023-3-31 17:48:19 | 显示全部楼层
qiuli*** 发表于 2023-3-31 13:42
非常感谢您,不过我看代码是io模拟的,我是想看看硬件SPI相关的问题 ...

我的代码也是在STC官方示例的基础上修改而成的,且我已经通过了测试验证!好像官方也有一个SPI的示例,你找找看!
不停地学习
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-4 07:35 , Processed in 0.201311 second(s), 117 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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