Categories

HT1621 6 Digit 7 segment Display example

This is a 6-digit 7-segment LCD display module and this screen is already widely used in multimeter, electronic scales, electronic clock and ultrasonic distance measurement.

It is suitable for Ar duino motherboard and the other 5V mcu, and it has a backlight which can help you to read the screen clearly in the dark.
Features:

– Compatibility: can be directly connected to Arduino board, 51, AVR board.
– Backlight color: White
– Display Size: 1.4 inch
– Driver IC: HT1621
– Interface: 3-wire SPI
– Working Voltage: 4.7-5.2VDC
– Working Current: 0.4mA without backlight, and 4mA with backlight
– Applications: Thermometers, multimeter, electronic scales, DIY projects, etc.

 

5 Digit 7 segment Display,

5 Digit 7 segment Display

Connection

I used the following connection for the module, you can see the module pins in the image above

Arduino Pin Module Pin
2 CS
3 WR
4 Data
Arduino Gnd Gnd
Arduino 5v Vcc

You can change the Arduino pins if you wish, just remember and change the defines below in the code

#define CS 2 //Pin 2 as chip selection output
#define WR 3 //Pin 3 as read clock output
#define DATA 4 //Pin 4 as Serial data output

Code

There was a lot of incomplete code examples, libraries with examples that did not work but i found this code example that requires no external libraries and worked nicely as a starting point

#define CS   2  //Pin 2 as chip selection output
#define WR   3  //Pin 3 as read clock output
#define DATA 4  //Pin 4 as Serial data output
 
#define CS1    digitalWrite(CS, HIGH) 
#define CS0    digitalWrite(CS, LOW)
#define WR1    digitalWrite(WR, HIGH) 
#define WR0    digitalWrite(WR, LOW)
#define DATA1  digitalWrite(DATA, HIGH) 
#define DATA0  digitalWrite(DATA, LOW)
 
#define sbi(x, y)  (x |= (1 << y))  
#define cbi(x, y)  (x &= ~(1 <<y ))      
#define uchar   unsigned char 
#define uint   unsigned int 
 
#define  ComMode    0x52  
#define  RCosc      0x30  
#define  LCD_on     0x06 
#define  LCD_off    0x04 
#define  Sys_en     0x02 
#define  CTRl_cmd   0x80
#define  Data_cmd   0xa0   
 
 
/*0,1,2,3,4,5,6,7,8,9,A,b,C,c,d,E,F,H,h,L,n,N,o,P,r,t,U,-, ,*/
const char num[]={0x7D,0x60,0x3E,0x7A,0x63,0x5B,0x5F,0x70,0x7F,0x7B,0x77,0x4F,0x1D,0x0E,0x6E,0x1F,0x17,0x67,0x47,0x0D,0x46,0x75,0x37,0x06,0x0F,0x6D,0x02,0x00,};
char dispnum[6]={0x00,0x00,0x00,0x00,0x00,0x00};
 
 
void SendBit_1621(uchar sdata,uchar cnt) 
{ 
  uchar i; 
  for(i=0;i<cnt;i++) 
  { 
    WR0;
    if(sdata&0x80) DATA1; 
    else DATA0;
    WR1;
    sdata<<=1; 
  } 
}
 
void SendCmd_1621(uchar command)
{ 
  CS0; 
  SendBit_1621(0x80,4);   
  SendBit_1621(command,8);
  CS1;                     
}
 
void Write_1621(uchar addr,uchar sdata)
{ 
  addr<<=2; 
  CS0; 
  SendBit_1621(0xa0,3);    
  SendBit_1621(addr,6);     
  SendBit_1621(sdata,8);    
  CS1; 
} 
 
void HT1621_all_off(uchar num)
{
  uchar i; 
  uchar addr=0; 
  for(i=0;i<num;i++) 
  { 
    Write_1621(addr,0x00); 
    addr+=2; 
  } 
}
 
void HT1621_all_on(uchar num)
{
  uchar i; 
  uchar addr=0; 
  for(i=0;i<num;i++) 
  {
    Write_1621(addr,0xff); 
    addr+=2; 
  } 
}
 
void Init_1621(void)
{
  SendCmd_1621(Sys_en);
  SendCmd_1621(RCosc);    
  SendCmd_1621(ComMode);  
  SendCmd_1621(LCD_on);
}    
 
void displaydata(int p)
{
  uchar i=0;
  switch(p)
  {
    case 1:
    sbi(dispnum[0],7);
    break;
    case 2:
    sbi(dispnum[1],7);
    break;
    case 3:
    sbi(dispnum[2],7);
    break;
    default:break;
  }
  for(i=0;i<=5;i++) 
  {
    Write_1621(i*2,dispnum[i]);
  }
}
 
 
 
void setup() {
  pinMode(CS, OUTPUT); // 
  pinMode(WR, OUTPUT); // 
  pinMode(DATA, OUTPUT); //
  CS1;
  DATA1;
  WR1;
  delay(50);
  Init_1621();
  HT1621_all_on(16); 
  delay(1000);
  HT1621_all_off(16);
  delay(1000);
 
  displaydata(1);//light on the first decimal point starting from the right side
  dispnum[5]=num[5];
  dispnum[4]=num[4];
  dispnum[3]=num[3];
  dispnum[2]=num[2];
  dispnum[1]=num[1];
  dispnum[0]=num[0];
 
  sbi(dispnum[5],7);  
  //cbi(dispnum[5],7);
  sbi(dispnum[4],7);   
  //cbi(dispnum[4],7); 
  sbi(dispnum[3],7);   
  //cbi(dispnum[3],7); 
 
 
 
  Write_1621(0,num[0]);  //0
  Write_1621(2,num[1]);  //1
  Write_1621(4,num[2]);  //2
  Write_1621(6,num[3]);  //3
  Write_1621(8,num[4]);  //4
  Write_1621(10,num[5]); //第5
 
}
 
