Panel Cookies
yt_link
insta_link
fb_link
twitter_link

LCD 7-seg
page 1/1


LCD 7 segments with Arduino

Help me by sharing this post



This is a very short example. How to use this LCD to display numbers and some letters such as A, b, F and so on. Aslo the decimal point. Below you have the schematic, code and library taht you need for this example. Read all the comments in the code.

First, you need a 7 segments LCD like this one on this link. This uses serial data to show up to 6 numbers from 0 to 9 and 5 decimal dots. To send data, all we have to do is to send data on the data pin.

7 segments LCD serial Arduino example







PART 1 - Schematic


Ok, make the serial connection between the Arduino and the LCD as below. In this case, we won't need any library. All we have to do is to shift data on the data pins and control some registers inside of the LCd chip. The rest is done by the LCD driver. Copy the code from below and see the test.


scheamtic Arduino LCD serial 7 segments




PART 2 - Example code


We don't need any library for this example. All we have to do is to send data to the chip by shifting each byte value on the data pin. Read the code to see more. Upload the test code, make the connections and give it a test.

Download the example code:



/*  7 segment LCD serial control
 Schematic: https://www.electronoobs.com/eng_arduino_tut55_sch1.php
 Code: https://www.electronoobs.com/eng_arduino_tut55_code1.php
*/

#define CS 13  //Pin 13 as chip selection output
#define WR 12  //Pin 12 as read clock  output
#define DATA 7  //Pin 7 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 
 
//定义HT1621的命令 
#define  ComMode    0x52  //4COM,1/3bias  1000    010 1001  0  
#define  RCosc      0x30  //1000 0011 0000 
#define  LCD_on     0x06  //1000     0000 0 11 0 
#define  LCD_off    0x04  
#define  Sys_en     0x02  //1000   0000 0010 
#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,};
                 //0      1      2      3        4      5      6       7       8       9
char dispnum[6]={0x00,0x00,0x00,0x00,0x00,0x00};
 
int i = 0; 
 
void SendBit_1621(uchar sdata,uchar cnt)
{ 
 //data cnt HT1621
 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); //1621
  delay(1000);
  HT1621_all_off(16); //1621  
  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]); 
  //Write_1621(2,num[28]);
  //Write_1621(4,num[2]); 
  //Write_1621(6,num[28]);  
  //Write_1621(8,num[4]);  
  //Write_1621(10,num[5]);
 */
}
 
void loop() {
 
 while (i < 24)
 {
 Write_1621(0,num[i]); 
 Write_1621(2,num[i]);
 Write_1621(4,num[i]); 
 Write_1621(6,num[i]);  
 Write_1621(8,num[i]);  
 Write_1621(10,num[i]); 
 delay(300);
 i=i+1;
 }
 i = 0;

}








Next tutorial →
More tutorials ←

Help me by sharing this post








Affiliate Disclosure

ADVERTISERS



PCBWAY PCB service





Curso Arduino Online nivel Intermedio