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

128x64 LCD 上的模拟、数字时钟和温度计

组件和用品

Arduino Nano R3
× 1
Maxim Integrated DS3231M - ±5ppm,I2C 实时时钟
× 1
单圈电位器 - 10k ohms
× 1
按钮开关,瞬时
× 1
128x64 LCD 图形显示
× 1

必要的工具和机器

烙铁(通用)

关于这个项目

在 arduinoecia 网页上展示了带有 128x64 LCD 图形显示器的 Arduino 时钟、一个用于调整显示对比度的电位器、DS3231 RTC 模块和一个按钮。 RTC 模块通过 A4 (SDA) 和 A5 (SCL) 引脚连接到 Arduino。该按钮连接到数字引脚 3,通过软件启用 Arduino 的内部上拉电阻。该程序使用了一些您必须在编译前安装的库。解压缩库并将它们放在 Arduino IDE 的 LIBRARIES 文件夹中。

程序有两个屏幕:第一个( screen_1 ),显示模拟时钟、数字时钟以及当前日期和温度。

第二个屏幕 ( screen_2 ) 显示数字时钟、星期几、日期和当前温度信息、最低温度和最高温度。通过按下连接到数字引脚 3 的按钮选择屏幕。

要设置 RTC DS3231 模块的日期和时间,请使用串行监视器并以年、月、日、时、分、秒格式输入信息。

如果您输入的信息正确,则会显示消息“ ”。

代码

  • 代码
  • 图书馆
