【开源】迪文82 83指令 STM32单片机 FreeRtos,小白速看 ,密码
这个贴子的代码,非常适合小白第一次使用迪文屏,用于单片机通信主要写了stm32和迪文原生态8283指令数据接口框架,进行通信。用了开机密码做个实验演示屏幕用的是DMG80480C043_01WTC视频效果如下:https://v.youku.com/v_show/id_XNjE4MjA4MDY0MA==.html
迪文,用的是串口2,不需要编写屏幕代码,稍微搞下GUI界面就行了单片机用的是STM32F103VET6
先打开comm.c 这个文件,这个文件代码定义了,操作迪文屏幕内存代码
//主要是写屏幕内存u8 DWIN_WriteLen(u16 addr,u8 *data,u8 len){ u8ret=1; EventBits_tEventValue; u16waitTick=20; xEventGroupClearBits(EventGroupHandler,EVENTBIT_DwinGetData); DWIN_RECSTA=0;
DWIN_SendByte(0x5a); DWIN_SendByte(0xa5); DWIN_SendByte(len*2+2+1); DWIN_SendByte(0x82); DWIN_SendByte(addr>>8); DWIN_SendByte(addr&0xff);
for(inti=0;i<len;i++) { DWIN_SendByte(data); DWIN_SendByte(data); } wait_ReadWriteBit|=0x01; if(waitTick) { ret=0; EventValue=xEventGroupWaitBits((EventGroupHandle_t )EventGroupHandler, (EventBits_t )EVENTBIT_DwinGetData, (BaseType_t )pdFALSE, (BaseType_t )pdFALSE, (TickType_t )waitTick); if(EventValue&EVENTBIT_DwinGetData) { if(DWIN_RecBuff==0x5a && DWIN_RecBuff==0xa5 && DWIN_RecBuff==0x82&& DWIN_RecBuff==0x4f && DWIN_RecBuff==0x4b) { xEventGroupClearBits(EventGroupHandler,EVENTBIT_DwinGetData); ret=1; } DWIN_RECSTA=0; } } wait_ReadWriteBit&=~0x01;
returnret;}
//主要是写屏幕内存,单字u8 DWIN_WriteOne(u16 addr,u16 data){ u8da;
da=data>>8; da=data&0xff;
returnDWIN_WriteLen(addr,da,1);}
//主要是读屏幕内存u8 DWIN_ReadLen(u16 addr,u8 *data,u8 len){ u8ret=1; EventBits_tEventValue; u16waitTick=40; xEventGroupClearBits(EventGroupHandler,EVENTBIT_DwinGetData); DWIN_RECSTA=0;
DWIN_SendByte(0x5a); DWIN_SendByte(0xa5); DWIN_SendByte(4); DWIN_SendByte(0x83); DWIN_SendByte(addr>>8); DWIN_SendByte(addr&0xff); DWIN_SendByte(len);
wait_ReadWriteBit|=0x02; if(waitTick) { ret=0; EventValue=xEventGroupWaitBits((EventGroupHandle_t )EventGroupHandler, (EventBits_t )EVENTBIT_DwinGetData, (BaseType_t )pdFALSE, (BaseType_t )pdFALSE, (TickType_t )waitTick); if(EventValue&EVENTBIT_DwinGetData) { if(DWIN_RecBuff==0x5a&& DWIN_RecBuff==0xa5 && DWIN_RecBuff==0x83 && DWIN_RecBuff==(addr>>8)&& DWIN_RecBuff==(addr&0xff)&& DWIN_RecBuff==len) { memcpy(data,&DWIN_RecBuff,len*2); ret=1; xEventGroupClearBits(EventGroupHandler,EVENTBIT_DwinGetData); } DWIN_RECSTA=0; } } wait_ReadWriteBit&=~0x02;
returnret;}
//清除屏幕内存void Clear_DWIN_Memory(u8 len,u16 addr){ DWIN_SendByte(0x5a); DWIN_SendByte(0xa5); DWIN_SendByte(len*2+2+1); DWIN_SendByte(0x82); DWIN_SendByte(addr>>8); DWIN_SendByte(addr&0xff);
for(inti=0;i<len;i++) { DWIN_SendByte(0); DWIN_SendByte(0); } }
//用于显示文本的内容void DWIN_DispString(u16 addr,char *data){ u8sendstr; u8len=0; memset(sendstr,0,sizeof(sendstr));
strcpy((char*)sendstr,data); len=strlen(data); if(len/2) { len/=2; len++; } else { len/=2; }
DWIN_WriteLen(addr,sendstr,len);}//用于切换界面void DMT_ChagePage(u16 page){ u8Charr[]={0x5a,0x01,page>>8,page&0xff}; DWIN_WriteLen(0x84,Charr,2);}
//用于处理接收到的数据void DWIN_GetDataHandle(void){ EventBits_tEventValue; if(wait_ReadWriteBit) return;
EventValue=xEventGroupWaitBits((EventGroupHandle_t )EventGroupHandler, (EventBits_t )EVENTBIT_DwinGetData, (BaseType_t )pdTRUE, (BaseType_t )pdFALSE, (TickType_t )0);
if(EventValue&EVENTBIT_DwinGetData) { if(DWIN_RecBuff==0x5a&& DWIN_RecBuff==0xa5 && DWIN_RecBuff==0x83) { DWIN_RECHandle(DWIN_RecBuff<<8|DWIN_RecBuff, &DWIN_RecBuff,DWIN_RecBuff); } DWIN_RECSTA=0; }}
再看到实际的页面dwin_data_handle.c 这个文件,主要是处理接收的屏幕数据typedef enum{ addr_inputWinScreat=0x1039,}touch_cmd_addr;
#define WinScreat "12345678"
void ScreatCmp(u16 addr,u8 *data,u16 len){ charsctbuf;
data+=2; memset(sctbuf,0,sizeof(sctbuf)); for(inti=0;i<(len-1)*2;i++) { if(data==0xff&& data==0xff) break; sctbuf=data; }
if(strlen(WinScreat)==strlen(sctbuf)&& !memcmp(WinScreat,sctbuf,strlen(sctbuf))) { DMT_ChagePage(1); } else { DWIN_DispString(0x1007,"密码错误\r\n密码:12345678"); }}
//len是字长度void DWIN_RECHandle(u16 addr,u8 *data,u16len){ switch(addr) { caseaddr_inputWinScreat: ScreatCmp(addr,data,len); break;
}}
其它,关于代码如何去实现的,大家可以下载代码,参考下。
大佬,能教教我吗,我是小白,在KEIL中创建软件工程具体怎么做啊,不是很懂
tang12 发表于 2024-7-6 10:32
大佬,能教教我吗,我是小白,在KEIL中创建软件工程具体怎么做啊,不是很懂
...
一般不用创建工程,比如你要你迪文的keil工程,你找一个迪文的KEIL T5L工程,作为基本版本,复制整个工程,重命名,在上面修改就好了。 是我直接再F:\极光蔚蓝这几个文件我在哪可以进行编码啊?:'( 你好,请问一下,数据变量要输入对应的十六进制,代码如何实现啊:dizzy::dizzy: smshu 发表于 2024-7-6 17:13
你好,请问一下,数据变量要输入对应的十六进制,代码如何实现啊 ...
迪文原生支持16进制变量输入没有,自已做一个键盘输入界面,0~f 数字,在这个输入界面上,用T5L做一个回显文本框,实时显示,点击确定之后,把变量转换为你需要的16进制,放到你所需要的内存里面。也不难,自已写个实现。 tang12 发表于 2024-7-6 11:02
是我直接再这几个文件我在哪可以进行编码啊?
KEIL编译,最好不要有中文路径 请问那个这个用到modbus通信了吗?这个stm单片机需要设置什么吗? 下载资料公用号 发表于 2024-7-29 11:27
请问那个这个用到modbus通信了吗?这个stm单片机需要设置什么吗?
设置串口波特率,设置串口接收 请问这个项目大概的意思是屏幕输入密码 数据通过串口传给stm32,stm32判断密码是否正确,如果正确就执行切换页面?切换到收音机那个页面吗
页:
[1]
2