⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 library.asm

📁 便携式压力传感器
💻 ASM
📖 第 1 页 / 共 5 页
字号:
	MOV     LCDCOL,A
	CJNE    R2,#16,LCDCHNASCDEMO_1  ;显示16个汉字(LCD一行)

	MOV     LCDCOL,#0       ;第0列
LCDCHNASCDEMO_2:
	MOV     DPTR,#ASCFIXEDBMAP      ;确定字符字模块首地址
	MOV     LCDXPG,#2       ;第2页
	MOV     LCDCHR,R2       ;汉字代码:0
	LCALL   LCDCHNASCWR     ;调用LCD中文ASC写程序
	INC     R2
	MOV     A,R2
	RL      A
	RL      A
	RL      A
	SUBB    A,#128          ;多行显示,使用相同的R2,调整LCDCOL值
	MOV     LCDCOL,A
	CJNE    R2,#32,LCDCHNASCDEMO_2  ;显示16个汉字(LCD一行)

	;向LCD写一个中文ASC字符的例子
	;MOV    LCDXPG,#04H     ;第4页
	;MOV    LCDCOL,#70H     ;第70H列
	;MOV    LCDCHR,#07H     ;汉字代码:7
	;MOV    DPTR,#ASCSONGBMAP       ;确定字符字模块首地址
	;LCALL  LCDCHNASCWR     ;调用LCD中文ASC写程序

	MOV     R2,#0           ;字符编码

	MOV     LCDCOL,#0       ;第0列
LCDCHNASCDEMO_3:
	MOV     DPTR,#ASCSONGBMAP       ;确定字符字模块首地址
	MOV     LCDXPG,#4       ;第4页
	MOV     LCDCHR,R2       ;汉字代码:0
	LCALL   LCDCHNASCWR     ;调用LCD中文ASC写程序
	INC     R2
	MOV     A,R2
	RL      A
	RL      A
	RL      A
	MOV     LCDCOL,A
	CJNE    R2,#16,LCDCHNASCDEMO_3  ;显示16个汉字(LCD一行)

	MOV     LCDCOL,#0       ;第0列
LCDCHNASCDEMO_4:
	MOV     DPTR,#ASCSONGBMAP       ;确定字符字模块首地址
	MOV     LCDXPG,#6       ;第6页
	MOV     LCDCHR,R2       ;汉字代码:0
	LCALL   LCDCHNASCWR     ;调用LCD中文ASC写程序
	INC     R2
	MOV     A,R2
	RL      A
	RL      A
	RL      A
	SUBB    A,#128          ;多行显示,使用相同的R2,调整LCDCOL值
	MOV     LCDCOL,A
	CJNE    R2,#32,LCDCHNASCDEMO_4  ;显示16个汉字(LCD一行)
	RET
  
	;********************************
	; 中文显示演示程序
	;
	; 注:中文字符建议在偶数页上显示
	;********************************
LCDCHNDEMO:
	MOV     R2,#0           ;汉字代码从0开始
	MOV     LCDCOL,#0       ;第0列
LCDCHNDEMO_1:
	MOV     LCDXPG,#0       ;第0页
	MOV     LCDCHR,R2       ;汉字代码
	LCALL   LCDCHNWR        ;调用LCD中文写程序
	INC     R2
	MOV     A,R2
	RL      A
	RL      A
	RL      A
	RL      A
	MOV     LCDCOL,A
	CJNE    R2,#8,LCDCHNDEMO_1

	MOV     LCDCOL,#0       ;第0列
LCDCHNDEMO_2:
	MOV     LCDXPG,#2       ;第2页
	MOV     LCDCHR,R2       ;汉字代码
	LCALL   LCDCHNWR        ;调用LCD中文写程序
	INC     R2
	MOV     A,R2
	RL      A
	RL      A
	RL      A
	RL      A
	SUBB    A,#128          ;直接使用上一行的LCDCOL,必须减去128列
	MOV     LCDCOL,A
	CJNE    R2,#16,LCDCHNDEMO_2

	;向LCD写一个中文字符的例子
	;MOV    LCDXPG,#04H     ;第4页
	;MOV    LCDCOL,#70H     ;第70H列
	;MOV    LCDCHR,#07H     ;汉字代码:7
	;LCALL  LCDCHNWR        ;调用LCD中文写程序
	
	MOV     LCDCOL,#0       ;第0列
LCDCHNDEMO_3:
	MOV     LCDXPG,#4       ;第4页
	MOV     LCDCHR,R2       ;汉字代码
	LCALL   LCDCHNWR        ;调用LCD中文写程序
	INC     R2
	MOV     A,R2
	RL      A
	RL      A
	RL      A
	RL      A
	MOV     LCDCOL,A
	CJNE    R2,#24,LCDCHNDEMO_3

	MOV     LCDCOL,#0       ;第0列
