找回密码
 立即注册
查看: 530|回复: 5

AI8051U驱动ST7796时遇到问题

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:52
  • 最近打卡:2025-04-08 20:05:04
已绑定手机

13

主题

79

回帖

438

积分

荣誉版主

积分
438
发表于 2024-11-27 21:57:20 | 显示全部楼层 |阅读模式
  1. void SPI_Init(void)       
  2. {
  3.         /****        配置SPI的IO引脚模式        ****/
  4.         P1M0 |= 0xe0;                //配置MOSI/MISO/SCLK引脚为推挽输出
  5.         P1M1 &= ~0xe0;
  6.         P1PU |= 0xe0;                //允许准双向口内部上拉电阻       
  7.         TFT_MOSI = 1;                //引脚上拉
  8.         TFT_MISO = 1;
  9.         TFT_SCLK = 1;
  10.        
  11.         /****        配置SPI模式        ****/
  12.        
  13.         SPI_S1 = 0x00;        //        选择SPI1的引脚 00:P1+        01:P2+        10:P4+        11:P3+
  14.         SPI_S0 = 0x00;
  15.         //控制寄存器
  16.         SSIG = 0X01;                //控制寄存器 忽略SS引脚功能
  17.         SPEN = 0x01;                //使能SPI
  18.         DORD = 0x00;                //先发送高位MSB,若为1则先发送低位LSB
  19.         MSTR = 0x01;                //设置为主机模式,单主单从模式。须根据SSIG进行不同设置
  20.         CPOL = 0x01;                //时钟极性为高,即空闲时是高电平。极性相反时传输数据
  21.         CPHA = 0x01;                //前沿驱动,后沿采样
  22.        
  23.         //时钟配置
  24.         //系统默认启动内部高速HRC,CLKSEL = 0x00:配置为内部高速HRC -00-00-> MCLK -> HSIOCK -HSCLKDIV-> HSCLK        -SPI_CLKDIV-> SPI
  25.         //同时,HSCLK是高速外设时钟源。当使用HSPI时在3V下最高频率为20MHz(同时调整PxSR寄存器为高速输出模式)
  26.         CLKSEL                 &= ~0x40;        //选择MCLK为高速IO时钟源
  27.         HSCLKDIV                 = 0x01;                //高速时钟1分频 -> 24M
  28.         SPI_CLKDIV         = 0x01;                //SPI输入时钟1分频,0-255        -> 24M                                                       
  29.         SPR1 = 0x01;                                        //SCLK频率 = 24MHz/2 = 12MHz
  30.         SPR0 = 0x01;
  31.        
  32.         //中断配置
  33.         ESPI = 0x00;                                //禁止SPI中断
  34.         SPSTAT = 0xc0;                        //清除中断标志位SPIF和写冲突标志位WCOL
  35.         UART1_printf("开启LCD的SPI\n");
  36. }
  37. u8 SPI_WriteByte(u8 Byte)
  38. {
  39.         SPDAT = Byte;
  40.         while(!SPIF);        //等待接收完一个byte
  41.         SPSTAT = 0xc0;                //清SPIF/WCOL标志
  42.         return (SPDAT);
  43. }