void loop() {
  // put your main code here, to run repeatedly:
 
}

 

Pretty straightforward, you should see 543210 on your display

 

Links

Fairly low cost for an LCD, coming in at about $5
LCD Module 2.4 inch 6-Digit 7 Segment LCD Display Module HT1621 LCD Driver IC with Decimal Point White Backlight for Arduino

Share

Temperature displayed on Esplora LCD

This example will display the temperature on an LCD connected to an Arduino Esplora

esplora

esplora

Code


#include <Esplora.h>
#include <TFT.h>
#include <SPI.h>

char tempCelsius[3];
char tempFahrenheit[3];

void setup()
{
//setup the LCD
EsploraTFT.begin();
EsploraTFT.background(0,0,0);
EsploraTFT.stroke(255,255,255);
EsploraTFT.setTextSize(2);
EsploraTFT.text("Celsius",0,0);
EsploraTFT.text("Fahrenheit",0,60);
}

void loop()
{
// read the temperature sensor in Celsius, then Fahrenheit:
String celsius = String(Esplora.readTemperature(DEGREES_C));
String fahrenheit = String(Esplora.readTemperature(DEGREES_F));
celsius.toCharArray(tempCelsius, 3);
fahrenheit.toCharArray(tempFahrenheit, 3);
EsploraTFT.stroke(255,255,255);
EsploraTFT.text(tempCelsius, 0, 30);
EsploraTFT.text(tempFahrenheit, 0, 90);
// wait a second before reading again:
delay(1000);
EsploraTFT.stroke(0,0,0);
EsploraTFT.text(tempCelsius, 0, 30);
EsploraTFT.text(tempFahrenheit, 0, 90);
}

 

Links

Atmega32U4 Esplora Game Board Module Leonardo Updated Version FZ0606 Free Shipping

1.8 inch TFT LCD For Arduino Esplora

Share

LCD clock project

In this example we will create a simple clock example using a DS1307 breakout, a keypad/LCD shield and an Arduino Uno

The DS1307 real-time clock is a low-power, full binary-coded decimal clock/calendar. Address and data are transferred over the I²C bus.The clock/calendar provides seconds, minutes, hours, day, date, month, and year information. The DS1307 has a built-in power-sense circuit that detects power failures and automatically switches to the backup supply, this backup supply is usually in the form of a lithium ion battery.

Here is a picture of my setup, as you can see the DS1307 breakout is connected to the LCD and keypad shield, in this example you can see the time displayed on the LCD.

arduino clock

arduino clock

Layout

Here is how you wire up the DS1307 to your Arduino

VCC and GND connect to 5v and GND
SCL connects to A5
SDA connects to A4

 

arduino and ds1307 schematic

arduino and ds1307 schematic

 

keypad ds1307

keypad ds1307

Code

You will need to download and copy the RTCLib into your ARduino libraries folder

https://github.com/getmicros/Arduino-Libraries/blob/master/RTClib-master.zip

#include <Wire.h>
#include “RTClib.h”
#include <LiquidCrystal.h>

RTC_DS1307 rtc;
// Connections: Sainsmart LCD/Keypad shield
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

void setup()
{
//Serial.begin(9600);
Wire.begin();
rtc.begin();

//setup the LCD
lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.print(“Time”);
//debug the rtc
if (! rtc.isrunning())
{
//Serial.println(“RTC is NOT running!”);
// following line sets the RTC to the date & time this sketch was compiled
rtc.adjust(DateTime(__DATE__, __TIME__));
}
}

void loop()
{
DateTime now = rtc.now();
lcd.setCursor(0,1);
lcd.print(now.hour(), DEC);
lcd.setCursor(2,1);
lcd.print(“:”);
lcd.setCursor(3,1);
lcd.print(now.minute(), DEC);
lcd.setCursor(5,1);
lcd.print(“:”);
lcd.setCursor(6,1);
lcd.print(now.second(), DEC);
delay(1000);
}

Links

LCD and Keypad Shield on Amazon US
ds1307 breakout on Amazon US
LCD and keypad shield on Amazon UK
ds1307 breakout on Amazon UK

Share

BMP085 temperature readings on an LCD

lcd keypad shield

lcd keypad shield

Code

#include <Wire.h>
#include <Adafruit_BMP085.h>
#include <LiquidCrystal.h>

Adafruit_BMP085 bmp;

// Connections: Sainsmart LCD/Keypad shield
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

void setup()
{
//Serial.begin(9600);
delay(1000);
//setup the LCD
lcd.begin(16, 2); // start the library
lcd.setCursor(0,0);
lcd.print(“Temperature”);
//debug the bmp085 sensor
Serial.begin(9600);
if (!bmp.begin())
{
Serial.println(“Could not find a BMP085 sensor!”);
while (1) {}
}
}

void loop()
{

//read temperature and output via LCD
lcd.setCursor(0,1);
lcd.print(bmp.readTemperature());
delay(1000);

}
Share