数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 2208|回复: 13

[C51] STC屠龙刀实验板驱动7寸TFT屏测试代码分享2-DMA_LCM接口应用

[复制链接]
发表于 2023-1-3 10:45:38 | 显示全部楼层 |阅读模式
本帖最后由 慕名而来 于 2023-1-6 19:54 编辑

文接上回:STC屠龙刀实验板驱动7寸TFT屏测试代码分享1-LCM接口驱动
https://www.mydigit.cn/thread-363836-1-1.html
(出处: 数码之家)

STC32G硬件LCM接口测试完成后接下来就测试它的DMA功能,话说STC的资料真的丰富,新手做测试只要找到相关例程就很容易成功的,但是,例程毕竟是演示程序是不可能完全与自己的硬件系统相吻合,除非是你完全按照例程来匹配硬件,但那样一来也就失去了玩的意义,我玩单片机的兴趣其实就来源于改程序、编程序、找错的过程。
废话止于此下面继续分享代码。

主函数:

  1. //STC32G单片机LCM接口+DMA驱动SSD1963-7寸TFT液晶屏测试程序
  2. //程序原创:wannenggong 于2022年12月28日测试通过
  3. //程序基于STC32G为主控芯片的实验箱测试例程改编
  4. //使用Keil C251编译器,Memory Model推荐设置XSmall模式,默认定义变量在edata,单时钟存取访问速度快。
  5. //edata建议保留1K给堆栈使用,空间不够时可将大数组、不常用变量加xdata关键字定义到xdata空间。
  6. //硬件LCM接口的指令(数据)并行口已经控制信号RS、RD、WR由配置寄存器控制、由函数LCM_Config()进行配置、无需再次定义
  7. //------------------------------------------------
  8. //本案LCM接口的应用配置(引脚接线方式)如下:(参照STC32G.pdf--27.x)
  9. //驱动LCM控制芯片型号为:SSD1963(7”屏幕为创群AT070N92)
  10. //16bit-MCU并行总线 I8080模式,
  11. //低8位口接D0~D7连接P0.0-P0.7
  12. //高8位口接D8~D15连接P2.0-P2.7
  13. //LCD_RS = P4^5;//数据/命令切换
  14. //LCD_WR = P4^2;//写控制
  15. //LCD_RD = P4^4;//读控制
  16. //下载时, 选择内部时钟 24MHz
  17. //------------------------------------------------
  18. #include "STC32G.h"
  19. #include "TFT_LCD.h"
  20. #include "delay.h"
  21. #include "SSD1963.h"
  22. #define DMA_AMT_LEN 2047 //n+1
  23. u16 index;//(800 * 480 * 2) / 2048 = 375、每次中断发送一包数据并减掉一个包数;//LCM_MDA发送数据计数变量
  24. u16 xdata Color[DMA_AMT_LEN+1];
  25. bit LcmFlag;
  26. bit DmaFlag=1;
  27. //----LCM-DMA寄存器配置函数(用于STC32G)----------------------------------
  28. void DMA_Config(void)
  29. {
  30. DMA_LCM_AMT = (u8)DMA_AMT_LEN; //设置传输总字节数(低8位):n+1
  31. DMA_LCM_AMTH = (u8)(DMA_AMT_LEN>>8); //设置传输总字节数(高8位):n+1
  32. DMA_LCM_TXAH = (u8)((u16)&Color >> 8); //LCM-DMA发送数据的地址指向Color[]的地址
  33. DMA_LCM_TXAL = (u8)((u16)&Color);
  34. DMA_LCM_STA = 0x00;//清除所有标志、B0=中断标志、B1=数据覆盖标志
  35. DMA_LCM_CFG = 0x82;//配置LCM-DMA寄存器:使能LCM-DMA中断、设置中断等级最低级、设置数据总线访问优先级为较高级
  36. }
  37. //----DMA_LCM设定范围内涂色函数------------------------------------------------
  38. //DMA_LCM设置一次传输数据量为2047+1个字节(一包数据=2Kbit)
  39. //满屏刷新时:(800 * 480 * 2) / 2048 = 375
  40. //每次中断发送2Kbit数据
  41. void LCD_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u16 color)
  42. {
  43. u16 i;
  44. index=(((u32)ex-sx)*((u32)ey-sy)*2)/2048;
  45. LCD_SetWindows(sx,sy,ex,ey);//设置显示窗口
  46. while(index>0)
  47. {
  48. index--;
  49. for(i=0; i<=DMA_AMT_LEN; i++)
  50. {
  51. Color[i] = color;
  52. }
  53. DmaFlag=0;
  54. DMA_LCM_CR = 0xa0; //Write dat
  55. while(DmaFlag);
  56. }
  57. }
  58. //----LCMIF_DMA中断函数----------------------------------
  59. void LCMIF_DMA_Interrupt(void) interrupt 13
  60. {
  61. if(LCMIFSTA & 0x01)
  62. {
  63. LCMIFSTA = 0x00;
  64. LcmFlag = 0;
  65. }
  66. if(DMA_LCM_STA & 0x01)
  67. {
  68. if(DmaFlag)
  69. {
  70. DmaFlag = 0;
  71. DMA_LCM_CR = 0;
  72. }
  73. else
  74. {
  75. if(index == 0)
  76. {
  77. DMA_LCM_CR = 0;
  78. DmaFlag=1;
  79. }
  80. }
  81. DMA_LCM_STA = 0;
  82. }
  83. }
  84. //==========================================================================
  85. void main(void)
  86. {
  87. WTST = 0; //设置程序指令延时参数、赋值为0为等待0个时钟、可将CPU执行指令的速度设置为最快
  88. EAXFR=1; //相当于P_SW2 |= 0x80(使能扩展寄存器(XFR)访问)
  89. CKCON = 0; //提高访问XRAM速度
  90. EXTRAM=1; //使能外部扩展寄存器(xdata)的操作
  91. P0M0=0xff; //P0推挽输出
  92. P0M1=0x00;
  93. P2M0=0xff; //P2推挽输出
  94. P2M1=0x00;
  95. P3M0=0x10; //P3.4推挽输出
  96. P3M1=0x00;
  97. P4M0=0x3c; //P4-2.3.4.5推挽输出
  98. P4M1=0x00;
  99. EA = 1;
  100. LCM_Config();
  101. DMA_Config();
  102. LCD_Init(); //LCM初始化
  103. LCD_Fill(0,0,800,480,BLUE);
  104. while(1)
  105. {
  106. LCD_Fill(0,0,400,180,RED);
  107. delay_ms(1000);
  108. LCD_Fill(0,0,600,280,GREEN);
  109. delay_ms(1000);
  110. LCD_Fill(0,0,800,480,YELLOW);
  111. delay_ms(1000);
  112. LCD_Fill(0,0,800,480,BLUE);
  113. delay_ms(1000);
  114. }
  115. }
复制代码

其他代码与上一篇一样就不再贴出来了。

网站可能是阳了,无法上传图片,也无法复制粘贴前文的链接。

注:烧录代码时设置内部时钟频率为24MHz!

由于我不知道怎样上传演示视频,所以无法演示DMA_LCD刷7“ 800*480TFT屏的效果



网盘分享请移步:STC屠龙刀实验板驱动7寸TFT屏测试代码分享3-片内RTC时钟演示
https://www.mydigit.cn/thread-364135-1-1.html
(出处: 数码之家)

本帖子中包含更多资源

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

x

打赏

参与人数 2家元 +40 收起 理由
玛德陛下 + 20 謝謝分享
jf201006 + 20 謝謝分享

查看全部打赏

 楼主| 发表于 2023-1-3 10:49:40 | 显示全部楼层
占楼等待补图。
@家睦  请问网站为什么不能上传图片了?
回复 支持 反对

使用道具 举报

发表于 2023-1-3 10:55:01 | 显示全部楼层
慕名而来 发表于 2023-1-3 10:49
占楼等待补图。
@家睦  请问网站为什么不能上传图片了?

发帖页面有提示,电脑端上传的图片分辨率不能超过4000px,建议调整为2000px分辨率再上传。
回复 支持 反对

使用道具 举报

