Добрый день! имеется жк от приборной панели с драйвером ht1621b. я накидал скетч для определения адресов и битов сегментов, и на основе него зажег 2 цифры дисплея. Но возникло 2 вопроса как допустим эти цифры сделать не статичными цифры , а динамичными (допустим отсчет секунд ). И второй как объединить 2 цифры (адрес первой 29, второй 27)в одну. Что бы я мог одной командой выводить на него 2-ух значное число, допустим с датчика температуры или ч сего нибудь ещё. Прошу помочь с кодом.
#define CS 13 //Pin 13 as chip selection output #define WR 12 //Pin 12 as read clock output #define DATA 8 //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[]={B11110101,B01100000,B10110110,B11110010,B01100011,B11010011,B11010111,B01110000,B11110111,B11110011}; // биты чисел // 0 1 2 3 4 5 6 7 8 9 char dispnum[6]={0x00,0x00,0x00,0x00,0x00,0x00};
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 Init_1621(void) { SendCmd_1621(Sys_en); SendCmd_1621(RCosc); SendCmd_1621(ComMode); SendCmd_1621(LCD_on); }
void setup() { pinMode(CS, OUTPUT); // pinMode(WR, OUTPUT); // pinMode(DATA, OUTPUT); // CS1; DATA1; WR1; delay(50); Init_1621(); HT1621_all_off(16); delay(1000); }
void loop() { Write_1621( 29,num[8]); // зажигаем левую цифру Write_1621( 27,num[8]);// зажигаем правую цифру }
|