迪文科技论坛

 找回密码
 立即注册
搜索
查看: 79|回复: 0

【开源】基于T5L带幸运数字功能的温湿度显示仪

[复制链接]

1

主题

14

回帖

327

积分

中级会员

Rank: 3Rank: 3

积分
327
发表于 7 天前 | 显示全部楼层 |阅读模式
本帖最后由 hicccp 于 2025-6-3 22:03 编辑

使用EKT043B实现的带幸运数字功能的温湿度显示仪,能够自动显示温度和湿度数据,点击幸运按钮图标能够随机生成幸运数字,点击底部卡通图标能够切换背景显示主题;

1.设备方案
显示屏使用EKT043B开发板,800*480的分辨率,工程文件CFG配置为竖屏480*800使用;
通过DHT11数字温湿度传感器采集温度湿度数据;
主控为T5L,通过写C51驱动OS核读写DGUS接口实现功能逻辑;

2.功能简介
最上面为温度和湿度数据,2S更新一次温湿度数据;
点击中间的幸运数字图标,会更换一次幸运数字,数字为三位数,默认开机幸运数为666;
点击底部的卡通图标,会切换显示主题,已预置6种主题;


3.实现逻辑
首先确定基本的功能框架,即按指定的周期获取数据或者执行相关功能;
可以基于几个基本硬件定时器实现一个自动软定时器,这里使用T0,在此基础上实现8个软件定时器,软件定时器支持一次性和自动重载2种模式;
DHT11为单总线,微秒延时需要精准,这里的软件阻塞延时函数已通过逻辑分析仪测量IO验证,如果改了优化参数,需要重新调试;
调试过程中需要打印一些信息,故另外实现一个基于串口打印的printf函数;
幸运数字的生成需要依赖随机数,此处可以粗略使用时间戳来做随机数种子,由于没有使用硬件时钟,故基于硬件定时器生成一个毫秒时间戳,基本满足要求;
主函数和3个页面子功能程序如下:
  1. void main(void)
  2. {
  3.     uart_init_printf(115200); // uart initialize to printf with uart3
  4.     timer_hw_init(TIMER_HW_0); // timer hardware initialize
  5.     timer_soft_init(); // timer soft initialize
  6.     interrupt_all_enable(); // enable all interrupt
  7.     printf("APP Version:%s & Build:%s %s\r\n",
  8.         APP_VER, __TIME__, __DATE__); // print version information
  9.     timer_soft_start(TIMER0, 20, TIMER_AUTO); // start TIMER0 in TIMER_AUTO mode
  10.     timer_soft_start(TIMER1, 2000, TIMER_AUTO); // start TIMER1 in TIMER_AUTO mode
  11.     timer_soft_start(TIMER2, 1000, TIMER_AUTO); // start TIMER2 in TIMER_AUTO mode

  12.     while (1)
  13.     {
  14.         if (timer_soft_check(TIMER0)) // check whether timeout
  15.         {
  16.             ui_execute(); // execute ui framework
  17.         }

  18.         if (timer_soft_check(TIMER1)) // check whether timeout
  19.         {
  20.             dht11_read_repet(); // read dht11 sensor data
  21.         }

  22.         if (timer_soft_check(TIMER2)) // check whether timeout
  23.         {
  24.             // printf("systime.ts:%ld\r\n", systime.ts); // print system now timesample
  25.         }
  26.     }
  27. }
复制代码
  1. void display_humi_temp(void)
  2. {
  3.     dgus_write_vp(VP_HUMI, (u8 *)&dht11_val.hum, 1);
  4.     dgus_write_vp(VP_TEMP, (u8 *)&dht11_val.temp, 1);
  5. }

  6. void display_lucknum(void)
  7. {
  8.     u16 lucknum = 0;
  9.     u16 button = KEY0;

  10.     dgus_read_vp(VP_BUTTON, (u8 *)&button, 1);
  11.     if (KEY2 == button)
  12.     {
  13.         button = KEY0;
  14.         dgus_write_vp(VP_BUTTON, (u8 *)&button, 1);

  15.         srand(systime.ts);
  16.         lucknum = rand() % 1000;
  17.         dgus_write_vp(VP_LUCKNUM, (u8 *)&lucknum, 1);
  18.     }
  19. }

  20. void display_jump_page(void)
  21. {
  22.     static u16 page_num = 0;
  23.     u16 button = KEY0;

  24.     dgus_read_vp(VP_BUTTON, (u8 *)&button, 1);
  25.     if (KEY1 == button)
  26.     {
  27.         button = KEY0;
  28.         dgus_write_vp(VP_BUTTON, (u8 *)&button, 1);

  29.         page_num++;
  30.         if (page_num > 5)
  31.         {
  32.             page_num = 0;
  33.         }

  34.         page_jump(page_num);
  35.     }
  36. }
复制代码
4.其他说明
其他实现细节参考工程文件;
烧录的bin文件在代码工程目录的output目录;
代码使用的开源许可证为GPL V3.0;

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-7 06:42 , Processed in 0.036779 second(s), 24 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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