数码之家

 找回密码
 立即注册
搜索
查看: 2013|回复: 12

初次使用STC8H4KTL单片机驱动SPI接口TFT屏

[复制链接]
发表于 2022-8-12 13:31:54 | 显示全部楼层 |阅读模式
最近发现STC新出来的STC8H系有内部RTC实时时钟,在买STC32G的时候也拍了两片STC8H4K64TL准备玩一下,没想到的是一上手连一个LED都没能点亮,反复看数据手册才知道这单片机使用端口之前也是需要设置端口模式的,不似以往其他STC芯片上电默认都是准双向口了,如果是如我一样初次使用这个单片机的坛友需要注意这个问题了,接下来测试了I/O模拟SPI输出和硬件SPI输出,感觉这货的速度较常用的STC15W快了好多,同样的代码SPI刷一屏单色,8H的频率最高只能设置到22.118MHz再高就超出了tft屏的读取速度了,并且此时的刷屏速度已经可以达到4秒了,在此说点儿题外话,这次买了个很坑人的SPI接口屏,但是只看到了他有ILI9481驱动、SPI串口、宽视角高清(IPS屏),没想到这货竟然是9bit的SPI驱动模式并且内定了RGB666的18bit颜色模式的320RGB480(262K)色,用硬件SPI驱动显示一个像素需要传输2*8*3=6个字节,传输一屏数据就有320*480*6=921600个字节,即使用I/O模拟SPI总线来传输数据,传输一屏数据也要320*480*3=460800个字节,我不会计算SPI的传输速度,但我直觉它刷屏一定快不了。
最后因为只是做了一下测试,所以没有完整的代码分享,只是把I/O模拟SPI的函数贴在了下面以免标题党文之嫌,以后如果工程做完了、如果有人感兴趣再续贴或发新帖做完整分享吧

  1. uchar bdata bitdata;        //定义可位寻址的数据bitdata
  2. sbit bit7=bitdata^7;        //以下分别定义bitdata各位的名称
  3. sbit bit6=bitdata^6;
  4. sbit bit5=bitdata^5;
  5. sbit bit4=bitdata^4;
  6. sbit bit3=bitdata^3;
  7. sbit bit2=bitdata^2;
  8. sbit bit1=bitdata^1;
  9. sbit bit0=bitdata^0;

  10. //==============写指令============
  11. void write_command(uchar comd)
  12. {
  13. cs=0;
  14. sda=0;scl=0;;scl=1;//D/C=0写指令
  15. bitdata=comd;
  16. sda=bit7;scl=0;scl=1;
  17. sda=bit6;scl=0;scl=1;
  18. sda=bit5;scl=0;scl=1;
  19. sda=bit4;scl=0;scl=1;
  20. sda=bit3;scl=0;scl=1;
  21. sda=bit2;scl=0;scl=1;
  22. sda=bit1;scl=0;scl=1;
  23. sda=bit0;scl=0;scl=1;
  24. cs=1;
  25. }
  26. //===============写8位数据=================
  27. void  write_data(uchar dat)
  28. {
  29. cs=0;
  30. sda=1;scl=0;scl=1;//D/C=1写数据
  31. bitdata=dat;
  32. sda=bit7;scl=0;scl=1;
  33. sda=bit6;scl=0;scl=1;
  34. sda=bit5;scl=0;scl=1;
  35. sda=bit4;scl=0;scl=1;
  36. sda=bit3;scl=0;scl=1;
  37. sda=bit2;scl=0;scl=1;
  38. sda=bit1;scl=0;scl=1;
  39. sda=bit0;scl=0;scl=1;
  40. cs=1;
  41. }
复制代码

  1. //=======写24位数据函数=============
  2. void LCD_WR_DATA(u32 da)
  3. {
  4.     uchar temp1,temp2,temp3;
  5.     temp1=da>>16;
  6.     temp2=da>>8;
  7.     temp3=da;
  8.     write_data(temp3);
  9.     write_data(temp2);
  10.     write_data(temp1);
  11. }
复制代码





用手机拍摄彩屏怎么才能还原真实颜色呢?我每次都弄不好,每次拍的图片颜色都严重失真,希望有懂行指点一二。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

打赏

参与人数 2家元 +80 收起 理由
家睦 + 60
玛德陛下 + 20 認真發帖

查看全部打赏

发表于 2022-8-12 18:58:54 来自手机浏览器 | 显示全部楼层
怎么说呢…感觉51驱动彩屏不怎么合适……数据量一上来就卡的一比……专业的器件还是配专业的硬件……前段时间玩那个2.4寸的7789用8266推也是拉窗帘…
我对于占用IO口多的并口彩屏没啥好感,手头有个3.5寸的用32并口那速度叫一个牛逼…关键是剩下的IO就不多了…
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-12 20:17:34 | 显示全部楼层
触景情伤 发表于 2022-8-12 18:58
怎么说呢…感觉51驱动彩屏不怎么合适……数据量一上来就卡的一比……专业的器件还是配专业的硬件……前段时 ...

要想刷屏快就要找并口驱动的屏了,并口屏用32驱动是没得说的说因为它有MFC等很多资源可用,其实STC的硬件SPI总线本身与其他单片机并无区别的,我的这个屏即使用一般的STM32也快不起来,0-32bit可设置SPI数据宽度的STM32我没有所以不知道是否会使这个屏起飞,但是在网上找资料时才知道ILI94**系的串口屏确实很鸡肋,如果是全引脚接口会好些,至少可以设置成RGB565模式的16位颜色值,数据传输量就会减少30%或许就勉强可以了,另外如果只是做时钟显示的话刷屏速度就可以忽略了。
回复 支持 反对

使用道具 举报

发表于 2022-8-12 21:03:42 来自手机浏览器 | 显示全部楼层
慕名而来 发表于 2022-8-12 20:17
要想刷屏快就要找并口驱动的屏了,并口屏用32驱动是没得说的说因为它有MFC等很多资源可用,其实STC的硬件 ...

我那个3.5寸的是16位的,好像用了十几个IO还好是103rct6…做时钟用了个2.4的7789还行8266一样的拉窗帘,不过做时钟倒还是可以用的……就是现在时间不多没啥时间优化界面…实时天气预报也没有弄上去…
回复 支持 反对

使用道具 举报

发表于 2022-8-12 22:05:31 来自手机浏览器 | 显示全部楼层
有新单片机玩了。。。
回复 支持 反对

使用道具 举报

发表于 2022-8-12 23:17:42 | 显示全部楼层
如果是固定图片或者清屏, SPI+DMA才快, 可以逼近理论速度
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-13 09:33:30 | 显示全部楼层
玛德陛下 发表于 2022-8-12 22:05
有新单片机玩了。。。

是的,还有两片STC32G没上手那,板子也已经打完了还没想好咋玩,可以兴奋一阵子了,多谢临帖支持!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-13 09:38:06 | 显示全部楼层
inthsunshine 发表于 2022-8-12 23:17
如果是固定图片或者清屏, SPI+DMA才快, 可以逼近理论速度

那个DMA还没弄懂,但是这个屏貌似快不了了,我用I/O模拟9bit传输数据时用这个单片机的频率最高只能是22.118M再高一点就无法显示了,感觉是受屏幕的采样速度限制的。
回复 支持 反对

使用道具 举报

发表于 2022-8-13 11:30:49 | 显示全部楼层
玩玩新单片机
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-8-13 20:57:13 | 显示全部楼层

今天玩了一下它的内部实时时钟也挺不错的,内部RTC初始化后可以直接读年、月、日、时、分、秒,设置秒中断后每秒刷新一次数据,还有就是初始化和读出的数据都是HEX码不用任何转换就可以送去显示了,真的很简单的,我画的板子上集成了一片RX8025T作为单片机外部的32.768KHz晶振,8025本身不做任何编程控制就能配合单片机做高精度的时钟输出了。
回复 支持 反对

使用道具 举报

发表于 2022-10-12 15:54:43 | 显示全部楼层
慕名而来 发表于 2022-8-13 20:57
今天玩了一下它的内部实时时钟也挺不错的,内部RTC初始化后可以直接读年、月、日、时、分、秒,设置秒中断 ...

STC8H4K64TL内部集成的RTC真的好用。
回复 支持 反对

使用道具 举报

发表于 2022-10-12 16:46:59 | 显示全部楼层
STC8H4K64TL,  是STC首款外部低速度时钟32768可以自动校准内部高速IRC时钟的MCU, 所以当你跑外部时钟,那就用低速的32768,他自动将内部高速IRC调到和外部32768一样准,外部32768+RTC <= 3uA

打赏

参与人数 1家元 +20 收起 理由
慕名而来 + 20 謝謝分享

查看全部打赏

回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-12 21:09:20 | 显示全部楼层
桃子汽水0830 发表于 2022-10-12 16:46
STC8H4K64TL,  是STC首款外部低速度时钟32768可以自动校准内部高速IRC时钟的MCU, 所以当你跑外部时钟,那就 ...

多谢,我真的不知道时钟速度问题,当时选型时只想找一个引脚少些的内含时间的STC芯片就找到了这款,而最近也一直在用8025T做闹表,所以就把它作为外部晶振来用了。
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-4-26 13:15 , Processed in 0.296401 second(s), 15 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

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