#define LCD_CS 13
#define LCD_WR 12
#define LCD_DATA 10
#define HT1621_BIAS 0x52 // 1/3duty 4com
#define HT1621_SYS_DIS 0x00 // Turn off the oscillator system oscillator and LCD bias generator
#define HT1621_SYS_EN 0x02 // Turn on the system oscillator
#define HT1621_LCD_OFF 0x04 // Turn off LCD bias
#define HT1621_LCD_ON 0x06 // Turn on the LCE bias
#define HT1621_XTAL 0x28 // external clock
#define HT1621_RC256 0x30 // internal clock
bool a[9], b[9], c[9], d[9], e[9], f[9], h[9], i[9], j[0], g1[9], g2[9], m[9], k[9];
bool seg_a,seg_b,seg_c,seg_d,seg_e,seg_f,seg_h,seg_i,seg_j,seg_g1,seg_g2,seg_m,seg_k;
bool af,tp,ta,bt,dp;
void setup() {
Serial.begin(9600);
pinMode(LCD_CS, OUTPUT);
pinMode(LCD_WR, OUTPUT);
pinMode(LCD_DATA, OUTPUT);
digitalWrite(LCD_CS,HIGH);
digitalWrite(LCD_WR,HIGH);
data_100(HT1621_SYS_EN); // Turn on the system oscillator
data_100(HT1621_BIAS); // BIAS 13 4 public ports
data_100(HT1621_RC256); // Use RC_256K system clock source, on-chip RC oscillator
data_100(HT1621_LCD_ON);
clear_lcd();
}
void loop(){
segm(0);hhh(0);
segm(0);hhh(1);
// Serial.println(k[0]<<0 | c[0]<<1 | i[0]<<2 | b[0]<<3 | g2[0]<<4 | ta<<5 | tp<<6 | af<<7);
lcd_write(0, k[0]<<0 | c[0]<<1 | i[0]<<2 | b[0]<<3 | g2[0]<<4 | ta<<5 | tp<<6 | af<<7);
lcd_write(2, m[0]<<0 | e[0]<<1 | h[0]<<2 | f[0]<<3 | d[0]<<4 | g1[0]<<5 | i[0]<<6| a[0]<<7);
lcd_write(4, d[1]<<0 | g1[1]<<1 | i[1]<<2 | a[1]<<3 | k[1]<<4 | c[1]<<5 | j[1]<<6 | b[1]<<7);
lcd_write(6, g2[2]<<0 | g2[1]<<1 | dp<<2 | bt<<3 | m[1]<<4 | e[1]<<5 | h[1]<<6 | f[1]<<7);
delay(1000);
}
void hhh(int hh){
a[hh]=seg_a,b[hh]=seg_b,c[hh]=seg_c,d[hh]=seg_d,e[hh]=seg_e,f[hh]=seg_f,h[hh]=seg_h,i[hh]=seg_i,j[hh]=seg_j,g1[hh]=seg_g1,g2[hh]=seg_g2,m[hh]=seg_m,k[hh]=seg_k;
}
void segm(int cif){
switch(cif){
case 0: seg_a=1,seg_b=1,seg_c=1,seg_d=1,seg_e=1,seg_f=1,seg_h=0,seg_i=0,seg_j=0,seg_g1=0,seg_g2=0,seg_m=0,seg_k=0;break;//0
case 1: seg_a=1,seg_b=1,seg_c=1,seg_d=1,seg_e=1,seg_f=1,seg_h=0,seg_i=0,seg_j=0,seg_g1=0,seg_g2=0,seg_m=0,seg_k=0;break;//0
}
}
void clear_lcd(){for(int a=0;a<=32;a++){data_101(a,0);}}
void lcd_write(int addr_, int data_){
data_101(addr_,data_ >> 4);data_101(addr_+1,data_ &0b1111);
}
void data_100(int data){
digitalWrite(LCD_CS,LOW);
for(int i = 2; i >=0; i--){
digitalWrite(LCD_WR,LOW);
digitalWrite(LCD_DATA, (0b100 >> i) & 1);
digitalWrite(LCD_WR,HIGH);
}
for(int i = 8; i >=0; i--){
digitalWrite(LCD_WR,LOW);
digitalWrite(LCD_DATA, (data >> i) & 1);
digitalWrite(LCD_WR,HIGH);
}
digitalWrite(LCD_CS,HIGH);
digitalWrite(LCD_WR,LOW);
delayMicroseconds(10);
}
void data_101(int addr, int data){
digitalWrite(LCD_CS,LOW);
for(int i = 2; i >=0; i--){
digitalWrite(LCD_WR,LOW);
digitalWrite(LCD_DATA, (0b101 >> i) & 1);
digitalWrite(LCD_WR,HIGH);
}
for(int i = 5; i >=0; i--){
digitalWrite(LCD_WR,LOW);
digitalWrite(LCD_DATA, (addr >> i) & 1);
digitalWrite(LCD_WR,HIGH);
}
for(int i = 0; i <=3; i++){
digitalWrite(LCD_WR,LOW);
digitalWrite(LCD_DATA, (data >> i) & 1);
digitalWrite(LCD_WR,HIGH);
}
digitalWrite(LCD_CS,HIGH);
digitalWrite(LCD_WR,LOW);
}