LCDCHNDEMO_4:
	MOV     LCDXPG,#6       ;第6页
	MOV     LCDCHR,R2       ;汉字代码
	LCALL   LCDCHNWR        ;调用LCD中文写程序
	INC     R2
	MOV     A,R2
	RL      A
	RL      A
	RL      A
	RL      A
	SUBB    A,#128          ;直接使用上一行的LCDCOL,必须减去128列
	MOV     LCDCOL,A
	CJNE    R2,#32,LCDCHNDEMO_4
	RET
  
	;********************************
	; 128X64LCD全屏显示程序
	;********************************
LCDDISPSCRN:
	MOV     LCDXPG,#10111000B ;LCD第0页
	MOV     LCDCNT,#08      ;128X64LCD屏可显示8页

LCDDISPSCRN_LP:
	MOV     LCDCMD,LCDXPG
	LCALL   LCDPRL0         ;LCD左半屏指令写
	LCALL   LCDPRR0         
	MOV     LCDCMD,#01000000B ;LCDCOL=00,第0列
	LCALL   LCDPRL0         ;LCD左半屏指令写
	LCALL   LCDPRR0         ;LCD右半屏指令写

	MOV     R1,#64          ;LCD左半屏64列
LCDDISPSCRN_LLP:
	CLR     A
	MOVC    A,@A+DPTR
	MOV     LCDDAT,A
	LCALL   LCDPRL1         ;LCD左半屏数据写
	INC     DPTR
	DJNZ    R1,LCDDISPSCRN_LLP

	MOV     R1,#64          ;LCD右半屏64列
LCDDISPSCRN_RLP:
	CLR     A
	MOVC    A,@A+DPTR
	MOV     LCDDAT,A
	LCALL   LCDPRR1         ;LCD右半屏数据写
	INC     DPTR
	DJNZ    R1,LCDDISPSCRN_RLP

	INC     LCDXPG          ;LCD下一页
	DJNZ    LCDCNT,LCDDISPSCRN_LP
	RET
  
	;********************************
	; LCD字符显示程序(使用RAM)
	;********************************
LCDDISPLAYRAM:
	MOV     A,@R0
	CJNE    A,#0FFH,LCDDISPLAYRAM_0 ;LCD显示是否结束
	RET                             ;是,则返回

LCDDISPLAYRAM_0:
	MOV     LCDBYTE0,A
	INC     R0
	MOV     LCDBYTE1,@R0
	INC     R0
	MOV     LCDBYTE2,@R0
	INC     R0

	MOV     A,LCDBYTE0
	ANL     A,#07H
	MOV     LCDXPG,A

	MOV     A,LCDBYTE1
	ANL     A,#0FH
	RL      A       ;左移3位(即: X8)
	RL      A
	RL      A
	MOV     LCDCOL,A

	MOV     LCDCHR,LCDBYTE2

	MOV     A,LCDBYTE0
	SWAP    A
	ANL     A,#03H
	PUSH    DPH             ;LCD字符显示缓冲区指针入栈
	PUSH    DPL
	CJNE    A,#0,LCDDISPLAYRAM_1
	;以下为英文ASCII字符处理程序
	LCALL   LCDASCIIWR      ;向LCD写一个英文ASCII字符
	SJMP    LCDDISPLAYRAM_4
	
LCDDISPLAYRAM_1:
	CJNE    A,#1,LCDDISPLAYRAM_2
	;以下为中文ASCFIXED字符处理程序
	MOV     DPTR,#ASCFIXEDBMAP
	LCALL   LCDCHNASCWR     ;向LCD写一个ASCFIXED字符
	SJMP    LCDDISPLAYRAM_4

LCDDISPLAYRAM_2:
	CJNE    A,#2,LCDDISPLAYRAM_3
	;以下为中文ASCSONG字符处理程序
	MOV     DPTR,#ASCSONGBMAP
	LCALL   LCDCHNASCWR     ;向LCD写一个ASCSONG字符
	SJMP    LCDDISPLAYRAM_4

LCDDISPLAYRAM_3:
	;以下为中文字符处理程序
	LCALL   LCDCHNWR        ;向LCD写一个中文字符

LCDDISPLAYRAM_4:
	POP     DPL             ;LCD字符显示缓冲区指针出栈
	POP     DPH
	SJMP    LCDDISPLAYRAM
  
	;********************************
	; LCD字符显示程序(使用FLASH ROM)
	;********************************
