pic16f87a LCD显示网址所以请不要将文件放在这两个目录下
源代码在线查看: 2-4.asm
;------------------------------------------------------------------------------------------
;LCD显示本站网址和电话实验参考程序(实验2-4.ASM)
;进一步熟悉查表程序的用法,LCD的读写方法。
;------------------------------------------------------------------------------------------
LIST P=16F877A
INCLUDE"P16F877A.INC"
INCLUDE"MY.INC" ;COUNT、TEMP变量已经定义
;------------------------------------------------------------------------------------------
E EQU 03H ;LCD片选信号脚定义在RA.5脚
RW EQU 02H ;LCD读/写信号脚定义在RA.3脚
RS EQU 01H ;LCD寄存器选择信号脚定义在RA.2脚
;------------------------------------------------------------------------------------------
ORG 0000H
NOP ;放置一条ICD必需的空操作指令
GOTO MAIN
ORG 0008H
;------------------------------------------------------------------------------------------
TABLE ;取第一行的显示码WWW.AJDZ.NET
ADDWF PCL,1 ;地址偏移量加当前PC值
RETLW ' '
RETLW ' '
RETLW 'W'
RETLW 'W'
RETLW 'W'
RETLW '.'
RETLW 'A'
RETLW 'J'
RETLW 'D'
RETLW 'Z'
RETLW '.'
RETLW 'N'
RETLW 'E'
RETLW 'T'
RETLW ' '
RETLW ' '
RETLW 00H ;数据结束标记
;------------------------------------------------------------------------------------------
TABLE1 ;取第二行的显示码TEL0575 2263178
ADDWF PCL,1 ;地址偏移量加当前PC值
RETLW 'T'
RETLW 'E'
RETLW 'L'
RETLW ':'
RETLW '0'
RETLW '5'
RETLW '7'
RETLW '5'
RETLW '8'
RETLW '2'
RETLW '2'
RETLW '6'
RETLW '3'
RETLW '1'
RETLW '7'
RETLW '8'
RETLW 00H ;数据结束标记
;------------------------------------------------------------------------------------------
MAIN
BSF STATUS,RP0 ;选择体1
MOVLW 06H ;设置PORTA所有口线为数字口
MOVWF ADCON1
MOVLW B'11110001'
MOVWF TRISA ;PORTA的RA2、RA3、RA5设置为输出,其余输入
CLRF TRISD ;PORTD端口定义为输出
BCF STATUS,RP0
CALL DELAY ;调用延时,刚上电LCD复位不一定有PIC快
MOVLW 01H
MOVWF PORTD ;清屏
CALL ENABLE
MOVLW 38H
MOVWF PORTD ;8位2行5x7点阵
CALL ENABLE
MOVLW 0FH ;显示器开、光标开、闪烁开
MOVWF PORTD
CALL ENABLE
MOVLW 06H ;文字不动,光标自动右移
MOVWF PORTD
CALL ENABLE
MOVLW 80H
MOVWF PORTD ;显示位置
CALL ENABLE
CALL WRITE1 ;调用送第一行数子程序“WWW.AJDZ.NET"
MOVLW 0C0H
MOVWF PORTD ;第一行的位置
CALL ENABLE
CALL WRITE2 ;调用送第二行数子程序“TEL0575 2263178"
MOVLW 0C2H
MOVWF PORTD ;第二行的位置
CALL ENABLE
GOTO $
;------------------------------------------------------------------------------------------
WRITE1
CLRF COUNT ;送第一行数字程序
LOOP1
MOVFW COUNT
CALL TABLE
MOVWF TEMP
CALL DATA2LCD
INCF COUNT,F
MOVFW TEMP
XORLW 00H ;只影响标记位
BTFSS STATUS,Z ;判断第1行数据是否读完,未读完则继续读
GOTO LOOP1
RETLW 0
;------------------------------------------------------------------------------------------
WRITE2 ;送第二行数子程序
CLRF COUNT
LOOP2
MOVFW COUNT
CALL TABLE1
MOVWF TEMP
CALL DATA2LCD
INCF COUNT,1
MOVFW TEMP
XORLW 00H
BTFSS STATUS,Z
GOTO LOOP2
RETLW 0
;------------------------------------------------------------------------------------------
DATA2LCD ;送数据到LCD子程序
MOVWF PORTD
BSF PORTA,RS
BCF PORTA,RW
BCF PORTA,E
CALL DELAY
BSF PORTA,E
RETLW 0
;------------------------------------------------------------------------------------------
ENABLE
BCF PORTA,RS ;写入控制命令的子程序
BCF PORTA,RW
BCF PORTA,E
CALL DELAY
BSF PORTA,E
RETLW 0
;------------------------------------------------------------------------------------------
DELAY
movlw 0ffh ;将外层循环参数值FFH经过W
movwf 20h ;送入用作外循环变量的20H单元
lp0 movlw 0ffh ;将内层循环参数值FFH经过W
movwf 21h ;送入用作内循环变量的21H单元
lp1 decfsz 21h,1 ;变量21H内容递减,若为0跳跃
goto lp1 ;跳转到LP1处
decfsz 20h,1 ;变量20H内容递减,若为0跳跃
goto lp0 ;跳跃到LP0处
return ;返回主程序
;------------------------------------------------------------------------------------------
END
;------------------------------------------------------------------------------------------