迪文科技论坛

 找回密码
 立即注册
搜索
查看: 744|回复: 19

【提问】read_Dgusii_Vp不能返回键值

[复制链接]

4

主题

23

回帖

115

积分

注册会员

Rank: 2

积分
115
发表于 2025-8-25 19:21:49 | 显示全部楼层 |阅读模式
想用read_dgusii_vp()读取触控键值然后在屏幕上显示相对应的键值,但烧录程序后发现按下相应按键后没有反应
回复

使用道具 举报

4

主题

23

回帖

115

积分

注册会员

Rank: 2

积分
115
 楼主| 发表于 2025-8-25 19:31:06 | 显示全部楼层
这是主函数
#include "t5los8051.h"
#include "sys.h"
#include "stdlib.h"
#include "uart.h"
#include  "led.h"
#include "save_data_dgus.h"
#include  "i2c.h"

#define Dgus_Send_Page_Time_Set 0x7000
u16 Send_Page_Time_Count = 0, Pop_Time_Count = 0xFFFF;

u8   use_sed[4]={0x12,0x13,0x23,0x1};
extern u8   Mode;

void main(){
        INIT_CPU();
        PORT_Init();
               
        T0_Init();
//        T1_Init();
        T2_Init();
//        WDT_ON();       
        uart_init();
   ws2812_writ_byte(8);
        data_save_init();
        Uart2_Tx_write2buff(0x78);       
        uart_send_str(4,use_sed,4);
        Write_Dgus(0x0084,0x01);
       
        while(1){
                Uart_Handle_all();
    Read_0xF00();
                data_change_sava();
                Read_Dgusii_Vp(0x1000,(u8*)&Mode,1);
                if(Mode!=0)
                {
                        Write_Dgusii_Vp(0x1100,(u8*)&Mode,1);
                        Mode = 0;
                        Write_Dgusii_Vp(0x1000,(u8*)&Mode,1);
                }
                 Clock();
        }
}
回复

使用道具 举报

0

主题

481

回帖

2895

积分

金牌会员

Rank: 6Rank: 6

积分
2895
发表于 2025-8-26 08:40:27 | 显示全部楼层
mode要定义为u16的,一个地址是16位数据,然后这个函数有没有原型呢?
回复

使用道具 举报

4

主题

23

回帖

115

积分

注册会员

Rank: 2

积分
115
 楼主| 发表于 2025-8-26 13:14:16 | 显示全部楼层
紫狐 发表于 2025-8-26 08:40
mode要定义为u16的,一个地址是16位数据,然后这个函数有没有原型呢?

函数是我用c8283 1.8程序改的,刚换了u16也没有效果
回复

使用道具 举报

4

主题

23

回帖

115

积分

注册会员

Rank: 2

积分
115
 楼主| 发表于 2025-8-26 13:15:30 | 显示全部楼层
紫狐 发表于 2025-8-26 08:40
mode要定义为u16的,一个地址是16位数据,然后这个函数有没有原型呢?

这是read程序:
void Read_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 = 0xAF;
        while(APP_ACK == 0);
        while(len > 0){
                APP_EN = 1;
                while(APP_EN == 1);
                if((i==0)&&(len>0)){
                        *buf++ = DATA3;
                        *buf++ = DATA2;
                        i = 1;
                        len--;
                }
                if((i == 1) && (len > 0)){
                        *buf++ = DATA1;
                        *buf++ = DATA0;
                        i = 0;
                        len--;
                }
        }
        RAMMODE=0x00;
}
回复

使用道具 举报

0

主题

481

回帖

2895

积分

金牌会员

Rank: 6Rank: 6

积分
2895
发表于 2025-8-26 14:51:20 | 显示全部楼层
void read_dgus_vp(u16 addr, u8 *buf, u16 len)
{
        u16 OS_addr = 0;
        u16 OS_addr_offset = 0;
        u16 OS_len = 0, OS_len_offset = 0;
        u32 LenLimit;
       
        if(0==len)
                return;
        LenLimit = 0xffffU - addr + 1;
        if(LenLimit < len)
        {
                len = LenLimit;
        }
        OS_addr = addr >> 1;
        OS_addr_offset = addr & 0x01;
#ifdef INTVPACTION       
        EA = 0;
#endif
        ADR_H = 0;
        ADR_M = (u8)(OS_addr >> 8);
        ADR_L = (u8)OS_addr;
        ADR_INC = 1;       
        RAMMODE = 0xAF;
        while (!APP_ACK);                       
        if (OS_addr_offset)
        {
                APP_EN = 1;
                while (APP_EN);
                *buf++ = DATA1;
                *buf++ = DATA0;
                len--;
        }
        OS_len = len >> 1;
        OS_len_offset = len & 0x01;
        while (OS_len--)
        {
                APP_EN = 1;
                while (APP_EN);
                *buf++ = DATA3;
                *buf++ = DATA2;
                *buf++ = DATA1;
                *buf++ = DATA0;
        }
        if (OS_len_offset)
        {
                APP_EN = 1;
                while (APP_EN);
                *buf++ = DATA3;
                *buf++ = DATA2;
        }
        RAMMODE = 0x00;
#ifdef INTVPACTION       
        EA = 1;
#endif
}
用这个函数试试,读写函数都要有原型,别是注释了哦
回复

使用道具 举报

4

主题

23

回帖

115

积分

注册会员

Rank: 2

积分
115
 楼主| 发表于 2025-8-26 16:36:32 | 显示全部楼层
紫狐 发表于 2025-8-26 14:51
void read_dgus_vp(u16 addr, u8 *buf, u16 len)
{
        u16 OS_addr = 0;

还是识别不到
回复

使用道具 举报

0

主题

481

回帖

2895

积分

金牌会员

Rank: 6Rank: 6

积分
2895
发表于 2025-8-26 18:58:29 | 显示全部楼层
不清零,0x1000和0x1100都显示出来,控件也看一下,烧录程序,编译生成的日期都确认,还要确认烧到屏里了。
回复

使用道具 举报

4

主题

23

回帖

115

积分

注册会员

Rank: 2

积分
115
 楼主| 发表于 2025-8-26 19:27:42 | 显示全部楼层
本帖最后由 ASD12138 于 2025-8-26 19:38 编辑
紫狐 发表于 2025-8-26 18:58
不清零,0x1000和0x1100都显示出来,控件也看一下,烧录程序,编译生成的日期都确认,还要确认烧到屏里了。 ...

后两项可以确认没有问题,前一项是指直接显示地址内的东西吗
回复

使用道具 举报

0

主题

481

回帖

2895

积分

金牌会员

Rank: 6Rank: 6

积分
2895
发表于 2025-8-26 19:49:45 | 显示全部楼层
嗯啦,数据变量控件
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-4-14 23:14 , Processed in 0.040994 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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