亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

用 Arduino Nano 制作可靠的 LCD 秒表 —— 无需电位器

元件与材料

元件数量
面包板(通用)1
Arduino Nano R31
Adafruit 标准 LCD - 16x2 白字蓝底1
SparkFun 12mm 按钮开关3
10kΩ 电阻5
221Ω 电阻1
跳线(通用)26

项目简介

大家好!这是一个适合初学者的 LCD 入门项目。本项目使用 Arduino Nano 和 QUAPASS 1602A 16x2 LCD 显示屏,实现一个可计时小时、分钟、秒的秒表,并支持调节 LCD 亮度。

通过少量代码修改,理论上也可显示百分之一秒,但受限于 LCD 刷新速度,实际效果可能不佳。

我已对计时逻辑进行微调,使其误差控制在约 15% 以内(实际运行 10 分钟,秒表显示约 10 分 2 秒)。若你修改了 stopwatch 子程序中的起始计时逻辑,也需要同步调整延时参数,以补偿 Arduino 代码执行时间带来的误差。

步骤 1:硬件连接

请参考原理图,将 Arduino 与 LCD、按钮、电阻正确连接。LCD 的对比度调节引脚(通常为 V0)直接通过 PWM 引脚(本项目为 D6)控制亮度,无需电位器。

步骤 2:上传代码

将下方完整代码复制到 Arduino IDE,连接 Arduino Nano 通过 USB 供电,点击上传即可运行。

步骤 3:开始使用

三个按钮分别对应:启动/暂停、停止/继续、复位。享受制作的乐趣吧!如有疑问欢迎留言交流。

核心代码

/* 简易 LCD 秒表:支持启动、停止、复位、圈速 */
#include <LiquidCrystal.h>

// LCD 接线:RS=12, E=11, D4=5, D5=4, D6=3, D7=2
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int h = 0, m = 0, s = 0, ms = 0;      // 时、分、秒、毫秒
const int startPin = 8;               // 启动按钮
const int stopPin  = 9;               // 停止按钮
const int resetPin = 10;              // 复位按钮
const int brightnessPin = 6;          // 亮度控制引脚 (PWM)
int brightness = 100;                 // 亮度 0-255

void setup() {
  analogWrite(brightnessPin, brightness);
  lcd.begin(16, 2);
  pinMode(startPin, INPUT);
  pinMode(stopPin, INPUT);
  pinMode(resetPin, INPUT);
  pinMode(brightnessPin, OUTPUT);
}

void loop() {
  lcd.setCursor(0, 0);
  lcd.print("TIME:");
  lcd.print(h); lcd.print(":"); 
  lcd.print(m); lcd.print(":"); 
  lcd.print(s);
  lcd.setCursor(0, 1);
  lcd.print("STOPWATCH");

  if (digitalRead(startPin) == HIGH) {
    stopwatch();   // 进入计时子程序
  }
}

// ----- 计时主逻辑 -----
void stopwatch() {
  lcd.setCursor(0, 0);
  lcd.print("TIME:");
  lcd.print(h); lcd.print(":"); 
  lcd.print(m); lcd.print(":"); 
  lcd.print(s);

  ms += 10;
  delay(10);                  // 基准延时 10ms

  if (ms == 590) {            // 约 0.59 秒刷新一次屏幕,减少闪烁
    lcd.clear();
    ms = 0;
    s++;
  }
  if (s == 60) { s = 0; m++; }
  if (m == 60) { m = 0; h++; }

  lcd.setCursor(0, 1);
  lcd.print("STOPWATCH");

  if (digitalRead(stopPin) == HIGH) {
    stopwatchStop();          // 按下停止
  } else {
    stopwatch();              // 递归继续计时
  }
}

// ----- 停止状态:等待继续或复位 -----
void stopwatchStop() {
  lcd.setCursor(0, 0);
  lcd.print("TIME:");
  lcd.print(h); lcd.print(":"); 
  lcd.print(m); lcd.print(":"); 
  lcd.print(s);
  lcd.setCursor(0, 1);
  lcd.print("STOPWATCH");

  if (digitalRead(startPin) == HIGH) {
    stopwatch();              // 继续计时
  }
  if (digitalRead(resetPin) == HIGH) {
    stopwatchReset();         // 复位
    return;
  }
  stopwatchStop();            // 保持停止状态
}

// ----- 复位所有计数 -----
void stopwatchReset() {
  lcd.clear();
  lcd.setCursor(0, 1);
  lcd.print("STOPWATCH");
  h = m = s = 0;
  return;                     // 返回主循环
}

所需库

标准 LiquidCrystal 库已内置于 Arduino IDE,无需额外安装。若使用 I2C 模块,请改用 LiquidCrystal_I2C 库。

原理图

请参考项目附件中的原理图接线。关键点:

制造工艺

  1. 用 Arduino Nano 和 Nokia 5110 LCD 自制 20kHz 示波器:简易 DIY 指南
  2. 智能窗帘:基于Arduino与太阳能的自动光控系统
  3. DIY 钢铁侠人偶:Arduino 控制超声波触发音效与灯光
  4. 自制简易红外避障传感器:IR LED + 光电二极管 + Arduino
  5. Find Me:基于 Arduino 与蓝牙的智能寻物器制作指南
  6. DIY Arduino 加湿器控制器:继电器安全控制高压电路
  7. DIY Arduino Nano 示波器:10 Hz–50 kHz / 128×64 LCD
  8. DIY Arduino 手柄方向盘 - 游戏竞速模拟器自制指南
  9. Arduino 101 计步器:集成 DHT11 温湿度 + LCD 显示步数/距离/卡路里
  10. Arduino RGB 颜色混合器 – 分步制作教程
  11. 自制 AI LCD 陪伴机器人:你的互动小伙伴
  12. 手把手打造Arduino Nano喂食机器人