找回密码
 立即注册
查看: 79|回复: 4

求助STC32G12K128驱动彩屏硬件I8080还没有软件模拟快

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2026-04-30 10:00:57
已绑定手机

1

主题

6

回帖

27

积分

新手上路

积分
27
发表于 2026-4-10 21:21:20 | 显示全部楼层 |阅读模式
用STC32G12K128芯片,用硬件LCM驱动16位并口屏,刷新还没有用软件模拟快,请教老师帮忙看看是哪里没有配置好吗?



////////////////////////////////////////
// LCM初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void LCM_Init(void)
{
        LCM_DATA16BSwitchP2P0();            //选择LCM数据口: {P2[7:0], P0[7:0]}
    LCM_RSSwitchP40();                  //选择LCM的RS端口: RS (P4.0)
    LCM_CTRLSwitchP4442();              //选择LCM的R/W控制端口: RD (P4.4), WR (P4.2)

    LCM_SetMode_i8080();                //设置LCM为i8080模式
    LCM_SetBitWidth_16B();              //设置LCM为16数据模式
    LCM_SetSetupTime(2);                //设置LCM数据建立时间
    LCM_SetHoldTime(1);                 //设置LCM数据保持时间

    // LCM_SetIntPriority(3);              //设置中断为最高优先级                                 //查询法不用打开中断
    // LCM_EnableInt();                     //使能LCM中断                                                //查询法不用打开中断
    //LCMIFSTA = 0x00;                         // [0] LCMIFIF中断请求标志,需软件清零          //查询法不用打开中断
        
        LCM_Enable();                               //使能LCM功能
}


/*****************************************************************************
* @name       :void LCM_Interrupt(void)
* @date       :2018-11-13
* @function   :None
* @parameters :None
* @retvalue   :查询法不用打开中断
******************************************************************************/
void LCM_ISR(void) interrupt LCM_VECTOR
{
//        LCMIFSTA = 0x00;
//        LCD_CS=1;
}
/*****************************************************************************
* @name       :void LCD_WR_REG(u16 Reg)   
* @date       :2018-08-09
* @function   :Write an 16-bit command to the LCD screen          在LCD屏幕上写入16位命令
* @parameters :Reg:Command value to be written                                要写入的命令值
* @retvalue   :None
******************************************************************************/
void LCD_WR_REG(u16 Reg)     
{
/*****************硬件LCM**********************************/               
        
//    LCMIFDATH = Reg>>8;
//        LCMIFDATL = Reg;
//        LCD_CS_L();
//        LCMIFCR = 0x84;                //启用接口,写出命令
//    while(!LCMIFSTA);        //中断法去掉这行
//    LCMIFSTA = 0x00;        //中断法去掉这行
//    LCD_CS_H();                //中断法去掉这行
        
/*****************软件模拟**********************************/        
        LCD_RS=0;
        LCD_CS=0;
        LCD_WR=0;
        LCD_DataPortH=Reg>>8;
        LCD_DataPortL=Reg;
        LCD_WR=1;
        LCD_CS=1;
}

/*****************************************************************************
* @name       :void LCD_WR_DATA(u16 Data)
* @date       :2018-08-09
* @function   :Write an 16-bit data to the LCD screen  将16位数据写入LCD屏幕
* @parameters :data:data value to be written                        要写入的数据值
* @retvalue   :None
******************************************************************************/
void LCD_WR_DATA(u16 Data)
{
/*****************硬件LCM**********************************/               
        
//    LCMIFDATH = Data>>8;
//        LCMIFDATL = Data;
//        LCD_CS_L();
//        LCMIFCR = 0x85;                // 启用接口,写出数据
//    while(!LCMIFSTA);                //中断法去掉这行
//    LCMIFSTA = 0x00;               //中断法去掉这行
//    LCD_CS_H();                       //中断法去掉这行
        
/*****************软件模拟**********************************/               
        LCD_RS=1;
        LCD_CS=0;
        LCD_WR=0;
        LCD_DataPortH=Data>>8;
        LCD_DataPortL=Data;
        LCD_WR=1;
        LCD_CS=1;        
}

回复

使用道具 举报 送花

  • 打卡等级:以坛为家III
  • 打卡总天数:710
  • 最近打卡:2026-04-29 17:46:54
已绑定手机
已实名认证

131

主题

3416

回帖

8928

积分

版主

积分
8928
发表于 2026-4-11 11:34:09 | 显示全部楼层
这是很正常的事情,DMA内因为设置了数据建立等待时间和数据保持时间,所以肯定比软件模拟要慢一些的,你可以调低这两个时序值(前提是保证数据发出去没有问题)。这样应该是可以接近软件模拟速度的。
另外DMA是用来让CPU干点其他的活的,可以让CPU的响应速度更快(因为其他任务由DMA处理,CPU不参与),DMA设计的时候就没有说一定要比模拟更快
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:234
  • 最近打卡:2026-04-30 01:26:24
已绑定手机

22

主题

401

回帖

1816

积分

金牌会员

DIY玩家

积分
1816
发表于 2026-4-11 11:46:56 | 显示全部楼层
通常 GPIO 可以模拟
这效率可能低些
真正的学徒往往怀着大师的心
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2026-04-30 10:00:57
已绑定手机

1

主题

6

回帖

27

积分

新手上路

积分
27
发表于 2026-4-11 13:25:29 | 显示全部楼层
王*** 发表于 2026-4-11 11:34
这是很正常的事情,DMA内因为设置了数据建立等待时间和数据保持时间,所以肯定比软件模拟要慢一些的,你可 ...

谢谢回复
回复

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:6
  • 最近打卡:2026-04-30 10:00:57
已绑定手机

1

主题

6

回帖

27

积分

新手上路

积分
27
发表于 2026-4-11 13:25:54 | 显示全部楼层
狂热*** 发表于 2026-4-11 11:46
通常 GPIO 可以模拟
这效率可能低些

感谢回复
回复

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2026-5-1 10:19 , Processed in 0.116990 second(s), 68 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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