📄 gwdvp_m1.asm
字号:
MOV R7,#0AH
RRD2: MOV A,1BH ; 1BH中装地址
INC A
CJNE A,1AH,NOE2
INC A
NOE2: MOV 1BH,A
MOV R1,1CH ; 1CH装数据
DEC R1
MOV 1CH,R1
MOV A,@R1
LCALL ASC
MOV B,1BH
LCALL DISP2
DJNZ R7,RRD2
RET
; JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
TESTD: MOV A,12H
LCALL ASC
MOV B,#0CAH
LCALL DISP2
MOV A,11H
LCALL ASC
MOV B,#0CBH
LCALL DISP2
MOV A,#2EH
MOV B,#0CCH
LCALL DISP2
MOV A,10H
LCALL ASC
MOV B,#0CDH
LCALL DISP2
MOV A,#25H
MOV B,#0CFH
LCALL DISP2
RET
; KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
DIS_A: MOV A,@R0 ; 40H ; 显示
ANL A,#0FH
MOV 10H,A
MOV A,@R0
ANL A,#0F0H
SWAP A
MOV 11H,A
INC R0
MOV A,@R0
ANL A,#0FH
MOV 12H,A
MOV A,@R0
ANL A,#0F0H
SWAP A
MOV 13H,A
INC R0
MOV A,@R0
ANL A,#0FH
MOV 14H,A
MOV A,@R0
ANL A,#0F0H
SWAP A
MOV 15H,A
INC R0
MOV A,@R0
ANL A,#0FH
MOV 16H,A
RET
DIS_B: MOV A,@R0 ; 43H
ANL A,#0F0H
SWAP A
MOV 10H,A
INC R0
MOV A,@R0 ; 44H ; 显示
ANL A,#0FH
MOV 11H,A
MOV A,@R0
ANL A,#0F0H
SWAP A
MOV 12H,A
INC R0
MOV A,@R0 ; 45H
ANL A,#0FH
MOV 13H,A
MOV A,@R0
ANL A,#0F0H
SWAP A
MOV 14H,A
INC R0
MOV A,@R0 ; 46H
ANL A,#0FH
MOV 15H,A
MOV A,@R0
ANL A,#0F0H
SWAP A
MOV 16H,A
RET
; -----------------------------------功能1:测频率、测占空比、测脉宽-----------------------------(1)
;KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK
;------------------------------------------------------开始--------------------------------------------------------------------
CLR88: SETB P3.7
CLR P3.0
CLR P0.4 ; P2.4 ; LOCK1->
CLR P0.5 ; P2.5 ; LOCK2
CLR P3.1
SETB P3.1
CLR P3.1
MOV 2AH,#00H
CLR A
MOV 2BH,#31H
MOV 2DH,A ; 用户自定制系统标志字
; JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ
MOV DAT,#01H ; CLEAR
LCALL ENABLE
CLR P3.5
CLR P0.0
MOV 79H,#00H
RET
;LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
;LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
;LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL
XPOS EQU 40H ;定义列地址
YPOS EQU 41H ;定义行地址
FIRST_COL EQU 30H ;定义字符/汉字显示起始行
FIRST_ROW EQU 31H ;定义字符/汉字显示起始列
HZK_WID EQU 32H ;定义字符/汉字显示长度
HZK_LIN EQU 33H ;定义字符/汉字显示行数
FIRST_ADD EQU 34H ;定义字符/汉字显示起始位置
START_ADD EQU 35H ;起始位置缓存单元
FIRST_LIN EQU 36H ;起始行位置缓存单元
G_COLUMN EQU 37H ;定义图形显示起始行
G_ROW EQU 38H ;定义图形显示起始列
G_WID EQU 39H ;定义图形显示宽度
;------------------------------------------------------------------------------------------------------
CCC:
CLR RW
LCD:
LCALL LCDRESET ;调用系统初始化程序
CALL HZKLIB ;汉字显示
CALL DL8X4 ;延时
;-------------------------
CALL HZK_2 ;KONXIN公司广告
CALL HZK_3
CALL HZK_4
SJMP CCC
CALL HZK_5
CALL DDD
CALL CLEAR ;清屏
RET
DISP_A:
MOV FIRST_ADD,#00H ;设定字符/汉字显示起始位置为第一个显示单元
MOV FIRST_LIN,#01H ;设定字符/汉字显示起始位置为第一行
MOV HZK_WID,#08H ;每行显示汉字个数
MOV HZK_LIN,#04H ;显示行数
MOV START_ADD,#00H ;清首个显示地址缓存单元
LCALL HZK_DISP ;调用汉字显示子程序
RET
HZKLIB: ;显示汉字子程序
MOV DPTR, #TAB ;需要显示汉字机内码数据表
HZ8X4: MOV FIRST_ADD,#00H ;设定字符/汉字显示起始位置为第一个显示单元
MOV FIRST_LIN,#01H ;设定字符/汉字显示起始位置为第一行
MOV HZK_WID,#08H ;每行显示汉字个数
MOV HZK_LIN,#04H ;显示行数
MOV START_ADD,#00H ;清首个显示地址缓存单元
LCALL HZK_DISP ;调用汉字显示子程序
RET
DL8X4: CALL DDD ;延时
MOV A,#01H ;指令#01H为:清除屏幕文字,把地址指针指向00H单元
CALL LCDWC
RET
HZK_2: ;显示汉字子程序
MOV FIRST_ADD,#00H ;设定字符/汉字显示起始位置为第一个显示单元
MOV FIRST_LIN,#02H ;设定字符/汉字显示起始位置为第一行
MOV DPTR, #TAB_2 ;需要显示汉字机内码数据表
MOV HZK_WID,#08H ;每行显示汉字个数
MOV HZK_LIN,#02H ;显示行数
MOV START_ADD,#00H ;清首个显示地址缓存单元
LCALL HZK_DISP ;调用汉字显示子程序
LCALL DL8X4
RET
HZK_3: MOV DPTR, #TAB_3
CALL HZ8X4
SJMP DL8X4
HZK_4: MOV DPTR, #TAB_4
CALL HZ8X4
SJMP DL8X4
HZK_5: MOV DPTR, #TAB_5
CALL HZ8X4
SJMP DL8X4
CLEAR: ;清除图形显示CGRAM
MOV A,#00
CALL LCDFILL
RET
LCDFILL:
MOV R4,A
MOV XPOS,#0
MOV YPOS,#0
LCD_A1:MOV YPOS,#0
LCD_A2:
MOV A,#36H ;选择扩充指令集关闭图形显示
CALL LCDWC
;CALL LCDPOS
MOV A,XPOS
ADD A,#80H
CALL LCDWC
MOV A,YPOS
ADD A,#80H
CALL LCDWC
MOV B,A
MOV A,#30H ;重新选择基本指令集
CALL LCDWC
MOV A,R4
CALL LCDWD
CALL LCDWD
INC YPOS
MOV A,B
CJNE A,#87H,LCD_A2 ;最后一列地址?87H
INC XPOS
MOV A,XPOS
CJNE A,#20H,LCD_A1 ;最后行地址为80H+20H=0A0H
MOV XPOS,#0
LCD_A3:MOV YPOS,#0
LCD_A4:
MOV A,#36H
CALL LCDWC
MOV A,XPOS
ADD A,#80H
CALL LCDWC
MOV A,YPOS
ADD A,#88H
CALL LCDWC
MOV B,A
MOV A,#30H ;重新选择基本指令集
CALL LCDWC
MOV A,R4
CALL LCDWD
CALL LCDWD
INC YPOS
MOV A,B
CJNE A,#8FH,LCD_A4 ;最后一列地址为8FH
INC XPOS
MOV A,XPOS
CJNE A,#20H,LCD_A3 ;最后行地址为80H+20H=0A0H
RET
CHR_DISP: ;字符显示子程序
MOV R0,#50H
MOV R1,HZK_WID
CHR10: LCALL LCDPOS ;调用调整地址单元子程序
MOV A,#89H
; MOV A, START_ADD ;设定DDRAM地址,显示位置地址
LCALL LCDWC
CHR11: MOV A,@R0 ;读取显示字符
LCALL LCDWD ;显示单个字符
INC R0
DJNZ R1,CHR11
RET
;=========
;例:在第1行、第2列 显示10个数字
CHR_01:
ACALL TTT_1
MOV FIRST_LIN,#1
MOV FIRST_ADD,#0
MOV HZK_WID,#10
LCALL CHR_DISP
RET
TTT_1:
MOV A,#30H
MOV R1,#50H
MOV R2,#10H
TTT_L1: MOV @R1,A
INC R1
INC A
DJNZ R2,TTT_L1
RET
HZK_DISP: ;汉字显示子程序
MOV R1,HZK_WID
HZK10: LCALL LCDPOS ;调用调整地址单元子程序
MOV A, START_ADD ;设定DDRAM地址,显示位置地址
LCALL LCDWC
HZK11: CLR A ;因为要连续输入机内码高位(区码)、低位(位码)
MOVC A, @A+DPTR ;所以要输入两次数据,如果是字符就是输入两个字符字符代码可以看说明书
LCALL LCDWD ;DATA LCDWC
INC DPTR ;显示地址会自动加一,如果连续写就不用再输入地址,空白可用某空白汉字或字符代替
CLR A
MOVC A, @A+DPTR
LCALL LCDWD
LCALL DELAY03
INC DPTR
DJNZ R1,HZK11
MOV R1,HZK_WID ;调整显示长度
INC FIRST_LIN ;跳到下一行
DJNZ HZK_LIN,HZK10
RET
LCDRESET:
LCALL DDD ;延时
;首先选择基本指令集
MOV A, #30H ;30---基本指令操作
LCALL LCDWC
MOV A,#30H ;使用8位控制界面
LCALL LCDWC
MOV A, #01H ;指令#01H为:清除屏幕文字,把地址指针指向00H单元
LCALL LCDWC ;
LCALL DDD
LCALL DDD
MOV A, #06H ;指定在资料写入或读取时,设定游标的移动方向及指定显示的移位
LCALL LCDWC
MOV A,#0CH
CALL LCDWC
LCALL DDD
RET
;---------------------------------------------------------
;SEARCH ADDRESS -
;目的是为了转换地址单元为DDRAM地址单元,以方便 -
;定义显示位置 -
;汉字显示DDRAM位置为:第一行:80H----87H -
; 第二行:90H----97H -
; 第三行:88H----8FH -
; 第四行:98H----9FH -
;---------------------------------------------------------
LCDPOS: PUSH DPH ;地址转换子程序
PUSH DPL
PUSH A
MOV DPTR,#LINE_ADD ;LINE-ADD为地址表指针
MOV A,FIRST_LIN
MOVC A,@A+DPTR
ADD A,FIRST_ADD
MOV START_ADD,A
POP A
POP DPL
POP DPH
RET
LINE_ADD:
DB 00H,80H,90H,88H,98H,00H
;READ: MOV P3, #0FBH ;读数据子程序
;P3--CONTRAL I/O
NOP ;P3=11111011B RS=1 R/W=1 READ DATA
SETB E ;E=E(I/O)
LCALL DDD
MOV A, P1 ;P1=DATA(I/O)
NOP
CLR E
RET
CHK_BUSY:
LCALL DDT9
RET
PUSH ACC
CLR RS ;读忙状态子程序
SETB RW
SETB E
CHK_B: NOP
JB P0.7,CHK_B
CLR E
POP ACC
RET
LCDWD: ;写数据子程序
LCALL CHK_BUSY ;P3--CONTRAL I/O
NOP ;RS=1 RW=0 WRITE DATA
SETB RS
CLR RW
SETB E ;E=1
MOV P1, A ;P1=DATA(I/O)
NOP
CLR E
NOP
MOV P1,#0FFH
LCALL DDD
RET
LCDWC: ;写指令子程序
LCALL CHK_BUSY ;以确保上一指令/数据模块已经接收处理完
NOP ;RS=0 WRITE INSTRUTION
CLR RS ;RW=0
CLR RW
SETB E ;E=1
MOV P1, A ;P1=DATA(I/O)
NOP
CLR E
NOP
MOV P1,#0FFH
LCALL DDD
RET
DELAY01: MOV R6, #50
DE_A: MOV R7, #0
DE_B: DJNZ R7, DE_B
DJNZ R6, DE_A
RET
DELAY02: MOV R6, #6
DE_A1: MOV R7, #18h
DE_B1: DJNZ R7, DE_B1
DJNZ R6, DE_A1
RET
DELAY03: MOV R5,#02H
DE_6: MOV R6,#0BFH
DE_4: MOV R7,#0BFH
DE_5: DJNZ R7,DE_5
DJNZ R6,DE_4
NOP
NOP
DJNZ R5,DE_6
RET
TAB: DB "杭州康芯电子公司"
DB " 热情为您服务 "
DB "www.kx-soc.com "
DB "TEL0571-88914587"
TAB_2: DB "曾经沧海难为水 "
DB " 除却巫山不是云"
TAB_3: DB "GW-48EDA实验系统"
DB " SOPC实验系统 "
DB "Nios实验开发系统"
DB "现代DSP 实验系统"
TAB_4: DB "现代计算机组成与"
DB "体系结构实验系统"
DB "嵌入式实验系统 "
DB "电子设计竞赛板 "
TAB_5: DB "高精度合成信号源"
DB "采用FPGA-DDS技术"
DB "具有ASK FSK PSK "
DB "AM/FM/PM调制输出"
END
END
;----------------------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -