|
LCD_CLEAR_1 BIS.B LCD_PAGE_BRAM,R15 MOV.B R15,LCD_COM_BRAM CALL #LCD_E1_COM CALL #LCD_E2_COM MOV.B #00H,LCD_COM_BRAM CALL #LCD_E1_COM CALL #LCD_E2_COM MOV #61D,R14 LCD_CLEAR_2 MOV.B #00H,LCD_DATA_BRAM CALL #LCD_E1_DATA CALL #LCD_E2_DATA CLRZ DEC.B R14 JNZ LCD_CLEAR_2 INC.B R15 CLRZ CMP.B LCD_LIE_BRAM,R15 JNZ LCD_CLEAR_1 RET ;===============RESETTING_LCD_MODE============= ;調(diào)用此程序是使LCD復位并進入工作狀態(tài) LCD_REST MOV.B #0E2H,LCD_COM_BRAM ;復位 CALL #LCD_E1_COM CALL #LCD_E2_COM MOV.B #0A4H,LCD_COM_BRAM ;關(guān)閉休閑狀態(tài) CALL #LCD_E1_COM CALL #LCD_E2_COM MOV.B #0A9H,LCD_COM_BRAM ;設置1/32占空比 CALL #LCD_E1_COM CALL #LCD_E2_COM MOV.B #0A0H,LCD_COM_BRAM ;正向排序設置 CALL #LCD_E1_COM CALL #LCD_E2_COM MOV.B #0C0H,LCD_COM_BRAM ;設置顯示起始行為第一行 CALL #LCD_E1_COM CALL #LCD_E2_COM MOV.B #0AFH,LCD_COM_BRAM ;開顯示設置 CALL #LCD_E1_COM CALL #LCD_E2_COM RET ;查LCD PAGE #0B8H.#0B9H/#0BAH.#0BBH上屏須要顯示的個數(shù) ;這段程序已測試過 03-3-12 9:55 ;R15/R14/R13 LCD_CHK CLR LCD_COUNT_RAM MOV.B #8,LCD_R0_RAM ;查殉上屏須要顯示的個數(shù),一屏最多可以顯示7個16X16 CLR.B LCD_LIE_BRAM ;清上屏查殉結(jié)果寄存器 MOV LCD_WORD_RAM,R14 ;把須要檢查字的首位16位地址放進R14.LCD_WORD_RAM ;定義時必須是16位地址 LCD_CHK_0 DEC.B LCD_R0_RAM JZ LCD_CHK_1 ;測試完成退出 CLRZ MOV.B @R14+,LCD_COUNT_RAM TST.B LCD_COUNT_RAM ;測試每個字寄存器是否為零 JZ LCD_CHK_0 ;為零時轉(zhuǎn) INC.B LCD_LIE_BRAM ;大于零查殉結(jié)果寄存器加一 JMP LCD_CHK_0 ;反回測試 LCD_CHK_1 CLR LCD_COUNT_RAM MOV.B LCD_LIE_BRAM,LCD_COUNT_RAM MOV LCD_COUNT_RAM,&MPY ;把檢測的結(jié)果乘以16 MOV #16D,&OP2 MOV &RESLO,LCD_COUNT_RAM ;相乘的結(jié)果放回寄存器 MOV.B LCD_COUNT_RAM,LCD_LIE_BRAM RRA.B LCD_LIE_BRAM ;結(jié)果除2.放到上屏頁的寄存器 MOV.B #61D,LCD_COUNT_RAM SUB.B LCD_LIE_BRAM,LCD_COUNT_RAM MOV.B LCD_COUNT_RAM,LCD_LIE_BRAM RET ;調(diào)用前必須把要顯示屏第一個字的地址放在R15內(nèi) ;列:MOV #LCDUP_WORD0_BRAM,LCD_WORD_RAM ;MOV #LCDDOWN_WORD0_BRAM,LCD_WORD_RAM ;用到的寄存器R15/R14 LCD CLRZ CMP.B #0B8H,LCD_PAGE_BRAM JNE LCD_1 MOV #LCDUP_WORD0_BRAM,LCD_WORD_RAM JMP LCD_0 LCD_1 MOV #LCDDOWN_WORD0_BRAM,LCD_WORD_RAM LCD_0 CALL #LCD_CHK BIS.B #BIT0,LCD_BIT_RAM MOV.B #7D,LCD_R1_RAM ;每次調(diào)用均連續(xù)顯示7個16X16的字 而遇到字寄存器是 MOV LCD_WORD_RAM,R15 ;零就反回因為字表里面是沒有零的 LCD_DISPALY CLR R14 MOV.B @R15+,R14 TST R14 ;R15是顯示字首位地址寄存器,準備用于間接尋址 JZ LCD_RET ;字寄存器是零就反回 MOV #32D,&MPY ;查表然后吧結(jié)果送到寄存器 MOV R14,&OP2 MOV &RESLO,LCD_COUNT_RAM ADD #LCD_DB,LCD_COUNT_RAM MOV LCD_COUNT_RAM,R14 MOV.B #32D,LCD_R0_RAM ;R14用于放計算查找數(shù)據(jù)的個數(shù) LCD_PAGE MOV.B LCD_PAGE_BRAM,LCD_COM_BRAM;把頁地址送到命令寄存器 CLRZ BIT.B #BIT0,LCD_BIT_RAM ;LCD_BIT_RAM的BIT0=LCD_E1_E2為高時轉(zhuǎn)到E1發(fā)送,第就是E2 JZ LCD_PAGE_E2 ;Z為零就轉(zhuǎn)到E2 否則向下工作 LCD_PAGE_E1 CALL #LCD_E1_COM ;向E1發(fā)送頁地址 JMP LCD_LIE ;跳去列發(fā)送 LCD_PAGE_E2 CALL #LCD_E2_COM ;向E2發(fā)送頁地址 LCD_LIE MOV.B LCD_LIE_BRAM,LCD_COM_BRAM;把列地址送到命令寄存器 CLRZ BIT.B #BIT0,LCD_BIT_RAM ;LCD_BIT_RAM為高時轉(zhuǎn)到E1發(fā)送,第就是E2 JZ LCD_LIE_E2 ;Z為零就轉(zhuǎn)到E2 否則向下工作 LCD_LIE_E1 CALL #LCD_E1_COM ;向E1發(fā)送列地址 JMP LCD_DATA LCD_LIE_E2 CALL #LCD_E2_COM ;向E2發(fā)送列地址 LCD_DATA CALL #LCD_FIND_DATA ;調(diào)用數(shù)據(jù)發(fā)送命令 CLRZ BIT.B #BIT0,LCD_PAGE_BRAM ;測試頁寄存器的BIT0位 JNZ LCD_PAGE_0 ;大于零(即是BIT0=1)就轉(zhuǎn) BIS.B #BIT0,LCD_PAGE_BRAM ;把頁寄存器的BIT0位置高(原來是低#0B8H/#0BAH) JMP LCD_RETURN LCD_PAGE_0 BIC.B #BIT0,LCD_PAGE_BRAM ;把頁寄存器的BIT0位置低(原來是高#0B9H/#0BBH) INC.B LCD_LIE_BRAM ;列地址加一 CLRZ CMP.B #61D,LCD_LIE_BRAM ;檢查列有沒有超過61列 JNZ LCD_RETURN ;Z大于零就轉(zhuǎn) 等于零就向下工作 CLR.B LCD_LIE_BRAM ;清列寄存器 CLRZ BIT.B #BIT0,LCD_BIT_RAM ;測試LCD_BIT_RAM位 在E1就轉(zhuǎn)為E2 在E2就立即反回 JNZ LCD_PAGE_1 ;Z為零就轉(zhuǎn)到E2 否則向下工作 JMP LCD_RET ;轉(zhuǎn)到子程序反回命令 LCD_PAGE_1 BIC.B #BIT0,LCD_BIT_RAM ;把LCD_BIT_RAM位置低 設為E2顯示狀態(tài) JMP LCD_PAGE ;反回頁傳送命令地址 LCD_RETURN CLRZ DEC.B LCD_R0_RAM ;查找數(shù)據(jù)的個數(shù)寄存器減1 JNZ LCD_PAGE ;R14大于零轉(zhuǎn)回頁傳送命令地址 CLRZ DEC.B LCD_R1_RAM ;字個數(shù)寄存器減1 BIC.B #BIT0,LCD_PAGE_BRAM JNZ LCD_DISPALY ;反回主顯示調(diào)用程序 LCD_RET RET ;反回主程序 ;=================================================== LCD_FIND_DATA MOV.B @R14+,LCD_DATA_BRAM CLRZ BIT.B #INV_BIT,LCD_BIT_RAM JZ NO_INV INV.B LCD_DATA_BRAM NO_INV CLRZ BIT.B #BIT0,LCD_BIT_RAM ;測試LCD_BIT_RAM位 在E1就轉(zhuǎn)為E2 在E2就立即反回 JZ LCD_FIND_E2 ;Z為零就轉(zhuǎn)到E2 否則向下工作 CALL #LCD_E1_DATA ;調(diào)用E1數(shù)據(jù)發(fā)送子程序 JMP LCD_FIND_DATA_RET LCD_FIND_E2 CALL #LCD_E2_DATA ;調(diào)用E2數(shù)據(jù)發(fā)送子程序 LCD_FIND_DATA_RET RET END LCD
|