请选择 进入手机版 | 继续访问电脑版

迪文科技论坛

 找回密码
 立即注册
搜索
热搜: T5L 视频屏 DGUS OS
查看: 292|回复: 2

【提问】T5L屏文本显示输入框刷汉字存在问题

[复制链接]

4

主题

10

帖子

57

积分

注册会员

Rank: 2

积分
57
发表于 2021-2-22 16:53:22 | 显示全部楼层 |阅读模式
用C51程序刷DGUS变量显示汉字时(文本变量),偶尔会出现半个字(单字乱码或缺失),下一次刷新恢复正常,这个问题怎么解决?尝试下下面写DGUS变量函数中关闭全局中断,也不能解决问题
//---------------------------------------
//写DGUS变量数据 addr=DGUS变量地址  *buf=写入数据指针  len=写入数据字长度
//---------------------------------------
        void write_dgusii_vp(unsigned int addr,unsigned char *buf,unsigned int len)
        {   
                unsigned char i;
                i=(unsigned char)(addr&0x01);
                addr=addr/2;
                ADR_H=0x00;
                ADR_M=(unsigned char)(addr>>8);
                ADR_L=(unsigned char)(addr);   
                ADR_INC=0x01;
                RAMMODE=0x8F;
                while(APP_ACK==0);
                if(i && len>0)
                {        
                        RAMMODE=0x83;        
                        DATA1=*buf++;               
                        DATA0=*buf++;        
                        APP_EN=1;               
                        len--;
                }
                RAMMODE=0x8F;
                while(len>=2)
                {        
                        DATA3=*buf++;               
                        DATA2=*buf++;
                        DATA1=*buf++;               
                        DATA0=*buf++;
                        APP_EN=1;               
                        len=len-2;
                }
                if(len)
                {               
                        RAMMODE=0x8C;
                        DATA3=*buf++;               
                        DATA2=*buf++;
                        APP_EN=1;
                }
                RAMMODE=0x00;
        }

回复

使用道具 举报

0

主题

102

帖子

703

积分

高级会员

Rank: 4

积分
703
发表于 2021-2-22 17:47:29 | 显示全部楼层
1、文本变量写数据时候,是奇数后面补一个0x'FF,保证是偶数,这个主要是82指令前面如果是长度是偶数就需要补一个0xff.

2、u16 Read_Dgus(u16 Dgus_Addr)
{                              u16 R_Dgus=0;
                        EA = 0;
                        ADR_H = 0x00;
                        ADR_M = (u8)((Dgus_Addr/2)>>8);
                        ADR_L = (u8)(Dgus_Addr/2);
                        RAMMODE = 0xAF;                //读操作
                        while(!APP_ACK);
                        APP_EN = 1;
                        while(APP_EN);
                        if(Dgus_Addr%2)        R_Dgus = (DATA1<<8)+DATA0;
                        else   R_Dgus=(DATA3<<8)+DATA2;
                        RAMMODE = 0;
                        EA = 1;
                        return   R_Dgus;               
}
/****************************************************************************/
void Write_Dgus(u16 Dgus_Addr,u16 Val)
{           EA = 0;
                        ADR_H = 0x00;
                        ADR_M = (u8)((Dgus_Addr/2)>>8);
                        ADR_L = (u8)(Dgus_Addr/2);
                        RAMMODE = 0xAF;                //读操作
                        while(!APP_ACK);
                        APP_EN = 1;
                        while(APP_EN);
                        RAMMODE = 0;
                           ADR_M = (u8)((Dgus_Addr/2)>>8);
                        ADR_L = (u8)(Dgus_Addr/2);
                        RAMMODE = 0x8F;                //写操作
                    while(!APP_ACK);
                        if(Dgus_Addr%2){DATA1=(u8)(Val>>8); DATA0=(u8)(Val); }
                        else { DATA3 =(u8)(Val>>8);        DATA2 =(u8)(Val);}
                    APP_EN = 1;
                        while(APP_EN);
                        RAMMODE = 0;
                        EA = 1;
}
回复

使用道具 举报

4

主题

10

帖子

57

积分

注册会员

Rank: 2

积分
57
 楼主| 发表于 2021-2-23 13:08:03 | 显示全部楼层
本帖最后由 yongel 于 2021-2-23 13:09 编辑

应该不是奇偶数的问题,刷同一串字符,也会出现缺字的情况,怀疑是在C51程序写DGUS变量时,还未完全写入(只写入了一部分),OS程序已将DGUS寄存器内的数据发到了显示缓存,导致后面的字符不显示,等下一次写入DGUS变量时,显示又正常了,会不会是这个原因呢?
下面是奇数时处理方法(结尾增加了一个空格):
if(i%2)//奇数
{
     DGUS_buf[i++]=' ';//空格
}
j=i/2;
write_dgusii_vp(addr,DGUS_buf,j);
回复

使用道具 举报

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

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2021-3-8 19:46 , Processed in 0.015715 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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