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

89C52驱动16bit并口彩屏

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:509
  • 最近打卡:2025-05-02 08:24:06

17

主题

65

回帖

1658

积分

金牌会员

积分
1658
发表于 2023-11-25 09:50:18 | 显示全部楼层 |阅读模式

下面是屏幕的一些资料
c281035882904959834e30a8f7bcf272.jpg
O1CN01UN7P4O1xAchryddNd_!!3325786403-0-cib.jpg
O1CN01Upd1wB1xAchu3l4ng_!!3325786403-0-cib.jpg

屏幕主控是ILI9225,分辨率:176*220,16bit并口,262k彩屏
为什么用89c52驱动,因为并口16位,加上CS、RS、WR、RD、RST控制引脚一共需要21个IO口,看了看手头的开发板也就89C52胜任了。
其中:
sbit TFT_RST = P3^3; //复位
sbit TFT_CS = P2^7; //片选
sbit TFT_RS = P2^6; //数据命令选择端
sbit TFT_WR = P2^5; //读写控制
sbit TFT_RD = P3^2; //读写控制

16位并口用P0、P1




main.c
  1. #include "REG51.H"
  2. #include "lcd_driver.h"
  3. /****************************************************************************
  4. *函数名:main
  5. *输  入:无
  6. *输  出:无
  7. *功  能:主函数
  8. ****************************************************************************/
  9. void main (void)
  10. {
  11.         TFT_Init();                   //初始化TFT
  12.         while(1)
  13.         {
  14.                 TFT_ClearScreen(BLACK);          //刷黑色
  15.                 TFT_ClearScreen(BLUE);
  16.                 TFT_ClearScreen(RED);
  17.                 TFT_ClearScreen(MAGENTA);
  18.                 TFT_ClearScreen(GREEN);
  19.                 TFT_ClearScreen(CYAN);
  20.                 TFT_ClearScreen(YELLOW);
  21.                 TFT_ClearScreen(WHITE);               
  22.         }
  23. }
  24.        
复制代码
lcd_driver.h

  1. #ifndef __LCD_DRIVER_H
  2. #define __LCD_DRIVER_H
  3. #include <reg51.h>
  4. //---重定义关键词---//
  5. #ifndef uchar
  6. #define uchar unsigned char
  7. #endif
  8. #ifndef uint
  9. #define uint  unsigned int
  10. #endif
  11. //---定义使用的IO口---//
  12. sbit            TFT_RST = P3^3;   //复位
  13. sbit            TFT_CS  = P2^7;          //片选
  14. sbit            TFT_RS  = P2^6;          //数据命令选择端
  15. sbit            TFT_WR  = P2^5;          //读写控制
  16. sbit        TFT_RD  = P3^2;     //读写控制
  17. #define   TFT_DATAPORTH  P1  //放置高8位数据
  18. #define   TFT_DATAPORTL  P0
  19. //---定义屏的大小---//
  20. #define TFT_XMAX ((uchar)175)//                //设置TFT屏的大小
  21. #define TFT_YMAX ((uchar)219)//
  22. //---定义颜色的宏---//
  23. #define WHITE          0xFFFF
  24. #define BLACK          0x0000
  25. #define BLUE           0x001F
  26. #define RED            0xF800
  27. #define MAGENTA        0xF81F
  28. #define GREEN          0x07E0
  29. #define CYAN           0x7FFF
  30. #define YELLOW         0xFFE0                 //定义颜色的宏
  31. //-- 声明全局函数 --//
  32. void TFT_WriteCmd(uint cmd);
  33. void TFT_WriteData(uint dat);
  34. void TFT_Init(void);
  35. void TFT_SetWindow(uchar xStart, uchar yStart, uchar xEnd, uchar yEnd);
  36. void TFT_ClearScreen(uint color);
  37. #endif
