var DDRAM = new Array(104); var CGRAM = new Array(64); var lastAdrsSet='DDRAM'; var AC = 0; var AC = 0; var range = 16; // 16 chars only //function set var DL = 1; // 8-bit interface data var N = 0; // 1-line display var F = 0; // 5 * 8 dot character font //Display on/off control: var D = 0; // Display off var C = 0; // Cursor off var B = 0; // Blinking off //Entry mode set: var ID = 1; // Increment by 1 var S = 0; // No shift // Cursor or display shift command: var RL = 1; var SC = 0; function reset(){ DDRAM = new Array(104); CGRAM = new Array(64); lastAdrsSet='DDRAM'; AC = 0; range = 16; // 16 chars only //function set DL = 1; // 8-bit interface data N = 0; // 1-line display F = 0; // 5 * 8 dot character font //Display on/off control: D = 0; // Display off C = 0; // Cursor off B = 0; // Blinking off //Entry mode set: ID = 1; // Increment by 1 S = 0; // No shift range = 16; // 16 chars only document.ctrl.lcdpinsHex.value = 0; document.ctrl.lcdpinsDec.value = 0; document.ctrl.ctrlpins.value = ' Disabled, write to IR'; for(var q=0;q> 4; document.ctrl.lcdpinsHex.value = baseDisp(newVal,16); document.ctrl.lcdpinsDec.value = baseDisp(newVal,10); } if(instr & twoLines){ addMsg('2 lines, '); N = 1; range = 32; ln2On(); updateDisp(); } else{ addMsg('1 line, '); N = 0; range = 16; updateDisp(); ln2Off(); } if(instr & largeFont){ addMsg('5*10 font, '); F = 1; alert('\nThis LCD supports only 5*7 fonts !!!'); } else{ addMsg('5*8 font, '); F = 0; } return; } if((instr & maskCursorDisplay) == instrCursorDisplay){ addMsg('\n Cursor or display shift command:'); if(instr & rightLeft){ addMsg('right, '); RL = 1; } else{ addMsg('left, '); RL = -1; } if(instr & shiftOrCursorMove){ addMsg('shift display '); SC = 1; shiftChars -=RL; lastAdrsSet = 'DDRAM'; updateDisp(); } else{ addMsg('move cursor '); SC = 0; lastAdrsSet = 'DDRAM'; incdcrDDRadrs(RL); updateDisp(); } return; } if((instr & maskEntryMode) == instrEntryMode){ addMsg('\n Entry mode set: '); if(instr & incCursorPos){ addMsg('increase cursor position, '); ID = 1; } else{ addMsg('decrease cursor position, '); ID = -1; } if(instr & scrollDisp){ addMsg('scroll display ON, '); S = 1; } else{ addMsg('scroll display OFF, '); S = 0; } return; } if((instr & maskDisplayCtrl) == instrDisplayCtrl){ addMsg('\n Display ON/OFF control: '); if(instr & displayOn){ addMsg('display ON, '); D = 1; dispBlanked = 0; updateDisp(); } else{ addMsg('display OFF, '); D = 0; updateDisp(); } if(instr & cursorOn){ addMsg('cursor ON, '); C = 1; updateUndCurs(); } else{ addMsg('cursor OFF, '); C = 0; updateUndCurs(); } if(instr & blinkOn){ addMsg('blink ON, '); B = 1; } else{ addMsg('blink OFF, '); B = 0; } return; } if((instr & maskClearDisplay) == instrClearDisplay){ addMsg('\n Clear display.'); for(var i=0; i<104;i++){ DDRAM[i]=0x20; } ID = 1; setDDRadrs(0); lastAdrsSet = 'DDRAM'; updateDisp(); return; } if((instr & maskCursorHome) == instrCursorHome){ addMsg('\n Cursor home. '); shiftChars = 0; setDDRadrs(0); lastAdrsSet = 'DDRAM'; updateDisp(); return; } addMsg('\nInvalid instruction !'); return; } function writeData(data){ if(lastAdrsSet == 'DDRAM'){ DDRAM[AC] = data; if(S){ shiftChars += ID; } incdcrDDRadrs(ID); updateDisp(); } else{ //alert('writing to cgram viewer') CGRAM[AC%64] = data; var ACmn64 = AC % 64; chrtbl[Math.floor(ACmn64/8)][ACmn64 % 8] = data & 31; //this goes to CGRAM viewer document['cgp'+ ACmn64].src = (data & 31) +'.gif'; incdcrCGRadrs(ID); cgramChanged(); } } function readBfAndAdr(){ } function readDataReg(){ } var adrs = 1; var chr = 0; currDispChrs = new Array(32); var shiftChars = 0; //var offset = 0 function updateDisp(){ setCurrDispChrs(); //updateUndCurs(); if(D==0){ if(dispBlanked != 1){ blankDisp(); } return; } if(N == 0){ if(shiftChars > 79 || shiftChars < -79){ shiftChars=0 } } else{ if(shiftChars > 39 || shiftChars < -39){ shiftChars=0 } } if(N == 0){ for(var ln=0; ln<16; ln++){ if(currDispChrs[ln][chr] != DDRAM[currDispChrs[ln][adrs]]){ pchr(DDRAM[currDispChrs[ln][adrs]],ln) currDispChrs[ln][chr] = DDRAM[currDispChrs[ln][adrs]] //cursPos = DDRAM[currDispChrs[ln][adrs]] //blinkChar = DDRAM[currDispChrs[ln][adrs] + 1] } } } else{ for(var ln=0; ln<32; ln++){ if(currDispChrs[ln][chr] != DDRAM[currDispChrs[ln][adrs]]){ pchr(DDRAM[currDispChrs[ln][adrs]],ln) currDispChrs[ln][chr] = DDRAM[currDispChrs[ln][adrs]] //cursPos = DDRAM[currDispChrs[ln][adrs]] //blinkChar = DDRAM[currDispChrs[ln][adrs] + 1] } } } /* thhese are to clear the cursor trace in case of LCD scroll*/ pchr(currDispChrs[0][chr],0) pchr(currDispChrs[15][chr],15) if(range == 32){ pchr(currDispChrs[16][chr],16) pchr(currDispChrs[31][chr],31) } updateUndCurs(); } function cgramChanged(){ if(D == 1){ for(var i=0; i>>>' + cursPos) }*/ } var blinked = 0; var blinkChar = 0x20; var undCntr = 0; function blinkCur(){ if(B == 0 || D == 0 || cursOutOfDisp == 1){ if(blinked == 1 && cursPos < range && cursOutOfDisp == 0){ pchr(blinkChar,cursPos) //currDispChrs[cursPos][chr] = 333; blinked = 0 if(C == 1 && cursOutOfDisp == 0){ document['p'+ parseInt(cursPos * 8 + 7)].src = '31.gif' //alert('put und curs at ln 464') //undCntr++ //window.status = undCntr; } } setTimeout("blinkCur()",379); return; } if(blinked == 1){ pchr(blinkChar,cursPos) //currDispChrs[cursPos][chr] = 333; blinked = 0 setTimeout("blinkCur()",379) if(C == 1 && cursOutOfDisp == 0){ document['p'+ parseInt(cursPos * 8 + 7)].src = '31.gif' //currDispChrs[cursPos][chr] = 333; //alert('put und curs at ln 478') } } else { pchr(255,cursPos) document['p'+ parseInt(cursPos * 8 + 7)].src = '31.gif' //currDispChrs[cursPos][chr] = 333; blinked = 1 setTimeout("blinkCur()",379) /*if(C == 1 && cursOutOfDisp == 0){ document['p'+ parseInt(cursPos * 8 + 7)].src = '31.gif' }*/ } } var dispBlanked = 0; function blankDisp(){ for(var i=0;i< range * 8;i++){ document['p'+i].src='0.gif'; } for(var ln=0; ln<32; ln++){ currDispChrs[ln][chr] = 0x20 } dispBlanked = 1 } function setDDRadrs(address){ AC = address if(N==0){ if(AC > 79){ AC = 0 } } else{ if(AC > 64){ } if(AC > 39 && AC < 64){ AC = 64 } if(AC > 103){ AC = 0 } } updateUndCurs() } function incdcrDDRadrs(incordcr){ //alert('ddradrs decreasing !' + AC) if(N == 0){ AC += incordcr if(AC < 0){AC = 79} AC %= 80 } else{ AC += incordcr if(AC < 0){ AC = 103 } if(AC > 39 && AC < 64){ AC = 64 } if(AC > 103){ AC = 0 } } //if(AC < 0 || (AC > 39 && AC < 64) || AC >= 104){alert('AC invalid !!!! >>>>'+ AC)} } function incdcrCGRadrs(incordcr){ AC += incordcr if(AC-64 < 0) {AC = 63} if(AC-64 > 63){AC = 0} } function initCurrDispChrs(){ //if(N == 0){ for(var i=0;i<16;i++){ currDispChrs[i]= new Array(2) currDispChrs[i][chr]= 0x20; currDispChrs[i][adrs]= i; } //} //else{ for(var i=16;i<32;i++){ currDispChrs[i]= new Array(2) currDispChrs[i][chr]= 0x20; currDispChrs[i][adrs]= 48 + i; } //} } function setCurrDispChrs(){ if(N == 0){ for(var i=0; i<16; i++){ //if(shiftChars < 0){ currDispChrs[i][adrs]= (i + 80 + shiftChars) % 80 //adrs //} } } else{ for(var i=0; i<16; i++){ //if(shiftChars < 0){ currDispChrs[i][adrs]= (i + 40 + shiftChars) % 40 //adrs //} } for(var i=16; i<32; i++){ if(shiftChars < 0){ currDispChrs[i][adrs]= (i + 40 + shiftChars + 48) //adrs if(currDispChrs[i][adrs] > 103) currDispChrs[i][adrs] = (currDispChrs[i][adrs] % 104) + 64 }else{ currDispChrs[i][adrs]= i + shiftChars + 48 //adrs if(currDispChrs[i][adrs] > 103) currDispChrs[i][adrs] = (currDispChrs[i][adrs] % 104) + 64 } } } } function updateStats(){ cursOutOfDisp = 1; for(var i=0; i