迪文科技论坛

 找回密码
 立即注册
搜索
查看: 787|回复: 2

【开源】COF案例分享:远程控灯

[复制链接]

570

主题

168

回帖

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
12207
发表于 2022-4-24 13:49:44 | 显示全部楼层 |阅读模式
——文档转载自电子发烧友

一、页面自动切换测试程序


1.选择的屏型号是:DMG85480F050_01WTC, 分辨率为854x480。页面背景图命名范围:01.jpg—10.jpg。


    ......


2.将做好的图片加载到DWIN DGUS软件中,设置好分辨率:854x480 ,界面程序就做好了。点生成命令,就可以生成安装文件。


3.接下来需要将图片打包成*.ICL文件 。切换到欢迎使用版块,启动DWIN ICL 生成工具,选择所有用到的图片,然后启动转换。
注意生成的icl文件名一定要是23开头。我这里是23_BJ.icl 这是界面图片制作部分。





4.接下来需要实现界面的切换程序编写,这个需要在KEIL中完成。参考了群资料里的例程。

#include "t5los8051.h"
#include "sys.h"
int main(void)
{  
       u8 cmd[4]={0x5A,0x01,0x00,0x00};//5A01 0000 切换到0000界面
    INIT_CPU();
    T2_Init();
    EA=1;
   while(1)
    {  
        P1_0=!P1_0;//P1.0 循环取反,0V / 3.3V
        IF(cmd[3]<10)
           {
              cmd[3]++;
              }
        else{cmd[3]=0;}
        write_dgusii_vp(0x0084,cmd,4);// 界面0-10 之间循环切换
        delay_ms(1000);
    }
}


源码很简单,就是程序核和界面核之间进行通讯,发送界面切换的命令:0x5A,0x01,0x00,0x000x5A 0x01是命令字,表示界面切换命令,而后面的0x00,0x00表示要切换到的界面编号,对应界面中的每个配景图片的编号,编译生成T5L51.hex文件。然后,需要用DownLoadFor8051程序将T5L.hex转成T5L51.bin文件。将这些文件都放到DWIN_SET文件夹中,拷贝到SD卡中。上手操作成功。




二、远程控灯

下面我来分享一下,通过迪文DMG85480F050-01ESP8266 WIFI模块实现远程控制3LED灯的小例程。先上个图:

   


迪文屏的显示控件和触控控件很丰富也挺有特点的,认真学习指南,并且找个官方例程仔细研究一番就能掌握,更多是通过图片切换产生动态效果。迪文屏的一个特点是,包含了GUI和OS两个核,GUI核用来做显控, OS核做控制。Adc最大为16位,尝试用光敏电阻实现了屏的亮度自动控制,效果还是可以的。就是在开启待机亮度的时候遇到点麻烦,不过厂家的技术支持很到位。GUI的部分主要做显示控制,51核部分,主要是通过串口实现和esp8266的通信,实现了I/O口的控制3LED灯,esp8266中已经编好了程序,自动连接wifi以及贝壳物联平台,实现时间获取和平台下推数据的接收。

51核代码:

1.  开关的触摸控制

每个开关图标上覆盖触控键,并设置相同的变量地址1000分别设置键值0x00010x0002, 0x0003,程序循环中查询0x1000的值,判断是哪个触控键被触碰。



2.  开关和灯的状态改变

