Arduino C语言 240*240 TFT 显示屏绘制表盘手把手教学,粗暴易懂

9 篇文章 10 订阅
  1. 首先要确定表盘上时针分针秒针的位置。
  2. 所需变量
  1. 原点坐标
  2. 时针终点坐标 (由原点坐标和终点坐标 两点确定一条直线)分针秒针同理
  3. 时针每移动一次的角度 时针360/12=30度 分针/秒针 360/60=6度
  4. 当前时间值
  1. 综上可得核心函数绘制表针

len:时针的长度 其他针同理
value:当前 是第几个小时
interval: 时钟移动一次 30度
color:颜色

void DrawClockHand(int len, int value, int _interval, uint32_t color)
{
  float x, y;
  x = len * cos(value * _interval * pi / 180 - pi / 2) + 120;
  y = len * sin(value * _interval * pi / 180 - pi / 2) + 120;
  tft.drawLine(120, 120, x, y, color);
}

使用示例:

#define HLen 35
#define MLen 65
#define SLen 85

#define HInterval 30
#define OInterval 6

_hour = hour();
DrawClockHand(HLen, _hour, HInterval, tft.color565(0, 0, 255));

清除上一步函数

void ClearDrawClockHand(int len, int value, int _interval)
{
  float x, y;
  x = len * cos(value * _interval * pi / 180 - pi / 2) + 120;
  y = len * sin(value * _interval * pi / 180 - pi / 2) + 120;
  tft.drawLine(120, 120, x, y, tft.color565(0, 0, 0));
}

主函数思路:定时更新数据,刷新针的移动,移动前擦去上一次的位置。

void loop()
{
  static unsigned long time1 = 0;
  static unsigned long time2 = 0;

  if (millis() - time2 > 20000)
  {
    time2 = millis();
    TJpgDec.drawJpg(0, 0, jpgTime, sizeof(jpgTime));
  }

  if (millis() - time1 > 1000)
  {
    time1 = millis();

    int tmpHour = hour();
    int tmpMin = minute();
    int tmpSec = second();

    if (tmpHour > 12)
    {
      tmpHour = tmpHour - 12;
    }

    if (_hour != tmpHour)
    {
      ClearDrawClockHand(HLen, _hour, HInterval);
      _hour = tmpHour;

    }

    if (_min != _min)
    {
      ClearDrawClockHand(MLen, _min, OInterval);
      _min = _min;
    }

    if (_sec != tmpSec)
    {
      ClearDrawClockHand(SLen, _sec, OInterval);
      _sec = tmpSec;
    }

    DrawClockHand(HLen, _hour, HInterval, tft.color565(0, 0, 255));
    DrawClockHand(MLen, _min, OInterval, tft.color565(0, 0, 255));
    DrawClockHand(SLen, _sec, OInterval, tft.color565(255, 255, 255));
    tft.drawCircle(120,120,8,tft.color565(255, 255, 255));
  }

演示图片
在这里插入图片描述
素材
在这里插入图片描述

  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
对于驱动 TFT 显示屏的 FPGA 程序,我可以给你一些基本的指导。首先,你需要了解你使用的 TFT 显示屏的接口类型和分辨率。常见的接口类型包括 SPI、I2C 和并行接口。 然后,你需要编写 FPGA 的驱动程序来控制 TFT 显示屏。这通常涉及到以下几个步骤: 1. 配置 FPGA 的 GPIO 接口,用于与 TFT 显示屏进行通信。根据显示屏的接口类型,你可能需要配置 SPI、I2C 或者并行总线的引脚。 2. 实现对 TFT 显示屏的初始化过程。这包括向显示屏发送初始化命令和参数,例如设置分辨率、像素格式等。 3. 编写显示图像数据的逻辑。这通常涉及到将图像数据从 FPGA 的存储器传输到显示屏的帧缓冲区。对于并行接口,你可能需要使用 DMA 控制器来实现高速数据传输。 4. 控制 TFT 显示屏的刷新过程。这涉及到根据图像数据的变化更新显示屏上的像素。 在实现驱动程序时,你需要参考 TFT 显示屏的数据手册以及 FPGA 开发板的引脚映射表。此外,你可能还需要使用 FPGA 开发工具(如 Quartus、Vivado 等)来进行硬件描述语言(如 Verilog 或 VHDL)的编写和综合。 需要注意的是,具体的驱动程序实现会因不同的 TFT 显示屏和 FPGA 平台而有所差异。因此,在开始开发之前,最好先详细研究你使用的 TFT 显示屏和 FPGA 开发板的相关文档,并参考类似的开源项目或教程以获得更多的指导。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ou.cs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值