Holtek HT1621 16 segment 9 digit LCD display library
digitLCD.cpp@0:45d8278c902a, 2015-01-17 (annotated)
- Committer:
- star297
- Date:
- Sat Jan 17 15:45:45 2015 +0000
- Revision:
- 0:45d8278c902a
updated docs
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
star297 | 0:45d8278c902a | 1 | //HT1621 9 DIGIT 16SEG LCD |
star297 | 0:45d8278c902a | 2 | |
star297 | 0:45d8278c902a | 3 | #include "digitLCD.h" |
star297 | 0:45d8278c902a | 4 | |
star297 | 0:45d8278c902a | 5 | |
star297 | 0:45d8278c902a | 6 | digitLCD::digitLCD(PinName Rw, PinName CS, PinName Data) : _Rw(Rw),_CS(CS),_DATA(Data){ |
star297 | 0:45d8278c902a | 7 | init(); |
star297 | 0:45d8278c902a | 8 | } |
star297 | 0:45d8278c902a | 9 | |
star297 | 0:45d8278c902a | 10 | // Initialize display |
star297 | 0:45d8278c902a | 11 | void digitLCD::init(){ |
star297 | 0:45d8278c902a | 12 | wait_ms(10); |
star297 | 0:45d8278c902a | 13 | SendCmd(Sys_en); |
star297 | 0:45d8278c902a | 14 | SendCmd(RCosc); |
star297 | 0:45d8278c902a | 15 | SendCmd(ComMode); |
star297 | 0:45d8278c902a | 16 | SendCmd(LCD_on); |
star297 | 0:45d8278c902a | 17 | allsegson(); |
star297 | 0:45d8278c902a | 18 | wait_ms(100); |
star297 | 0:45d8278c902a | 19 | clear(); |
star297 | 0:45d8278c902a | 20 | } |
star297 | 0:45d8278c902a | 21 | |
star297 | 0:45d8278c902a | 22 | // Clear Display |
star297 | 0:45d8278c902a | 23 | void digitLCD::clear(){ |
star297 | 0:45d8278c902a | 24 | char i; |
star297 | 0:45d8278c902a | 25 | char addr=0; |
star297 | 0:45d8278c902a | 26 | for(i=0;i<10;i++) |
star297 | 0:45d8278c902a | 27 | { |
star297 | 0:45d8278c902a | 28 | Write(addr,0x00); |
star297 | 0:45d8278c902a | 29 | addr+=1; |
star297 | 0:45d8278c902a | 30 | } |
star297 | 0:45d8278c902a | 31 | } |
star297 | 0:45d8278c902a | 32 | |
star297 | 0:45d8278c902a | 33 | // All segments lit |
star297 | 0:45d8278c902a | 34 | void digitLCD::allsegson(){ |
star297 | 0:45d8278c902a | 35 | char addr=0; |
star297 | 0:45d8278c902a | 36 | char i; |
star297 | 0:45d8278c902a | 37 | for(i=0;i<10;i++) |
star297 | 0:45d8278c902a | 38 | { |
star297 | 0:45d8278c902a | 39 | Write(addr,0xffff); |
star297 | 0:45d8278c902a | 40 | addr+=1; |
star297 | 0:45d8278c902a | 41 | } |
star297 | 0:45d8278c902a | 42 | } |
star297 | 0:45d8278c902a | 43 | |
star297 | 0:45d8278c902a | 44 | // LCDoff |
star297 | 0:45d8278c902a | 45 | void digitLCD::LCDoff(){ |
star297 | 0:45d8278c902a | 46 | SendCmd(LCD_off); |
star297 | 0:45d8278c902a | 47 | } |
star297 | 0:45d8278c902a | 48 | |
star297 | 0:45d8278c902a | 49 | // LCDon |
star297 | 0:45d8278c902a | 50 | void digitLCD::LCDon(){ |
star297 | 0:45d8278c902a | 51 | SendCmd(LCD_on); |
star297 | 0:45d8278c902a | 52 | } |
star297 | 0:45d8278c902a | 53 | |
star297 | 0:45d8278c902a | 54 | // Hz symbol on |
star297 | 0:45d8278c902a | 55 | void digitLCD::HZon(){ |
star297 | 0:45d8278c902a | 56 | Write(9,0xFF); |
star297 | 0:45d8278c902a | 57 | } |
star297 | 0:45d8278c902a | 58 | |
star297 | 0:45d8278c902a | 59 | // Hz symbol off |
star297 | 0:45d8278c902a | 60 | void digitLCD::HZoff(){ |
star297 | 0:45d8278c902a | 61 | Write(9,0x00); |
star297 | 0:45d8278c902a | 62 | } |
star297 | 0:45d8278c902a | 63 | |
star297 | 0:45d8278c902a | 64 | // SendBit(send data) High bit first |
star297 | 0:45d8278c902a | 65 | void digitLCD::SendBit(char sdata,char count){ |
star297 | 0:45d8278c902a | 66 | char i; |
star297 | 0:45d8278c902a | 67 | for(i=0;i<count;i++) |
star297 | 0:45d8278c902a | 68 | { |
star297 | 0:45d8278c902a | 69 | _Rw=0; |
star297 | 0:45d8278c902a | 70 | wait_us(10); |
star297 | 0:45d8278c902a | 71 | if(sdata&0x80) {_DATA=1;} |
star297 | 0:45d8278c902a | 72 | else {_DATA=0;} |
star297 | 0:45d8278c902a | 73 | wait_us(10); |
star297 | 0:45d8278c902a | 74 | _Rw=1; |
star297 | 0:45d8278c902a | 75 | wait_us(10); |
star297 | 0:45d8278c902a | 76 | sdata<<=1; |
star297 | 0:45d8278c902a | 77 | } |
star297 | 0:45d8278c902a | 78 | //wait_us(20); |
star297 | 0:45d8278c902a | 79 | } |
star297 | 0:45d8278c902a | 80 | |
star297 | 0:45d8278c902a | 81 | // SendCmd(send cmd)Write MODE“100†AND 9 bits command |
star297 | 0:45d8278c902a | 82 | void digitLCD::SendCmd(int command){ |
star297 | 0:45d8278c902a | 83 | _CS=0; |
star297 | 0:45d8278c902a | 84 | SendBit(0x80,4); |
star297 | 0:45d8278c902a | 85 | SendBit(command,8); |
star297 | 0:45d8278c902a | 86 | _CS=1; |
star297 | 0:45d8278c902a | 87 | } |
star297 | 0:45d8278c902a | 88 | |
star297 | 0:45d8278c902a | 89 | // Write(send data and cmd) |
star297 | 0:45d8278c902a | 90 | void digitLCD::Write(char addr,int sdata){ |
star297 | 0:45d8278c902a | 91 | char addr_r; |
star297 | 0:45d8278c902a | 92 | //addr Decoding |
star297 | 0:45d8278c902a | 93 | switch(addr) |
star297 | 0:45d8278c902a | 94 | { |
star297 | 0:45d8278c902a | 95 | case 0 : addr_r = 0<<4; break; |
star297 | 0:45d8278c902a | 96 | case 1 : addr_r = 5<<4; break; |
star297 | 0:45d8278c902a | 97 | case 2 : addr_r = 1<<4; break; |
star297 | 0:45d8278c902a | 98 | case 3 : addr_r = 6<<4; break; |
star297 | 0:45d8278c902a | 99 | case 4 : addr_r = 2<<4; break; |
star297 | 0:45d8278c902a | 100 | case 5 : addr_r = 7<<4; break; |
star297 | 0:45d8278c902a | 101 | case 6 : addr_r = 3<<4; break; |
star297 | 0:45d8278c902a | 102 | case 7 : addr_r = (8<<4)+0x08; break; |
star297 | 0:45d8278c902a | 103 | case 8 : addr_r = 4<<4; break; |
star297 | 0:45d8278c902a | 104 | default : addr_r = (9<<4)+0x08; sdata = sdata & 2; break; |
star297 | 0:45d8278c902a | 105 | } |
star297 | 0:45d8278c902a | 106 | |
star297 | 0:45d8278c902a | 107 | _CS=0; |
star297 | 0:45d8278c902a | 108 | SendBit(0xa0,3); //Write MODE“101†|
star297 | 0:45d8278c902a | 109 | SendBit(addr_r,6); //Write addr high 6 bits |
star297 | 0:45d8278c902a | 110 | SendBit(sdata,8); //Write data low 8 bits |
star297 | 0:45d8278c902a | 111 | SendBit(((sdata>>8)&0xff),8); //Write data high 8 bits |
star297 | 0:45d8278c902a | 112 | _CS=1; |
star297 | 0:45d8278c902a | 113 | } |