当检测到第一个开关被触碰时,先读取该开关的状态,sys_read_vp(0x3100,(u8*)&s_kg,1); 然后翻转开关的状态,在写入到开关的状态变量中和灯的状态变量中。同时控制I/O口的电平。
if(s_kg==1)
              {
               s_kg=0;
               sys_write_vp(0x3100,(u8*)&s_kg,1);
              sys_write_vp(0x3103,(u8*)&s_kg,1);
              P1_0=0;
                  }
    While1
{
sys_read_vp(0x1000,(u8*)&g_ss,1);
       switch(g_ss)
       {
        case 1:
              sys_read_vp(0x3100,(u8*)&s_kg,1);
              if(s_kg==1)
              {
               s_kg=0;
               sys_write_vp(0x3100,(u8*)&s_kg,1);
              sys_write_vp(0x3103,(u8*)&s_kg,1);
              P1_0=0;
              }
              else
              {
              s_kg=1;
              sys_write_vp(0x3100,(u8*)&s_kg,1);
              sys_write_vp(0x3103,(u8*)&s_kg,1);
              P1_0=1;
              }
              g_ss=0;
        sys_write_vp(0x1000,(u8*)&g_ss,1);
              break;
        case 2:
                  sys_read_vp(0x3101,(u8*)&s_kg,1);
              if(s_kg==1)
              {
               s_kg=0;
               sys_write_vp(0x3101,(u8*)&s_kg,1);
              sys_write_vp(0x3104,(u8*)&s_kg,1);
              P1_1=0;
              }
              else
              {
              s_kg=1;
              sys_write_vp(0x3101,(u8*)&s_kg,1);
              sys_write_vp(0x3104,(u8*)&s_kg,1);
              P1_1=1;
              }
              g_ss=0;
        sys_write_vp(0x1000,(u8*)&g_ss,1);
              break;
        case 3:
              sys_read_vp(0x3102,(u8*)&s_kg,1);
              if(s_kg==1)
              {
               s_kg=0;
               sys_write_vp(0x3102,(u8*)&s_kg,1);
              sys_write_vp(0x3105,(u8*)&s_kg,1);
              P1_2=0;
              }
              else
              {
              s_kg=1;
              sys_write_vp(0x3102,(u8*)&s_kg,1);
              sys_write_vp(0x3105,(u8*)&s_kg,1);
              P1_2=1;   
              }
              g_ss=0;
        sys_write_vp(0x1000,(u8*)&g_ss,1);
               break;
        case 16:
              sys_read_vp(0x2108,(u8*)&s_kg,1);
              if(s_kg==1)
              {
               s_kg=0;
               sys_write_vp(0x2108,(u8*)&s_kg,1);
               auto_brt=0;
              }
              else
              {
              s_kg=1;
              sys_write_vp(0x2108,(u8*)&s_kg,1);

              auto_brt=1;  
              }
              g_ss=0;
        sys_write_vp(0x1000,(u8*)&g_ss,1);
              break;
        }



3.  远程控制的实现

这部分其实就是串口通信数据的解析,ESP8266已经做好了程序,每20s会通过串口发送时间的数据,格式如下:
                {"M":"time","T":"2022-03-17-410:16:34"}
平台下发的控制数据如下:
                                                      {"M":"say","ID":"U1","NAME":"BIGIOT_SERVER","C":"play1","T":"1647483956"}
                                                      {"M":"say","ID":"U1","NAME":"BIGIOT_SERVER","C":"stop1","T":"1647483956"}     
其中:play1stop1就是平台下发的命令,通过程序解析以后,发送到开关和灯的状态变量地址就实现了界面的变化和I/O控制。

str=strstr(uart2_buf,"\"C\":\"play1\",\"T\"");
              if(str!=NULL && uart2_buf[0]=='{')
              {
                  s_kg=1;
              sys_write_vp(0x3100,(u8*)&s_kg,1);
              sys_write_vp(0x3103,(u8*)&s_kg,1);
              P1_0=1;
              }
                  str=strstr(uart2_buf,"\"C\":\"play2\",\"T\"");
              if(str!=NULL && uart2_buf[0]=='{')
              {
                 s_kg=1;
              sys_write_vp(0x3101,(u8*)&s_kg,1);
              sys_write_vp(0x3104,(u8*)&s_kg,1);
              P1_1=1;   
              }

  





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0

主题

1

回帖

15

积分

新手上路

Rank: 1

积分
15
发表于 2023-2-2 16:36:33 | 显示全部楼层
您好 方便分享一下工程学习一下吗
回复

使用道具 举报

2

主题

679

回帖

1万

积分

论坛元老

Rank: 8Rank: 8

积分
12459
发表于 2023-2-2 16:45:24 | 显示全部楼层
1031793782 发表于 2023-2-2 16:36
您好 方便分享一下工程学习一下吗

您好,这是原链接https://bbs.elecfans.com/jishu_2269432_1_1.html
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-27 00:17 , Processed in 0.082145 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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