Holtek HT1621 16 segment 9 digit LCD display library

Committer:
star297
Date:
Sat Jan 17 15:45:45 2015 +0000
Revision:
0:45d8278c902a
updated docs

Who changed what in which revision?

UserRevisionLine numberNew 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 }