复制代码
lcd_driver.c



  1. #include "lcd_driver.h"
  2. /****************************************************************************
  3. *函数名:TFT_WriteCmd
  4. *输  入:cmd
  5. *输  出:
  6. *功  能:写命令。
  7. ****************************************************************************/          
  8. void TFT_WriteCmd(uint cmd)
  9. {
  10.         uchar cmdH, cmdL;
  11.         cmdH = cmd >> 8;
  12.         cmdL = cmd & 0x00FF;
  13.         TFT_WR = 1;                           //初始化WR
  14.         TFT_CS = 0;                          //打开片选
  15.        
  16.         TFT_RD = 1;           //选择写
  17.         TFT_RS = 0;                          //选择命令
  18.                
  19.         TFT_DATAPORTH = cmdH; //放置命令数据
  20.         TFT_DATAPORTL = cmdL; //放置命令数据
  21.         TFT_WR = 0;                          //写入时序
  22.         TFT_WR = 1;
  23.        
  24.         TFT_CS = 1;                          //关闭片选
  25. }
  26. /****************************************************************************
  27. *函数名:TFT_WriteCmdData
  28. *输  入:cmd, dat
  29. *输  出:
  30. *功  能:写命令, 写数据。
  31. ****************************************************************************/          
  32. void TFT_WriteData(uint dat)
  33. {
  34.     uchar datH, datL;
  35.         datH = dat >> 8;
  36.         datL = dat & 0x00FF;
  37.         TFT_WR = 1;                           //初始化WR
  38.         TFT_CS = 0;                          //打开片选
  39.        
  40.         TFT_RD = 1;           //选择写
  41.         TFT_RS = 1;                          //选择发送数据
  42.                
  43.         TFT_DATAPORTH = datH;  //放置命令数据
  44.         TFT_DATAPORTL = datL;  //放置命令数据
  45.         TFT_WR = 0;                          //写入时序
  46.         TFT_WR = 1;
  47.        
  48.         TFT_CS = 1;                          //关闭片选
  49. }
  50. /****************************************************************************
  51. *函数名:TFT_Init
  52. *输  入:
  53. *输  出:
  54. *功  能:初始化TFT。
  55. ****************************************************************************/          
  56. void TFT_Init(void)
  57. {
  58.         uint i;
  59.         TFT_RST = 1;
  60.         for(i=500; i>0; i--);
  61.         TFT_RST = 0;
  62.         for(i=500; i>0; i--);
  63.         TFT_RST = 1;
  64.         for(i=5000; i>0; i--);
  65.        
  66.          TFT_CS = 0;
  67.          
  68.          //LCD Init For 2.0inch LCD Panel with ILI9225.       
  69.         TFT_WriteCmd(0x10);TFT_WriteData(0x0000);
  70.         TFT_WriteCmd(0x11);TFT_WriteData(0x0000);
  71.         TFT_WriteCmd(0x12);TFT_WriteData(0x0000);
  72.         TFT_WriteCmd(0x13);TFT_WriteData(0x0000);
  73.         TFT_WriteCmd(0x14);TFT_WriteData(0x0000);
  74.         for(i=500; i>0; i--);
  75.         TFT_WriteCmd(0x11);TFT_WriteData(0x0018);
  76.         TFT_WriteCmd(0x12);TFT_WriteData(0x200E);
  77.         TFT_WriteCmd(0x13);TFT_WriteData(0x0052);
  78.         TFT_WriteCmd(0x14);TFT_WriteData(0x3961);
  79.         TFT_WriteCmd(0x10);TFT_WriteData(0x0000);
  80.         for(i=500; i>0; i--);
  81.        
  82.         TFT_WriteCmd(0x11);TFT_WriteData(0x1038);
  83.         for(i=500; i>0; i--);
  84.        
  85.         TFT_WriteCmd(0x02);TFT_WriteData(0x0100);
  86.        
  87.         TFT_WriteCmd(0x01);TFT_WriteData(0x011C);
  88.         TFT_WriteCmd(0x03);TFT_WriteData(0x1030);
  89.        
  90.         TFT_WriteCmd(0x07);TFT_WriteData(0x0000);
  91.         TFT_WriteCmd(0x08);TFT_WriteData(0x0808);
  92.         TFT_WriteCmd(0x0B);TFT_WriteData(0x1100);
  93.         TFT_WriteCmd(0x0C);TFT_WriteData(0x0000);
  94.         TFT_WriteCmd(0x0F);TFT_WriteData(0x0501);
  95.         TFT_WriteCmd(0x15);TFT_WriteData(0x0020);
  96.         TFT_WriteCmd(0x20);TFT_WriteData(0x0000);
  97.         TFT_WriteCmd(0x21);TFT_WriteData(0x0000);
  98.        
  99.         TFT_WriteCmd(0x30);TFT_WriteData(0x0000);
  100.         TFT_WriteCmd(0x31);TFT_WriteData(0x00DB);
  101.         TFT_WriteCmd(0x32);TFT_WriteData(0x0000);
  102.         TFT_WriteCmd(0x33);TFT_WriteData(0x0000);
  103.         TFT_WriteCmd(0x34);TFT_WriteData(0x00DB);
  104.         TFT_WriteCmd(0x35);TFT_WriteData(0x0000);
  105.         TFT_WriteCmd(0x36);TFT_WriteData(0x00AF);
  106.         TFT_WriteCmd(0x37);TFT_WriteData(0x0000);
  107.         TFT_WriteCmd(0x38);TFT_WriteData(0x00DB);
  108.         TFT_WriteCmd(0x39);TFT_WriteData(0x0000);
  109.        
  110.         TFT_WriteCmd(0x50);TFT_WriteData(0x0603);
  111.         TFT_WriteCmd(0x51);TFT_WriteData(0x080D);
  112.         TFT_WriteCmd(0x52);TFT_WriteData(0x0D0C);
  113.         TFT_WriteCmd(0x53);TFT_WriteData(0x0205);
  114.         TFT_WriteCmd(0x54);TFT_WriteData(0x040A);
  115.         TFT_WriteCmd(0x55);TFT_WriteData(0x0703);
  116.         TFT_WriteCmd(0x56);TFT_WriteData(0x0300);
  117.         TFT_WriteCmd(0x57);TFT_WriteData(0x0400);
  118.         TFT_WriteCmd(0x58);TFT_WriteData(0x0B00);
  119.         TFT_WriteCmd(0x59);TFT_WriteData(0x0017);
  120.        
  121.         TFT_WriteCmd(0x0F);TFT_WriteData(0x0701);
  122.         TFT_WriteCmd(0x07);TFT_WriteData(0x0012);
  123.         for(i=500; i>0; i--);
  124.         TFT_WriteCmd(0x07);TFT_WriteData(0x1017);
  125.        
  126. }
  127. /****************************************************************************
  128. *函数名:TFT_SetWindow
  129. *输  入:xStart, yStart, xEnd, yEnd
  130. *输  出:
  131. *功  能:设置要操作的窗口。
  132. ****************************************************************************/          
  133. void TFT_SetWindow(uchar xStart, uchar yStart, uchar xEnd, uchar yEnd)
  134. {
  135.          uint x,y,xy;
  136.          x=(xEnd <<8)|xStart;
  137.          y=(yEnd <<8)|yStart;
  138.          xy = (yStart<<8)|xStart;
  139.          TFT_WriteCmd(0x44);TFT_WriteData(x);
  140.          TFT_WriteCmd(0x45);TFT_WriteData(y);
  141.          TFT_WriteCmd(0x21);TFT_WriteData(xy);
  142.          /*TFT_WriteCmd(0x20);TFT_WriteData(xStart);   //xStart
  143.          TFT_WriteCmd(0x21);TFT_WriteData(yStart);   //yStart
  144.          */
  145.          TFT_WriteCmd(0x22);
  146. }
  147. /****************************************************************************
  148. *函数名:GUI_Clearcreen
  149. *输  入:backColor
  150. *输  出:
  151. *功  能:清屏并涂上颜色。
  152. ****************************************************************************/
  153.           
  154. void TFT_ClearScreen(uint color)
  155. {
  156.           uint i, j;
  157.         TFT_SetWindow(0, 0, TFT_XMAX, TFT_YMAX);         //作用区域
  158.           for(i=0; i<=TFT_XMAX; i++)
  159.         {
  160.                 for (j=0; j<=TFT_YMAX; j++)
  161.                 {
  162.                         TFT_WriteData(color);
  163.                 }
  164.         }
  165. }
复制代码
无标题.png

回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

积分
15630
发表于 2023-11-25 12:33:49 | 显示全部楼层
用 STC8H8K64U / STC32G12K128 有 DMA支持
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:43
  • 最近打卡:2025-03-28 23:40:34

0

主题

36

回帖

268

积分

中级会员

积分
268
发表于 2024-6-18 19:57:15 来自手机 | 显示全部楼层
TFT屏是不是用BLK引脚来调节亮度?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:503
  • 最近打卡:2025-05-02 08:06:55
已绑定手机

1

主题

834

回帖

1447

积分

金牌会员

积分
1447
发表于 2024-8-3 09:33:38 | 显示全部楼层
wjy*** 发表于 2024-6-18 19:57
TFT屏是不是用BLK引脚来调节亮度?

对的,通过BLK引脚可以控制背光亮灭,也可以实现亮度调节
靡不有初,鲜克有终
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:307
  • 最近打卡:2025-05-02 07:14:07

0

主题

46

回帖

1016

积分

金牌会员

积分
1016
发表于 2024-8-6 15:44:38 | 显示全部楼层
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:56
  • 最近打卡:2025-02-08 16:51:56

4

主题

14

回帖

280

积分

中级会员

积分
280
发表于 2024-11-5 10:50:15 来自手机 | 显示全部楼层
看代码没看到使用16位并口P0'P1
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:505
  • 最近打卡:2025-05-02 10:38:54