代码Arduino
//Programa:Display LCD 128x64 e RTC DS3231//Autor:Arduino e Cia#include #include #include #include #include //A linha abaixo 定义为 conexoes do display e deve ser //ajustadaconforme o modelo utilizadoU8GLIB_ST7920_128X64_1X u8g(6, 5, 4 , 7); //启用, RW, RS, RESETint X2 =0;int Y2 =0;int X3 =0;int Y3 =0;float angulo =0;int posicao =0;int posicaoh =0;int tempatura =0;int min_temp =500;int max_temp =-500;int ScreenWith =128;int ScreenWithC =96;int ScreenHeight =64;int ScreenHeightC =32;#define botao 3int estado_botao =0;char* dia_da_semana[]={ "Sun", "Mon ", "Tue", "Wed", "Thu", "Fri", "Sat"};void tela_1() { u8g.drawRFrame(0, 0, 128, 64, 3); //Mostra tempatura u8g.setPrintPos(20, 30); u8g.print(温度); u8g.drawStr(42, 30, "C"); u8g.drawCircle(37, 34, 2); mostra_relogio_digital(); //Mostra relogio analogico fundo_relogio(); //Atualiza Ponteiro de horas desenha_ponteiro(hour()-1, 12.0, 10); //Atualiza Ponteiro de minutos desenha_ponteiro(minute()-5, 60.0, 19); //Atualiza Ponteiro de segundos desenha_ponteiro(second()-5, 60, 21);}void tela_2(){ u8g.drawRFrame(0, 0, 128, 64, 3); u8g.drawRFrame(68, 4, 55, 56, 2); mostra_relogio_digital(); u8g.setFont(u8g_font_5x8); u8g.drawStr(78, 35, "MIN"); u8g.drawStr(78, 53, "MAX"); u8g.setFont(u8g_font_6x13); u8g.setPrintPos(25, 41); u8g.print(dia_da_semana[(weekday()-1)]); //Mostra tempatura atual u8g.setPrintPos(83, 19); u8g.print(温度); u8g.drawStr(105, 19, "C"); u8g.drawCircle(100, 12, 2); //最低温度 u8g.setPrintPos(98, 36); u8g.print(min_temp); u8g.drawCircle(113, 29, 2); //Mostra tempatura maxima u8g.setPrintPos(98, 54); u8g.print(max_temp); u8g.drawCircle(113, 47, 2);}void desenha_ponteiro(float valor, float rotacao, int Radius) { angulo =valor * 2.0 * 3.1415 / rotacao - 1,5707; X2 =ScreenWithC + 半径 * cos(angulo); Y2 =ScreenHeightC + Radius * sin(angulo); u8g.drawLine(ScreenWithC, ScreenHeightC, X2, Y2);}void fundo_relogio() { u8g.drawCircle(ScreenWithC, ScreenHeightC, 27); u8g.drawCircle(ScreenWithC, ScreenHeightC, 1); u8g.setFont(u8g_font_6x13); u8g.setFontPosTop(); u8g.drawStr(90, 9, "12"); u8g.drawStr(114, 25, "3"); u8g.drawStr(94, 44, "6"); u8g.drawStr(74, 25, "9"); for(int traco_minuto =0; traco_minuto<12; traco_minuto++) { //Desenha linhas relogio analogico angulo =traco_minuto / 12.0 * 2 * 3.1415; X2 =ScreenWithC + 25 * cos(angulo); Y2 =ScreenHeightC + 25 * sin(angulo); X3 =ScreenWithC + 25 * cos(angulo); Y3 =ScreenHeightC + 25 * sin(angulo); u8g.drawLine(X2, Y2, X3, Y3); }}void mostra_relogio_digital(){ //Mostra a data u8g.setFont(u8g_font_5x8); u8g.setPrintPos(8, 55); u8g.print(day()); u8g.drawStr(19, 55, "/"); u8g.setPrintPos(24, 55); u8g.print(month()); u8g.drawStr(35, 55, "/"); u8g.setPrintPos(41, 55); u8g.print(year()); //Mostra hora e minutos u8g.drawRBox(3, 4, 62, 21,2); u8g.setColorIndex(0); u8g.setFont(u8g_font_fub17); u8g.drawStr(29,21,":"); //Acerta a posicao do digito caso a hora //seja menor do que 10 if (hour() <10) { u8g.drawStr(3,23,"0"); posicaoh =16;否则 posicaoh =3; u8g.setPrintPos(posicaoh, 23); u8g.print(小时()); //Acerta a posicao do digito caso o minuto //seja menor do que 10 if (minute() <10) { u8g.drawStr(38,23,"0"); posicao =51; } 否则 posicao =38; u8g.setPrintPos(posicao,23); u8g.print(分钟()); u8g.setColorIndex(1);}void setup() { pinMode(3, INPUT_PULLUP); Serial.begin(9600);如果 (u8g.getMode() ==U8G_MODE_R3G3B2) u8g.setColorIndex(255); // 白色 else if ( u8g.getMode() ==U8G_MODE_GRAY2BIT ) u8g.setColorIndex(3); // 最大强度 else if ( u8g.getMode() ==U8G_MODE_BW ) u8g.setColorIndex(1); // setSyncProvider(RTC.get) 上的像素;串行 <=max_temp){ max_temp =温度; } if (temperatura <=min_temp) { min_temp =tempatura; } 静态 time_t tLast;时间_t; tmElements_t tm; //Verifica se foi setado um novo horario //格式:ano, mes, dia, hora, minuto, segundo if (Serial.available()>=12) { int y =Serial.parseInt(); if (y>=100 &&y <1000) Serial<=1000) tm.Year =CalendarYrToTm(y); else //(y <100) tm.Year =y2kYearToTm(y); tm.Month =Serial.parseInt(); tm.Day =Serial.parseInt(); tm.Hour =Serial.parseInt(); tm.Minute =Serial.parseInt(); tm.Second =Serial.parseInt(); t =makeTime(tm); RTC.set(t);设置时间(t); Serial < 0) Serial.read(); } } t =现在();如果(t !=tLast){ tLast =t;打印日期时间(t);串行< 0) Serial < 
Arduino
无预览(仅限下载)。

示意图


制造工艺

  1. 模拟和数字信号
  2. 具有应用程序的模拟和数字传感器的类型
  3. Arduino pov 视觉时钟
  4. 主时钟
  5. LCD 动画和游戏
  6. Arduino 温度。使用 3.2 显示的监视器和实时时钟
  7. TM1637 具有时间设置和闹钟功能的数字时钟
  8. DIY 电压表与 Arduino 和诺基亚 5110 显示器
  9. BME280 Nextion Display 上的温度、湿度和压力
  10. Sonar 使用 arduino 并在处理 IDE 上显示
  11. DIY 10Hz-50kHz 示波器在 128x64 LCD 显示器上
  12. 带 DS1302 RTC 的简单闹钟