发表于 2023-1-3 10:57:56 | 显示全部楼层
不错,实践出来的
回复 支持 反对

使用道具 举报

发表于 2023-1-3 11:26:26 | 显示全部楼层
玩程序的高手
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-3 19:31:33 | 显示全部楼层
不长叶子的树 发表于 2023-1-3 10:55
发帖页面有提示,电脑端上传的图片分辨率不能超过4000px,建议调整为2000px分辨率再上传。 ...

多谢指点,我遇到的问题是点不开上传图片的按钮,而且点击文章的复制链接时只能复制粘贴文字但无法复制粘贴链接,我怀疑是网站维护有问题了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-3 19:38:36 | 显示全部楼层
mhtlov 发表于 2023-1-3 10:57
不错,实践出来的

确实废了好多力气,就例程的这个函数void LCD_Fill();原来例程的代码是下面这样的:

void LCD_Fill(u16 sx,u16 sy,u16 ex,u16 ey,u16 color)
{   
u16 i,j;   
u16 width=ex-sx+1;   //得到填充的宽度
u16 height=ey-sy+1;  //高度
LCD_SetWindows(sx,sy,ex,ey);//设置显示窗口
for(j=0,i=0;i<=DMA_AMT_LEN;i++)
{
  Color = color;
}
index = 75;     //(320 * 240 * 2) / 2048 = 75
LCD_CS=0;
DMA_LCM_CR = 0xa0; //Write dat
while(!LCD_CS);
}
这个例程代码我弄了很久也无法使用,它只能通过DMA发送一包数据(2Kbit)无法刷新一屏,后来弄清了驱动原理后自己重新编写了这个函数就可以使用了。
回复 支持 反对

使用道具 举报

发表于 2023-1-5 16:04:02 | 显示全部楼层
楼主能不能搞个压缩工程下载链接??
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-6 10:56:04 | 显示全部楼层
hewayking 发表于 2023-1-5 16:04
楼主能不能搞个压缩工程下载链接??

如果感兴趣的话,哪里有问题可以跟帖交流,我的这几篇都不完整,因为我的电脑无法上传东西,就是通过<>这个贴代码每次都要弄好几回才能成功,等到操作顺畅了再补充吧。
回复 支持 反对

使用道具 举报

发表于 2023-1-6 11:00:36 | 显示全部楼层
慕名而来 发表于 2023-1-6 10:56
如果感兴趣的话,哪里有问题可以跟帖交流,我的这几篇都不完整,因为我的电脑无法上传东西,就是通过这个 ...

上个网盘链接也行大神    手头有一块群创的屏在吃灰  我想研究一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-6 20:02:59 | 显示全部楼层
hewayking 发表于 2023-1-6 11:00
上个网盘链接也行大神    手头有一块群创的屏在吃灰  我想研究一下

我这个创群屏是带有SSD1963驱动板的,代码也是驱动SSD1963的,1963的数据手册提示它是可以使用8位并口或16位并口均可驱动的,但我弄了好久没有成功的用8位并口总线驱动成功,这个问题还要留待以后再玩了。
回复 支持 反对

使用道具 举报

发表于 2023-1-7 14:59:04 | 显示全部楼层
玩的开心就好,新一代的大多在B站这些发视频贴了,这论坛的讨论单片机贴少。

打赏

参与人数 1家元 +20 收起 理由
ljlun + 20 熱心會員

查看全部打赏

回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-1-7 16:18:06 | 显示全部楼层
玛德陛下 发表于 2023-1-7 14:59
玩的开心就好,新一代的大多在B站这些发视频贴了,这论坛的讨论单片机贴少。 ...

多谢,这里单片机的版块相互交流的人越来越少了,凑合这玩吧。
回复 支持 反对

使用道具 举报

发表于 2023-4-6 13:09:21 | 显示全部楼层
新型8051支持 TFT屏幕的经典演示
回复 支持 反对

使用道具 举报

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

本版积分规则

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

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-7-21 16:46 , Processed in 0.280800 second(s), 13 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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