LCDDISPLAY:
	CLR     A
	MOVC    A,@A+DPTR
	CJNE    A,#0FFH,LCDDISPLAY_0    ;LCD显示是否结束
	RET                             ;是,则返回

LCDDISPLAY_0:
	MOV     LCDBYTE0,A
	INC     DPTR

	CLR     A
	MOVC    A,@A+DPTR
	MOV     LCDBYTE1,A
	INC     DPTR

	CLR     A
	MOVC    A,@A+DPTR
	MOV     LCDBYTE2,A
	INC     DPTR

	MOV     A,LCDBYTE0
	ANL     A,#07H
	MOV     LCDXPG,A

	MOV     A,LCDBYTE1
	ANL     A,#0FH
	RL      A       ;左移3位(即: X8)
	RL      A
	RL      A
	MOV     LCDCOL,A

	MOV     LCDCHR,LCDBYTE2

	MOV     A,LCDBYTE0
	SWAP    A
	ANL     A,#03H
	PUSH    DPH             ;LCD字符显示缓冲区指针入栈
	PUSH    DPL
	CJNE    A,#0,LCDDISPLAY_1
	;以下为英文ASCII字符处理程序
	LCALL   LCDASCIIWR      ;向LCD写一个英文ASCII字符
	SJMP    LCDDISPLAY_4
	
LCDDISPLAY_1:
	CJNE    A,#1,LCDDISPLAY_2
	;以下为中文ASCFIXED字符处理程序
	MOV     DPTR,#ASCFIXEDBMAP
	LCALL   LCDCHNASCWR     ;向LCD写一个ASCFIXED字符
	SJMP    LCDDISPLAY_4

LCDDISPLAY_2:
	CJNE    A,#2,LCDDISPLAY_3
	;以下为中文ASCSONG字符处理程序
	MOV     DPTR,#ASCSONGBMAP
	LCALL   LCDCHNASCWR     ;向LCD写一个ASCSONG字符
	SJMP    LCDDISPLAY_4

LCDDISPLAY_3:
	;以下为中文字符处理程序
	LCALL   LCDCHNWR        ;向LCD写一个中文字符

LCDDISPLAY_4:
	POP     DPL             ;LCD字符显示缓冲区指针出栈
	POP     DPH
	SJMP    LCDDISPLAY
  
;===================================================
; LCD绘点子程序
; 2002/3/1
;===================================================
	;***************************
	;屏幕绘点子程序
	;***************************
LCD_WDOT:
	MOV     A,LCDLNE        ;读行地址寄存器
	ANL     A,#7FH          ;屏蔽点标志位
	MOV     B,#8            ;8点行/页
	DIV     AB              ;A为页地址,B为点在对应页的位置
	ORL     A,#0B8H         ;设置页面地址
	MOV     LCDCMD,A
	LCALL   LCDPRL0         ;指令写
	LCALL   LCDPRR0         ;指令写

	INC     B               ;B加1,作为循环控制量
	SETB    C               ;设置点数据
	CLR     A               ;A=0
LCD_WDOT1:
	RLC     A               ;带C左移
	DJNZ    B,LCD_WDOT1     ;循环,直到将点数据移到指定位置
	PUSH    ACC             ;点数据入栈
	MOV     A,LCDCOL        ;读列寄存器
	CLR     C
	SUBB    A,#40H          ;列地址减64
	JC      LCD_WDOT2               ;< 0为左半屏显示区域
	MOV     LCDCOL,A        ;>=0为右半屏显示区域

	;右半屏绘点
	MOV     LCDCMD,LCDCOL
	ORL     LCDCMD,#40H     ;设置列地址值
	LCALL   LCDPRR0         ;指令写
	LCALL   LCDPRR2         ;数据读(空读)
	LCALL   LCDPRR2         ;数据读

	MOV     A,LCDLNE
	MOV     C,ACC.7         ;取点的显示值
	POP     ACC             ;点在指定页面的位置
	JNC     LCD_WDOT11              ;=0消点,跳转
	ORL     A,LCDDAT        ;将绘点数据1写入当前显示数据
	LJMP    LCD_WDOT12
LCD_WDOT11:
	CPL     A               ;点位置数据取反
	ANL     A,LCDDAT        ;将消点数据0写入当前显示数据
LCD_WDOT12:
	MOV     LCDDAT,A        ;存为显示数据
	MOV     LCDCMD,LCDCOL   ;设置列地址值
	ORL     LCDCMD,#40H     ;计算列地址指令
	LCALL   LCDPRR0         ;指令写
	LCALL   LCDPRR1         ;数据写
	RET

	;左半屏绘点
