找回密码
 立即注册

QQ登录

只需一步,快速开始

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

STC8H8K64U硬件SPI如何驱动ST7789液晶屏

[复制链接]
跳转到指定楼层
楼主
ID:190152 发表于 2024-11-14 16:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面代码是中景园给的程序,正常通过软件模拟spi正常显示。现在改了很多代码屏幕无法点亮求指教




硬件spi驱动st7789.zip

189 KB, 下载次数: 0

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

使用道具 举报

沙发
ID:468878 发表于 2024-11-15 00:02 | 只看该作者
中景园的代码直接用一般没问题。我猜测,你是忘记把STC的IO口初始化了。STC的IO不初始化都是高阻状态,不能直接使用。
回复

使用道具 举报

板凳
ID:774370 发表于 2024-11-15 07:41 | 只看该作者
我下载看了一下,认为因该是没有STC8HXXX.H文件造成的。楼主把头文件加里就行了。
回复

使用道具 举报

地板
ID:190152 发表于 2024-11-15 09:14 | 只看该作者
rsx9583 发表于 2024-11-15 00:02
中景园的代码直接用一般没问题。我猜测,你是忘记把STC的IO口初始化了。STC的IO不初始化都是高阻状态,不能 ...

中景园用的是软件spi驱动,我已经正常点亮。想改为硬件spi驱动
回复

使用道具 举报

5#
ID:190152 发表于 2024-11-15 09:15 | 只看该作者
jintaiyang 发表于 2024-11-15 07:41
我下载看了一下,认为因该是没有STC8HXXX.H文件造成的。楼主把头文件加里就行了。

头文件在我c盘
回复

使用道具 举报

6#
ID:161164 发表于 2024-11-15 10:03 | 只看该作者
30块包邮的逻辑分析仪,你值得拥有
回复

使用道具 举报

7#
ID:92781 发表于 2024-11-15 10:56 | 只看该作者
先检查一下miso和mosi是否正确,如果都正确,试试spi初始化为 SPCTL = 0x50;
回复

使用道具 举报

8#
ID:292903 发表于 2025-4-1 23:12 | 只看该作者
楼主我最近也在研究硬件SPI驱动,这样刷新比较快 哦,大概快个20-30倍左右。。。但还是没有点亮,硬件准备画个板重新测试一下,软件如下希望给你有帮助,,,
// 宏定义
#define SPI_MODE_2 (0x08 | 0x04) // CPOL=1, CPHA=0
#define SPI_SPEED_DIV16 (0x02)   // SPR=10, 时钟分频为16
#define SPI_ENABLE (0x40)        // SPEN=1
#define SPI_MASTER_MODE (0x10)   // MSRT=1

void init_SPI() // 初始化硬SPI
{
    CS = 0; // 打开片选信号,使能OLED屏
    P_SW1 |= 0x04; // P2.2-P2.5

    SPSTAT = 0xC0; // 清空标志位
    SPCTL = (SPCTL & ~0x80) | SPI_ENABLE; // 使能SPI
    SPCTL = (SPCTL & ~0x10) | SPI_MASTER_MODE; // 设置为主机模式
    SPCTL = (SPCTL & ~0x18) | SPI_MODE_2; // 设置时钟极性和相位
    SPCTL = (SPCTL & ~0x03) | SPI_SPEED_DIV16; // 设置时钟分频
}

void OLED_WriteByte(unsigned char dat, unsigned char cmd)
{
    if (cmd != 0 && cmd != 1)
    {
        // 参数错误处理
        return;
    }
    DC = cmd; // 写命令或写数据
    SPI_WriteByte(dat); // 硬SPI写数据
}

void SPI_WriteByte(unsigned char dat)
{
    SPSTAT = 0xC0; // 清空标志位
    SPDAT = dat; // 写入数据
    unsigned int timeout = 1000; // 设置超时计数
    while (!(SPSTAT & 0x80) && timeout--) // 等待传输完成,同时检查超时
    {
        // 空循环
    }
    if (timeout == 0)
    {
        // 处理超时情况,例如设置错误标志或重启SPI模块
    }
}
回复

使用道具 举报

9#
ID:1110477 发表于 2025-4-4 04:48 | 只看该作者
lkc8210 发表于 2024-11-15 10:03
30块包邮的逻辑分析仪,你值得拥有

肯定有优惠
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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