;======================================================== ;本程序用于測試72段LCD驅(qū)動器SD0418 ;========================================================
;======================================================== ;系統(tǒng)配置:系統(tǒng)時鐘=4MHZ,CLOCK=4,WDT=DISABLED ;MCU:EM78P156E ;管腳連接:P5.0(MCU)->DATA(SD0418),P5.1(MCU)->WR(SD0418) ; P5.2(MCU)->CS(SD0418) ;========================================================
DATA==0 WR ==1 CS ==2 PORT5 ==0X05 COM_MODE==0X04;發(fā)送命令模式 WRITE_MODE ==0X05;寫數(shù)據(jù)模式 COM_REG ==0X10;命令寄存器 COM_DATA==0X11;控制命令數(shù)據(jù)寄存器 ADD_REG ==0X12;發(fā)送數(shù)據(jù)RAM地址寄存器 DATA_REG==0X13;發(fā)送數(shù)據(jù)寄存器 COUNTER ==0X20;發(fā)送數(shù)據(jù)計數(shù)器 NUMBER == 0X21;循環(huán)計數(shù)器 TEMP ==0X22;顯示數(shù)據(jù)地址暫存 TEMP1 ==0X23;顯示數(shù)據(jù)暫存 ;******************************************************* ORG0X00 JMPSTART ORG0X08 START:;程序初始化 CLRA IOWPORT5;I/O口初始化 MOVA,@COM_MODE;開啟SD0418 MOVCOM_REG,A MOVA,@0X01 MOVCOM_DATA,A CALL SD0418 MOVA,@COM_MODE;打開LCD偏壓發(fā)生器 MOVCOM_REG,A MOVA,@0X03 MOVCOM_DATA,A CALL SD0418;LCD 1/3偏壓方式,4公共端 MOVA,@COM_MODE MOVCOM_REG,A MOVA,@0X29 MOVCOM_DATA,A CALL SD0418 ;******************************************************* DISPLAY: ;測試SD0418顯示 MOVA,@0X00;所有字段不顯示 MOVTEMP1,A CALL ALLDISPLAY ;調(diào)用所有段顯示子程序 MOVA,@0X0F;所有字段顯示 MOVTEMP1,A CALLALLDISPLAY;調(diào)用所有段顯示子程序 MOVA,@0X00;所有字段不顯示 MOVTEMP1,A CALLALLDISPLAY;調(diào)用所有段顯示子程序 DISPLAY2:;依次顯示SEG0-SEG5段 MOVA,@0X00 MOVTEMP,A MOVA,@0X06 MOVNUMBER,A CALLSEGDISPLAY;調(diào)用段顯示子程序 DISPLAY4:;依次顯示SEG13-SEG19段 MOVA,@0X0D MOVTEMP,A MOVA,@0X07 MOVNUMBER,A CALL SEGDISPLAY;調(diào)用段顯示子程序 DISPLAY6:;依次顯示SEG26-SEG30段 MOVA,@0X1A MOVTEMP,A MOVA,@0X05 MOVNUMBER,A CALL SEGDISPLAY JMP DISPLAY;循環(huán)顯示 ;******************************************************** ;所有段顯示子程序 ;功能:所有字段均顯示儲存在TEMP1中的內(nèi)容 ;入口:顯示內(nèi)容儲存在TEMP1出口:NONE ;******************************************************** ALLDISPLAY: MOVA,@0X1E;顯示數(shù)據(jù)首地址 MOVTEMP,A ALL1: MOVA,@WRITE_MODE ;寫數(shù)據(jù)模式 MOVCOM_REG,A MOVA,TEMP MOVADD_REG,A;數(shù)據(jù)地址 MOVA,TEMP1 MOVDATA_REG,A;數(shù)據(jù) CALL SD0418 DJZTEMP JMPALL1;TEMP不為0則繼續(xù) MOVA,@WRITE_MODE ;TEMP=0顯示SEG0字段 MOVCOM_REG,A MOVA,TEMP MOVADD_REG,A MOVA,TEMP1 MOVDATA_REG,A CALL SD0418 CALL DELAY;延時 CALL DELAY RET ;******************************************************** ;段顯示子程序 ;功能:顯示各獨立字段 ;入口:連續(xù)段首地址儲存在TEMP中,連續(xù)個數(shù)在NUMBER中 ;出口:NONE ;******************************************************** SEGDISPLAY: MOVA,@0X01;顯示數(shù)據(jù)內(nèi)容 MOVTEMP1,A SEGDISPLAY1: MOVA,@WRITE_MODE ;寫數(shù)據(jù)模式 MOVCOM_REG,A MOVA,TEMP MOVADD_REG,A;數(shù)據(jù)地址 MOVA,TEMP1 MOVDATA_REG,A;數(shù)據(jù) CALL SD0418 CALL DELAY BC 0X03,0;依次顯示字段中的每個筆劃 RLCTEMP1 JBSTEMP1,4 JMPSEGDISPLAY1;未顯示完字段中的每個筆劃則繼續(xù) INCTEMP;顯示完字段中的每個筆劃則繼續(xù)到下一字段 DJZNUMBER JMPSEGDISPLAY;未顯示完連續(xù)段則繼續(xù) NOP;顯示完連續(xù)段則結(jié)束 RET ;******************************************************* SD0418: BCPORT5,CS;選通SD0418 MOVA,@0X03;發(fā)送模式(三位數(shù)據(jù)) MOVCOUNTER,A SENDMODE: JBSCOM_REG,2 JMPSM1 BS PORT5,DATA JMPSM2 SM1: BC PORT5,DATA SM2: CALL CLK RLCCOM_REG DJZCOUNTER JMPSENDMODE JBSCOM_REG,3;發(fā)送指令? JMPSENDCOM;是則跳轉(zhuǎn)到發(fā)送指令段 MOVA,@0X06;否則發(fā)送顯示數(shù)據(jù)地址(六位) MOVCOUNTER,A SENDADDR: JBSADD_REG,5 JMPSA1 BS PORT5,DATA JMPSA2 SA1: BC PORT5,DATA SA2: CALL CLK RLCADD_REG DJZCOUNTER JMPSENDADDR MOVA,@0X04;發(fā)送顯示數(shù)據(jù)(四位) MOVCOUNTER,A SENDDATA: JBSDATA_REG,0 JMPSD1 BSPORT5,DATA JMPSD2 SD1: BCPORT5,DATA SD2: CALL CLK RRCDATA_REG DJZCOUNTER JMPSENDDATA JMPSD0418END;發(fā)送完顯示數(shù)據(jù)則返回 SENDCOM: MOVA,@0X08;發(fā)送指令(九位) MOVCOUNTER,A SC1: JBSCOM_DATA,7 JMPSC2 BS PORT5,DATA JMPSC3 SC2: BC PORT5,DATA SC3: CALL CLK RLCCOM_DATA DJZCOUNTER JMPSC1 BCPORT5,DATA;發(fā)送第九位數(shù)據(jù) CALL CLK SD0418END: BS PORT5,CS;禁止MCU與SD0418間通信 RET ;******************************************************* CLK:;發(fā)送時鐘 NOP NOP NOP NOP NOP BC PORT5,WR NOP NOP NOP NOP NOP BS PORT5,WR NOP NOP NOP NOP NOP RET ;******************************************************* DELAY:;延時子程序 MOVA,@0XFF MOV0X18,A DELAY1: MOVA,@0XFF MOV0X17,A DELAY2: DJZ0X17 JMPDELAY2 DJZ0X18 JMPDELAY1 RET
|
|