复制代码
SPI的配置有问题吗?


  1. void LCD_WR_REG(u8 dat)
  2. {
  3.    LCD_CS=0;     
  4.          LCD_RS=0;          
  5.    SPI_WriteByte(dat);
  6.    LCD_CS=1;       
  7. }
  8. void LCD_WR_DATA(u8 dat)
  9. {
  10.    LCD_CS=0;
  11.          LCD_RS=1;
  12.    SPI_WriteByte(dat);
  13.    LCD_CS=1;
  14. }
  15. void LCD_Clear(u16 Color)
  16. {
  17.   unsigned int i,m;  
  18.         LCD_SetWindows(0,0,lcddev.width-1,lcddev.height-1);   
  19.         LCD_CS=0;
  20.         LCD_RS=1;
  21.         for(i=0;i<lcddev.height;i++)
  22.         {
  23.     for(m=0;m<lcddev.width;m++)
  24.     {       
  25.                         SPI_WriteByte(Color>>8);
  26.                         SPI_WriteByte(Color);
  27.                 }
  28.         }
  29.          LCD_CS=1;
  30. }
  31. void LCD_IO_Init(void)
  32. {
  33.         P1M0 |= 0x13;                //BL/RS/CS推挽输出
  34.         P1M1 &= ~0x13;
  35.         P4M0 |= 0x80;         //RST推挽输出
  36.         P4M1 &= ~0x80;
  37.        
  38.         P1PU |= 0x13;                //启用上拉电阻
  39.         P4PU |=        0x80;
  40.        
  41.         LCD_CS=1;
  42.         LCD_BL=1;
  43.         LCD_RS=1;
  44.         LCD_RST=1;
  45. }
  46. void LCD_RESET(void)
  47. {
  48.         LCD_RST=0;
  49.         delay_ms(100);       
  50.         LCD_RST=1;
  51.         delay_ms(50);
  52. }
  53. void LCD_Init(void)
  54. {
  55.         SPI_Init();                                //硬件SPI初始化
  56.         LCD_IO_Init();                //LCD IO初始化
  57.         LCD_RESET();                         //LCD 复位
  58.        
  59.         /****        ST7796S IPS初始化        ****/       
  60.         LCD_WR_REG(0x11);     
  61.         delay_ms(120);
  62.         LCD_WR_REG(0x36);     // Memory Data Access Control MY,MX~~
  63.         LCD_WR_DATA(0x48);   
  64.         LCD_WR_REG(0x3A);     
  65.         LCD_WR_DATA(0x55);   //LCD_WR_DATA(0x66);
  66.         LCD_WR_REG(0xF0);     // Command Set Control
  67.         LCD_WR_DATA(0xC3);   
  68.         LCD_WR_REG(0xF0);     
  69.         LCD_WR_DATA(0x96);   
  70.         LCD_WR_REG(0xB4);     
  71.         LCD_WR_DATA(0x01);   
  72.         LCD_WR_REG(0xB7);     
  73.         LCD_WR_DATA(0xC6);   
  74.         //LCD_WR_REG(0xB9);     
  75.         //LCD_WR_DATA(0x02);
  76.         //LCD_WR_DATA(0xE0);
  77.         LCD_WR_REG(0xC0);     
  78.         LCD_WR_DATA(0x80);   
  79.         LCD_WR_DATA(0x45);   
  80.         LCD_WR_REG(0xC1);     
  81.         LCD_WR_DATA(0x13);   //18  //00
  82.         LCD_WR_REG(0xC2);     
  83.         LCD_WR_DATA(0xA7);   
  84.         LCD_WR_REG(0xC5);     
  85.         LCD_WR_DATA(0x0A);   
  86.         LCD_WR_REG(0xE8);     
  87.         LCD_WR_DATA(0x40);
  88.         LCD_WR_DATA(0x8A);
  89.         LCD_WR_DATA(0x00);
  90.         LCD_WR_DATA(0x00);
  91.         LCD_WR_DATA(0x29);
  92.         LCD_WR_DATA(0x19);
  93.         LCD_WR_DATA(0xA5);
  94.         LCD_WR_DATA(0x33);
  95.         LCD_WR_REG(0xE0);
  96.         LCD_WR_DATA(0xD0);
  97.         LCD_WR_DATA(0x08);
  98.         LCD_WR_DATA(0x0F);
  99.         LCD_WR_DATA(0x06);
  100.         LCD_WR_DATA(0x06);
  101.         LCD_WR_DATA(0x33);
  102.         LCD_WR_DATA(0x30);
  103.         LCD_WR_DATA(0x33);
  104.         LCD_WR_DATA(0x47);
  105.         LCD_WR_DATA(0x17);
  106.         LCD_WR_DATA(0x13);
  107.         LCD_WR_DATA(0x13);
  108.         LCD_WR_DATA(0x2B);
  109.         LCD_WR_DATA(0x31);
  110.         LCD_WR_REG(0xE1);
  111.         LCD_WR_DATA(0xD0);
  112.         LCD_WR_DATA(0x0A);
  113.         LCD_WR_DATA(0x11);
  114.         LCD_WR_DATA(0x0B);
  115.         LCD_WR_DATA(0x09);
  116.         LCD_WR_DATA(0x07);
  117.         LCD_WR_DATA(0x2F);
  118.         LCD_WR_DATA(0x33);
  119.         LCD_WR_DATA(0x47);
  120.         LCD_WR_DATA(0x38);
  121.         LCD_WR_DATA(0x15);
  122.         LCD_WR_DATA(0x16);
  123.         LCD_WR_DATA(0x2C);
  124.         LCD_WR_DATA(0x32);
  125.          
  126.         LCD_WR_REG(0xF0);     
  127.         LCD_WR_DATA(0x3C);   
  128.         LCD_WR_REG(0xF0);     
  129.         LCD_WR_DATA(0x69);   
  130.         delay_ms(120);               
  131.         LCD_WR_REG(0x20);     
  132.         LCD_WR_REG(0x29);
  133.   LCD_direction(0);//设置LCD显示方向
  134.         LCD_Clear(RED);//清全屏白色
  135.        
  136.         LCD_BL=1;
  137.        
  138.         UART1_printf("开启LCD\n");
  139. }
