Holtek HT1621 16 segment 9 digit LCD display library
digitLCD.cpp
- Committer:
- star297
- Date:
- 2015-01-17
- Revision:
- 0:45d8278c902a
File content as of revision 0:45d8278c902a:
//HT1621 9 DIGIT 16SEG LCD #include "digitLCD.h" digitLCD::digitLCD(PinName Rw, PinName CS, PinName Data) : _Rw(Rw),_CS(CS),_DATA(Data){ init(); } // Initialize display void digitLCD::init(){ wait_ms(10); SendCmd(Sys_en); SendCmd(RCosc); SendCmd(ComMode); SendCmd(LCD_on); allsegson(); wait_ms(100); clear(); } // Clear Display void digitLCD::clear(){ char i; char addr=0; for(i=0;i<10;i++) { Write(addr,0x00); addr+=1; } } // All segments lit void digitLCD::allsegson(){ char addr=0; char i; for(i=0;i<10;i++) { Write(addr,0xffff); addr+=1; } } // LCDoff void digitLCD::LCDoff(){ SendCmd(LCD_off); } // LCDon void digitLCD::LCDon(){ SendCmd(LCD_on); } // Hz symbol on void digitLCD::HZon(){ Write(9,0xFF); } // Hz symbol off void digitLCD::HZoff(){ Write(9,0x00); } // SendBit(send data) High bit first void digitLCD::SendBit(char sdata,char count){ char i; for(i=0;i<count;i++) { _Rw=0; wait_us(10); if(sdata&0x80) {_DATA=1;} else {_DATA=0;} wait_us(10); _Rw=1; wait_us(10); sdata<<=1; } //wait_us(20); } // SendCmd(send cmd)Write MODE“100†AND 9 bits command void digitLCD::SendCmd(int command){ _CS=0; SendBit(0x80,4); SendBit(command,8); _CS=1; } // Write(send data and cmd) void digitLCD::Write(char addr,int sdata){ char addr_r; //addr Decoding switch(addr) { case 0 : addr_r = 0<<4; break; case 1 : addr_r = 5<<4; break; case 2 : addr_r = 1<<4; break; case 3 : addr_r = 6<<4; break; case 4 : addr_r = 2<<4; break; case 5 : addr_r = 7<<4; break; case 6 : addr_r = 3<<4; break; case 7 : addr_r = (8<<4)+0x08; break; case 8 : addr_r = 4<<4; break; default : addr_r = (9<<4)+0x08; sdata = sdata & 2; break; } _CS=0; SendBit(0xa0,3); //Write MODE“101†SendBit(addr_r,6); //Write addr high 6 bits SendBit(sdata,8); //Write data low 8 bits SendBit(((sdata>>8)&0xff),8); //Write data high 8 bits _CS=1; }