找回密码
 立即注册
查看: 3673|回复: 11

新手求助 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, 下载次数: 107

keil

回复 送花

使用道具 举报

  • TA的每日心情
    开心
    2024-1-24 13:08
  • 签到天数: 1 天

    [LV.1]初来乍到

    8

    主题

    625

    回帖

    1040

    积分

    超级版主

    积分
    1040
    发表于 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 送花

    使用道具 举报

  • TA的每日心情
    无聊
    3 小时前
  • 签到天数: 140 天

    [LV.7]常住居民III

    17

    主题

    530

    回帖

    1241

    积分

    金牌会员

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

    使用道具 举报

    该用户从未签到

    550

    主题

    9339

    回帖

    1万

    积分

    管理员

    积分
    13932
    发表于 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相关的问题
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    3 小时前
  • 签到天数: 154 天

    [LV.7]常住居民III

    9

    主题

    305

    回帖

    3737

    积分

    荣誉版主

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


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

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

    使用道具 举报

  • TA的每日心情
    开心
    3 小时前
  • 签到天数: 154 天

    [LV.7]常住居民III

    9

    主题

    305

    回帖

    3737

    积分

    荣誉版主

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

    使用道具 举报

    该用户从未签到

    550

    主题

    9339

    回帖

    1万

    积分

    管理员

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

    使用道具 举报

  • TA的每日心情
    无聊
    3 小时前
  • 签到天数: 140 天

    [LV.7]常住居民III

    17

    主题

    530

    回帖

    1241

    积分

    金牌会员

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

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

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-6 14:20 , Processed in 0.088804 second(s), 67 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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