Z EQU 2 ;定義0狀態(tài)位的位地址 RP0 EQU 5 ;定義頁選位RP0的位地址 #DEFINE RS PORTA,1 #DEFINE RW PORTA,2 #DEFINE E PORTA,3 COUNT EQU 24H ;定義計數(shù)寄存器地址 TMP1 EQU 25H ;定義臨時寄存器地址 COUNTER EQU 26H ;********************** ORG 000H NOP ;放置一條ICD必需的空操作指令 GOTO MAIN ORG 0008H ;****************************************************** TABLE ADDWF PCL,1 ;地址偏移量加當(dāng)前PC值 RETLW 20H ;空格 RETLW 20H ; RETLW 41H ;A RETLW 20H ; RETLW 6CH ;l RETLW 61H ;a RETLW 7AH ;z RETLW 79H ;y RETLW 20H ; RETLW 79H ;y RETLW 6FH ;o RETLW 75H ;u RETLW 74H ;t RETLW 68H ;h RETLW 20H ; RETLW 00H ;-------------------- ---------------------------------- TABLE1 ADDWF PCL,1 ;地址偏移量加當(dāng)前PC值 RETLW 20H ; RETLW 20H ; RETLW 61H ;a RETLW 20H ; RETLW 6CH ;l RETLW 6FH ;o RETLW 75H ;u RETLW 73H ;s RETLW 79H ;y RETLW 20H ; RETLW 61H ;a RETLW 67H ;g RETLW 65H ;e RETLW 20H ; RETLW 00H ;******************************************************* ; 主程序 ;****************************************************** MAIN BSF STATUS,RP0 ;轉(zhuǎn)體1 MOVLW 0EH MOVWF ADCON1 ;設(shè)置RA口全部為普通數(shù)字IO口 MOVLW 00H MOVWF TRISA ;定義A口為輸出 MOVWF TRISD ;定義D口為輸出 BCF STATUS,RP0 ;回體0 ;----------------------------------- ;以下16條指令為設(shè)置LCD顯示模式 ;----------------------------------- CALL DELAY ;調(diào)用延時,剛上電LCD復(fù)位不一定有PIC快(196MS) MOVLW 01H MOVWF PORTD ;清屏命令,數(shù)據(jù)指針清零,所有顯示清零 CALL ENABLE ;調(diào)用寫命令程序 MOVLW 38H MOVWF PORTD ;8位2行5x7點陣 CALL ENABLE MOVLW 0EH ;顯示開、光標(biāo)顯示、光標(biāo)不顯示 MOVWF PORTD CALL ENABLE ;當(dāng)讀或?qū)懸粋字符后,地址指針加一,且光標(biāo)加一 MOVLW 06H ;當(dāng)寫一個字符后,整屏顯示不移動 MOVWF PORTD ;----------------------------------- CALL ENABLE ;設(shè)置數(shù)據(jù)地址指針 MOVLW 80H MOVWF PORTD ;第一行的位置 CALL ENABLE CALL WRITE1 ;調(diào)用送第一行數(shù)子程序“WWW.PIC16.COM" ;--------------------------------- MOVLW 0C0H MOVWF PORTD ;第二行的位置 CALL ENABLE CALL WRITE2 ;調(diào)用送第二行數(shù)子程序“TEL0755-83643980" GOTO $ ;****************** 送第一行數(shù)字程序*************** WRITE1 CLRF COUNT ;清0查表偏移地址 WRITE_A MOVF COUNT,W CALL TABLE ;查表,顯示A LAZY YOUTH MOVWF TMP1 ;送暫存器 INCF COUNT,1 ;偏移地址加1 MOVF TMP1,W XORLW 00H ;判斷是否顯示完所有數(shù)據(jù)(約定表格做后一個00H做為結(jié)束標(biāo)志) BTFSC STATUS,Z GOTO ET ;全部顯示完成 MOVF TMP1,W CALL WRITE3 ;沒有顯示完,把當(dāng)前查表所得數(shù)據(jù)送LCD顯示 GOTO WRITE_A ;調(diào)用顯示程序 ET NOP RETURN ;子程序返回 ;*******************送第二行數(shù)子程序************** WRITE2 CLRF COUNT ;清0查表偏移地址 WRITE2_A MOVF COUNT,W CALL TABLE1 ;查表,顯示A LOUSY AGE MOVWF TMP1 INCF COUNT,1 ;偏移地址加1 MOVF TMP1,W XORLW 00H ;判斷是否顯示完所有數(shù)據(jù) BTFSC STATUS,Z GOTO ET1 ; MOVF TMP1,W CALL WRITE3 ;調(diào)用顯示程序 GOTO WRITE2_A ET1 NOP RETURN ;是,程序返回 ;*******************送數(shù)據(jù)到LCD子程序************* WRITE3 MOVWF PORTD BSF RS BCF RW BCF E CALL DELAY BSF E RETURN ;*******************寫命令程序******************** ENABLE BCF RS ;寫入控制命令的子程序 BCF RW BCF E CALL DELAY ;高脈沖使能 BSF E RETURN ;*********************延時子程序****************** DELAY MOVLW 0FFH ;將外層循環(huán)參數(shù)值FFH經(jīng)過W MOVWF 20H ;送入用作外循環(huán)變量的20H單元 LP0 MOVLW 0FFH ;將內(nèi)層循環(huán)參數(shù)值FFH經(jīng)過W MOVWF 21H ;送入用作內(nèi)循環(huán)變量的21H單元 LP1 DECFSZ 21H,1 ;變量21H內(nèi)容遞減,若為0跳躍 GOTO LP1 ;跳轉(zhuǎn)到LP1處 DECFSZ 20H,1 ;變量20H內(nèi)容遞減,若為0跳躍 GOTO LP0 ;跳躍到LP0處 RETURN ;返回主程序 ;-------------------------------------------------------------- END
|