复制代码
这是LCD的驱动配置


源代码 08_AI8051U_ST7796SPI.zip (10.62 MB, 下载次数: 47)
君子知命不惑,日日自新。
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:100
  • 最近打卡:2025-06-17 08:13:13

734

主题

1万

回帖

1万

积分

管理员

积分
16690
发表于 2024-11-27 22:24:15 | 显示全部楼层
谁有这个屏,寄2块给我们,我们来帮忙测试下
或者告诉我们在哪买,我们买了来测试下
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:422
  • 最近打卡:2025-06-17 08:44:16

26

主题

117

回帖

898

积分

高级会员

积分
898
发表于 2024-11-27 22:32:29 | 显示全部楼层
看了半天  也没有看见你遇到什么问题?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:52
  • 最近打卡:2025-04-08 20:05:04
已绑定手机

13

主题

79

回帖

438

积分

荣誉版主

积分
438
发表于 2024-11-27 22:40:20 | 显示全部楼层
zhang*** 发表于 2024-11-27 22:32
看了半天  也没有看见你遇到什么问题?

屏幕只能够被BL点亮,代码里 LCD_Clear(RED);正常应该全名红色,实际上就是白色,仅仅BL点亮。
君子知命不惑,日日自新。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:52
  • 最近打卡:2025-04-08 20:05:04
已绑定手机

13

主题

79

回帖

438

积分

荣誉版主

积分
438
发表于 2024-11-27 22:41:05 | 显示全部楼层
神*** 发表于 2024-11-27 22:24
谁有这个屏,寄2块给我们,我们来帮忙测试下
或者告诉我们在哪买,我们买了来测试下
...

【淘宝】7天无理由退货 http://e.tb.cn/h.T2R5afDtLEPwTUA?tk=lvYx3G80RAy HU9196 「3.5寸4寸TFT液晶显示屏GT911电阻电容触摸SPI串口8位16位ST7796」
点击链接直接打开 或者 淘宝搜索直接打开

(或者可以买去测试完了再无理由退货?{:5_298:})
君子知命不惑,日日自新。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:52
  • 最近打卡:2025-04-08 20:05:04
已绑定手机

13

主题

79

回帖

438

积分

荣誉版主

积分
438
发表于 2024-11-27 23:26:44 | 显示全部楼层
截图202411272326413652.jpg
君子知命不惑,日日自新。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-17 23:27 , Processed in 0.133577 second(s), 82 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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