9

主题

193

回帖

556

积分

高级会员

积分
556
发表于 2024-11-9 10:30:37 | 显示全部楼层
应该很慢吧,c52驱动彩屏
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:55
  • 最近打卡:2025-05-02 08:32:59

718

主题

1万

回帖

1万

积分

管理员

积分
15630
发表于 2024-11-9 10:44:31 | 显示全部楼层
改用管脚兼容Ai8051U视频级刷屏

截图202411091140368396.jpg

https://www.stcaimcu.com/forum.p ... id=10511&pid=103755

Ai8051UUSB 型 1T 8051,支持32位和8位指令集, LQFP48-RMB2.3
===直接 USB下载 / USB仿真,1个芯片搞定
管脚兼容天王级别的:  89C52RC,  12C5A60S2
要兼容 8位8051指令集,  可以用 Keil C51/IAR/SDCC 编译器
===就相当于更强大的 8H8K64U
兼容 32位8051指令集可以用 Keil C251 编译器,双核兼容设计

===就相当于更强大的 32G12K128, 32G8K64
34K SRAM(2K edata, 32K xdata), 64K Flash
TFPU@120MHz, 硬件浮点/硬件三角函数 运算器
DMA支持PWM, DMA支持外设直接到外设, P2P

120MHz-PWM支持硬件移相,16位PWM; 真12位ADC
USB, 4组串口,12位ADC, 轨到轨比较器
QSPI, SPI, I2S, I2C,  TFT-i8080/M6800 接口
PDIP40,LQFP44,LQFP48

============================================



Ai8051U-LQFP48  比普通 M0/M3,如 32F103C8T6 强太多的地方:
1,Ai8051U有TFPU@120MHz, 算力比他强, uS级硬件三角函数/浮点运算器;
2,Ai8051U的抗干扰比他强;
3,  Ai8051U的内部复位是专业级的复位电路,彻底省外部复位;
4,  Ai8051U的内部时钟完全满足串口通信要求,4组串口;
5,Ai8051U-LQFP48有 QSPI, i8080/M6800-TFT 接口,32F103C8T6没有;
6,  Ai8051U的PWM支持硬件移相@120MHz
7,Ai8051U是 34K SRAM
8,Ai8051U是 自带硬件USB, 1个芯片就能直接USB连接电脑仿真/下载,全球唯一

Ai8051U-LQFP48, RMB2.3含税


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-02 07:55:56
已绑定手机

19

主题

3191

回帖

4872

积分

论坛元老

积分
4872
发表于 2024-11-9 11:24:56 来自手机 | 显示全部楼层
flash有点小,如果图片还要外挂flash吧,刷新率也不是很高吧
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:154
  • 最近打卡:2025-04-30 08:40:57
已绑定手机

15

主题

630

回帖

730

积分

高级会员

积分
730
发表于 2024-11-9 13:02:06 | 显示全部楼层
so*** 发表于 2024-11-9 11:24
flash有点小,如果图片还要外挂flash吧,刷新率也不是很高吧

89C52跑起来都很慢的
STC 666 888
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 20:41 , Processed in 0.294021 second(s), 120 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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