LCD_WDOT2:
	MOV     LCDCMD,LCDCOL   ;设置列地址值
	ORL     LCDCMD,#40H     ;计算列地址指令
	LCALL   LCDPRL0         ;指令写
	LCALL   LCDPRL2         ;数据读(空读)
	LCALL   LCDPRL2         ;数据读

	MOV     A,LCDLNE
	MOV     C,ACC.7         ;取点的显示值
	POP     ACC             ;点在指定页面的位置

	JNC     LCD_WDOT21              ;=0消点,跳转
	ORL     A,LCDDAT        ;将绘点数据1写入当前显示数据
	LJMP    LCD_WDOT22
LCD_WDOT21:
	CPL     A               ;点位置数据取反
	ANL     A,LCDDAT        ;将消点数据0写入当前显示数据
LCD_WDOT22:
	MOV     LCDDAT,A        ;存为显示数据
	MOV     LCDCMD,LCDCOL   ;设置列地址值
	ORL     LCDCMD,#40H     ;计算列地址指令
	LCALL   LCDPRL0         ;指令写
	LCALL   LCDPRL1         ;数据写
	RET
  
	;***************************
	;屏幕绘直线子程序
	;***************************
LCD_WLINE:
	MOV     R6,#00H         ;列地址
	MOV     R7,#0B6H        ;点标志/行位置54
LCD_WLINE_1:
	MOV     LCDCOL,R6       ;列地址设置
	MOV     LCDLNE,R7       ;行地址设置
	LCALL   LCD_WDOT
	INC     R6
	CJNE    R6,#80H,LCD_WLINE_1     ;全屏未显示完,循环继续
	RET

       ;============================
       ;屏幕绘点演示程序
       ;============================
LCDPLOT:
	MOV     R6,#00H         ;列地址
	MOV     R7,#80H         ;点标志/行位置
LCDPLOT_LP1:
	MOV     LCDCOL,R6       ;列地址设置
	MOV     LCDLNE,R7       ;行地址设置
	LCALL   LCD_WDOT
	INC     R6
	INC     R7
	CJNE    R7,#0C0H,LCDPLOT_LP1    ;半屏未显示完,循环继续
LCDPLOT_LP2:
	DEC     R7
	MOV     LCDCOL,R6       ;列地址设置
	MOV     LCDLNE,R7       ;行地址设置
	LCALL   LCD_WDOT
	INC     R6
	CJNE    R7,#80H,LCDPLOT_LP2     ;半屏未显示完,循环继续
	LCALL   DELAY

	;屏幕消点
	MOV     R6,#00H         ;列地址
	MOV     R7,#00H         ;点标志/行位置
LCDPLOT_LP3:
	MOV     LCDCOL,R6       ;列地址设置
	MOV     LCDLNE,R7       ;行地址设置
	LCALL   LCD_WDOT
	INC     R6
	INC     R7
	CJNE    R7,#040H,LCDPLOT_LP3    ;半屏未显示完,循环继续
LCDPLOT_LP4:
	DEC     R7
	MOV     LCDCOL,R6       ;列地址设置
	MOV     LCDLNE,R7       ;行地址设置
	LCALL   LCD_WDOT
	INC     R6
	CJNE    R7,#00H,LCDPLOT_LP4     ;半屏未显示完,循环继续
	LCALL   DELAY
	RET

	;===================================================
	; PCF8563 I2C总线实时时钟(RTC)操作
	; 2001/12/27
	;===================================================
	;********************************
	; 读取PCF8563 RTC时间
	;********************************
PCF8563RCV:
	MOV     R0,#I2CDBUF
	MOV     @R0,#02H        ;器件内部时间寄存器首址(从秒开始读)
	
	MOV     SLA,#PCF8563
	MOV     I2CNUMBYT,#1    ;连续写1个字节
	LCALL   I2CWRNBYT       ;执行I2C器件写操作

	MOV     SLA,#PCF8563
	MOV     I2CNUMBYT,#7    ;连续读取7个字节
	LCALL   I2CRDNBYT

	;处理获取的时间值
	MOV     R0,#I2CDBUF
	MOV     A, @R0          ;取秒字节
	ANL     A,#7FH          ;屏蔽无效位
	MOV     @R0,A
	INC     R0
	MOV     A, @R0          ;取分钟字节
	ANL     A,#7FH          ;屏蔽无效位
	MOV     @R0,A
	INC     R0
	MOV     A, @R0          ;取小时字节
	ANL     A,#3FH          ;屏蔽无效位
	MOV     @R0,A
	INC     R0
	MOV     A, @R0          ;取天字节
	ANL     A,#3FH          ;屏蔽无效位
	MOV     @R0,A
	INC     R0
	MOV     A, @R0          ;取星期字节
	ANL     A,#07H          ;屏蔽无效位
	MOV   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -