Paul Staron / HT1621_16seg_LCD
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers digitLCD.cpp Source File

digitLCD.cpp

00001 //HT1621 9 DIGIT 16SEG LCD
00002 
00003 #include "digitLCD.h"
00004 
00005 
00006 digitLCD::digitLCD(PinName Rw, PinName CS, PinName Data) : _Rw(Rw),_CS(CS),_DATA(Data){
00007     init();
00008 }
00009 
00010 // Initialize display 
00011 void digitLCD::init(){
00012     wait_ms(10);
00013     SendCmd(Sys_en);
00014     SendCmd(RCosc);    
00015     SendCmd(ComMode);  
00016     SendCmd(LCD_on);
00017     allsegson();
00018     wait_ms(100);
00019     clear();
00020 } 
00021 
00022 // Clear Display
00023 void digitLCD::clear(){
00024     char i; 
00025     char addr=0; 
00026         for(i=0;i<10;i++) 
00027             { 
00028                 Write(addr,0x00); 
00029                 addr+=1; 
00030             } 
00031 }     
00032       
00033 // All segments lit      
00034 void digitLCD::allsegson(){
00035     char addr=0;
00036     char i; 
00037         for(i=0;i<10;i++) 
00038             {
00039                 Write(addr,0xffff); 
00040                 addr+=1; 
00041             } 
00042 }
00043 
00044 // LCDoff 
00045 void digitLCD::LCDoff(){  
00046     SendCmd(LCD_off);  
00047 }
00048                                 
00049 // LCDon  
00050 void digitLCD::LCDon(){  
00051     SendCmd(LCD_on);  
00052 }
00053 
00054 // Hz symbol on
00055 void digitLCD::HZon(){ 
00056     Write(9,0xFF);
00057 }
00058 
00059 // Hz symbol off
00060 void digitLCD::HZoff(){ 
00061     Write(9,0x00); 
00062 }
00063 
00064 // SendBit(send data) High bit first
00065 void digitLCD::SendBit(char sdata,char count){ 
00066     char i; 
00067        for(i=0;i<count;i++) 
00068             { 
00069               _Rw=0;
00070               wait_us(10); 
00071               if(sdata&0x80) {_DATA=1;} 
00072               else {_DATA=0;} 
00073               wait_us(10);
00074               _Rw=1;
00075               wait_us(10);
00076               sdata<<=1;      
00077             } 
00078         //wait_us(20);
00079 }
00080 
00081 // SendCmd(send cmd)Write MODE“100” AND 9 bits command
00082 void digitLCD::SendCmd(int command){ 
00083       _CS=0; 
00084       SendBit(0x80,4);    
00085       SendBit(command,8);  
00086       _CS=1;                    
00087 } 
00088 
00089 // Write(send data and cmd) 
00090 void digitLCD::Write(char addr,int sdata){ 
00091     char addr_r;       
00092        //addr Decoding
00093        switch(addr)
00094        {
00095          case 0 : addr_r = 0<<4; break;
00096          case 1 : addr_r = 5<<4; break;
00097          case 2 : addr_r = 1<<4; break;
00098          case 3 : addr_r = 6<<4; break;
00099          case 4 : addr_r = 2<<4; break;
00100          case 5 : addr_r = 7<<4; break;
00101          case 6 : addr_r = 3<<4; break;
00102          case 7 : addr_r = (8<<4)+0x08; break;
00103          case 8 : addr_r = 4<<4; break;
00104          default : addr_r = (9<<4)+0x08; sdata = sdata & 2;  break;
00105        }
00106        
00107        _CS=0; 
00108        SendBit(0xa0,3);         //Write MODE“101” 
00109        SendBit(addr_r,6);       //Write addr high 6 bits
00110        SendBit(sdata,8);        //Write data  low 8 bits
00111        SendBit(((sdata>>8)&0xff),8);    //Write data high 8 bits
00112        _CS=1; 
00113 }