📄 progcontrol.asm
字号:
;*********************************************************************************
;* *
;* 程控滤波器 *
;* *
;*********************************************************************************
;引脚
P00 BIT P1.0
P01 BIT P1.1
P02 BIT P1.2
P03 BIT P1.3
P04 BIT P1.4
P05 BIT P1.5
P06 BIT P1.6
BUSY BIT P2.5 ;忙信号线 (读取液晶)
REQ BIT P2.6 ;请求信号线 (发向液晶)
RES BIT P2.7 ;复位线 (液晶复位)
SIGNAL BIT P2.1 ;信号输出
KCLK BIT P2.4 ;0832控制定义
KDI BIT P3.6
KCS BIT P2.0
KD0 BIT P3.7
;CLK2 BIT P2.6
CLK2 BIT P1.7
;DAT BIT P2.3
DAT BIT P2.2
KEY BIT P2.3
;KEY BIT P2.2
;F0 BIT P3.4
M BIT P3.5 ;低/高通滤波器选择
FO BIT P3.4
FI BIT P3.3
F2 BIT P3.2
F3 BIT P3.1
F4 BIT P3.0
CUNSHU DATA 21H ;存数据单元
MIAO DATA 29H ;秒值
BIT_COUNT DATA 25H
DATA_IN DATA 26H
DATA_OUT DATA 27H
TIMER DATA 28H
BZ0 BIT 20H.0 ;FDYM
BZ1 BIT 20H.1
BZ2 BIT 20H.2
;以下定义为从22H至61H的RAM空间
TIMER1 EQU 22H ;时延变量1
TIMER2 EQU 23H ;时延变量2
TIMER3 EQU 24H ;时延变量3
COUNT EQU 38H
LCD_X1 EQU 39H
LCD_Y1 EQU 3AH
TIME EQU 3BH
X EQU 3CH
XX EQU 3DH
X111 EQU 3EH
Y EQU 3FH
YY EQU 40H
;******************程序开始********************************************************************
ORG 0000H
AJMP MAIN
ORG 000BH
LJMP INTTIME0
MAIN:
MOV SP,#70H
SETB P00 ;增益初值30dB
SETB P01
CLR P02
CLR P03
MOV P3,#0FFH
CLR M
SETB P04 ;10KHz低通
CLR P05
CLR P06
ANL P3,#0E0H
ORL P3,#02H
LCALL D100MS
CLR DAT
SETB KEY
CLR CLK2
MOV DATA_OUT,#10100100B ;发复位指令
LCALL SEND
CLR BZ0
MOV P0,#0FFH
MOV 30H,#31H
MOV 31H,#30H
MOV 32H,#30H
MOV 33H,#30H
MOV 34H,#30H
MOV 35H,#30H
MOV 36H,#30H
MOV 37H,#30H
MOV TMOD,#12H
MOV CUNSHU,#00H
MOV TH0,#2FH
MOV TL0,#2FH
MOV MIAO,#00H
MOV 60H,#00H ;Y=00H
MOV 5DH,#04H ;X=04H
MOV R1,#7
;MOV R2,#5
SETB KD0
SETB SIGNAL
SETB RES
CLR REQ ;REQ=0
SETB BUSY ;BUSY=1
LCALL RESLCD ;清屏
LCALL MENU_INIT ;显示设备名称
LCALL D1S ;时延1S
LCALL SYSTEMCHECK ;系统自检
LCALL SETUPMENU_0
MOV 30H,#33H
READKEY: JNB KEY,$
JB KEY,$ ;检测是否有键按
MOV DATA_OUT,#00010101B ;有键按下,发送读键盘指令
LCALL SEND
LCALL RECEIVE
MOV A,DATA_IN
TO_MENU_2: CJNE A,#10,TO_MENU_1
LCALL SETUPMENU_2
JNB KEY,$
LCALL TO_MU_2
LCALL SETUPMENU_0
AJMP READKEY
TO_MENU_1: CJNE A,#11,TO_AXIS
LCALL SETUPMENU_1
SETB BZ0
AJMP READKEY
TO_AXIS: CJNE A,#12,B1
LCALL AXISDISP
JNB KEY,$
LCALL TO_MU_6
LCALL SETUPMENU_0
AJMP READKEY
B1: JNB BZ0,READKEY
CLR BZ0
CJNE A,#1,TO_MENU_4
CLR M
LCALL SETUPMENU_3
LCALL TO_MU_3
LCALL SETUPMENU_0
AJMP READKEY
TO_MENU_4: CJNE A,#2,TO_MENU_5
SETB M
LCALL SETUPMENU_4
LCALL TO_MU_4
LCALL SETUPMENU_0
SETB M
AJMP READKEY
TO_MENU_5: CJNE A,#3,B2
SETB M
LCALL SETUPMENU_5
LCALL TO_MU_5
LCALL SETUPMENU_0
MOV P3,#00H
SETB M
AJMP READKEY
B2: SETB BZ0
AJMP READKEY
SJMP $
;***********************************************************
; 液晶显示器清屏程序
;***********************************************************
RESLCD:
MOV A,#0F4H ;选清屏指令命令字
LCALL SUB1 ;调用
RET
;***********************************************************
; 液晶显示器写模块子程序
;***********************************************************
SUB1: JB BUSY,SUB1 ;确信模块空闲(BUSY=0)双线应答方式
MOV P0,A ;向总线送数
NOP ;等待数据总线稳定
SETB REQ ;置模块REQ端为高电平(REQ=1),向模块发请求命令
HE3: JNB BUSY,HE3 ;等待模块响应(BUSY =1)
CLR REQ ;撤消REQ请求信号,数据输入结束
MOV P0,#0FFH
RET
;***********************************************************
;***********************************************************
; 汉字和ASCII码显示子程序
;***********************************************************
;汉字显示
HANZI: MOV A,#0F0H ;选显示汉字命令字
LCALL SUB1 ;调用写子程序
MOV A,5DH ;6DH,XX,16*16点阵为单位的屏幕坐标
LCALL SUB1 ;调用写子程序
MOV A,60H ;67H,YY,16*16点阵为单位的屏幕坐标
LCALL SUB1 ;调用写子程序
MOV A,5EH ;6EH,QQ,GB2312汉字区位码高位
LCALL SUB1 ;调用写子程序
MOV A,5FH ;6FH,WW,GB2312汉字区位码低位
LCALL SUB1 ;调用写子程序
RET
;ASCII码8*16显示
ASCIICODE: MOV A,#0F9H ;选显示8*16 ASCII字符命令字
LCALL SUB1 ;调用写子程序
MOV A,5DH ;6DH,XX,8*8点阵为单位的屏幕坐标值X
LCALL SUB1
MOV A,60H ;67H,YY,1*1点阵为单位的屏幕坐标值Y
LCALL SUB1
MOV A,5EH ;6EH,ASCII字符代码
LCALL SUB1
RET
;***********************************************************
; 显示"."子程序
;***********************************************************
ASCIIPOINT:
MOV A,#0F2H ;显示"."
LCALL SUB1 ;调用写子程序
MOV A,64H ;64H,XX,8*8点阵为单位的屏幕坐标值X
LCALL SUB1
MOV A,65H ;65H,YY,1*1点阵为单位的屏幕坐标值Y
LCALL SUB1
RET
;***********************************************************
ASCIICODE8: MOV A,#0F1H ;选显示8*8 ASCII字符命令字
LCALL SUB1 ;调用写子程序
MOV A,5DH ;5DH,XX,8*8点阵为单位的屏幕坐标值X
LCALL SUB1
MOV A,60H ;60H,YY,1*1点阵为单位的屏幕坐标值Y
LCALL SUB1
MOV A,5EH ;5EH,ASCII字符代码
LCALL SUB1
RET
;***********************************************************
; 显示部分程序
;***********************************************************
MENU_INIT: ;显示"程控滤波器"
LCALL RESLCD ;清屏
;第四行显示:
MOV 60H,#00H ;Y=01H
MOV 5DH,#04H
MOV 5EH,#32H ;ASCII"2"
LCALL ASCIICODE
INC 5DH ;"0"
MOV 5EH,#30H
LCALL ASCIICODE
INC 5DH ;"0"
MOV 5EH,#30H
LCALL ASCIICODE
INC 5DH ;"7"
MOV 5EH,#37H
LCALL ASCIICODE
MOV 5DH,#04H ;汉字"年"
MOV 5EH,#24H
MOV 5FH,#4AH
LCALL HANZI
INC 5DH ;汉字"电"
MOV 5EH,#15H
MOV 5FH,#47H
LCALL HANZI
INC 5DH ;汉字"子"
MOV 5EH,#37H
MOV 5FH,#33H
LCALL HANZI
INC 5DH ;汉字"设"
MOV 5EH,#29H
MOV 5FH,#48H
LCALL HANZI
INC 5DH ;汉字"计"
MOV 5EH,#1CH
MOV 5FH,#26H
LCALL HANZI
MOV 60H,#02H ;Y=01H
MOV 5DH,#03H ;汉字"程"
MOV 5EH,#13H
MOV 5FH,#2CH
LCALL HANZI
INC 5DH ;汉字"控"
MOV 5EH,#1FH
MOV 5FH,#38H
LCALL HANZI
INC 5DH ;汉字"滤"
MOV 5EH,#22H
MOV 5FH,#2BH
LCALL HANZI
INC 5DH ;汉字"波"
MOV 5EH,#12H
MOV 5FH,#08H
LCALL HANZI
INC 5DH ;汉字"器"
MOV 5EH,#26H
MOV 5FH,#57H
LCALL HANZI
MOV 68H,#8
RIGHTMOV: MOV A,#0F8H ;由移8个点阵列
LCALL SUB1
DJNZ 68H,RIGHTMOV
LCALL D1S ;时延1S
RET
;*****************************************************
; 系统自检界面
;*****************************************************
SYSTEMCHECK: LCALL RESLCD ;清屏
MOV 60H,#01H ;Y=01H
MOV 5DH,#03H ;X=03H, 显示"系"
MOV 5EH,#2FH
MOV 5FH,#15H
LCALL HANZI
MOV 5DH,#04H ;X=04H,显示"统"
MOV 5EH,#2DH
MOV 5FH,#13H
LCALL HANZI
MOV 5DH,#05H ;X=05H,显示"自"
MOV 5EH,#37H
MOV 5FH,#34H
LCALL HANZI
MOV 5DH,#06H ;X=06H,显示"检"
MOV 5EH,#1CH
MOV 5FH,#4CH
LCALL HANZI
MOV 5DH,#07H ;X=07H,显示"中"
MOV 5EH,#36H
MOV 5FH,#30H
LCALL HANZI
MOV 60H,#10H
MOV 5DH,#10H
MOV 5EH,#86H
LCALL ASCIICODE
MOV 5DH,#11H
MOV 5EH,#86H
LCALL ASCIICODE
MOV 5DH,#12H
MOV 5EH,#86H
LCALL ASCIICODE
MOV R7,#8
SYSTEMWAIT: MOV 5DH,#10H
MOV 5EH,#20H ;" "ASCII码
LCALL ASCIICODE
LCALL D100MS
MOV 5EH,#86H
LCALL ASCIICODE
LCALL D100MS
MOV 5DH,#11H
MOV 5EH,#20H ;" "ASCII码
LCALL ASCIICODE
LCALL D100MS
MOV 5EH,#86H
LCALL ASCIICODE
MOV 5DH,#12H
MOV 5EH,#20H
LCALL ASCIICODE
LCALL D100MS
MOV 5EH,#86H
LCALL ASCIICODE
DJNZ R7,SYSTEMWAIT
RET
;***********************************************************
; 设置界面显示程序
;***********************************************************
SETUPMENU_0: LCALL RESLCD ;清屏
MOV 60H,#00H ;"功"
MOV 5DH,#02H
MOV 5EH,#19H
MOV 5FH,#06H
LCALL HANZI
INC 5DH ;"能"
MOV 5EH,#24H
MOV 5FH,#3CH
LCALL HANZI
INC 5DH ;"设"
MOV 5EH,#29H
MOV 5FH,#48H
LCALL HANZI
INC 5DH ;"置"
MOV 5EH,#36H
MOV 5FH,#23H
LCALL HANZI
MOV 5DH,#0CH ;":"
MOV 5EH,#3AH
LCALL ASCIICODE
MOV 60H,#10H ;Y=00H
MOV 5DH,#05H ;"A"
MOV 5EH,#41H
LCALL ASCIICODE
mov 60H,#01H
MOV 5DH,#03H ;"放"
MOV 5EH,#17H
MOV 5FH,#25H
LCALL HANZI
INC 5DH ;"大"
MOV 5EH,#14H
MOV 5FH,#53H
LCALL HANZI
INC 5DH ;"器"
MOV 5EH,#26H
MOV 5FH,#57H
LCALL HANZI
INC 5DH ;"设"
MOV 5EH,#29H
MOV 5FH,#48H
LCALL HANZI
INC 5DH ;"置"
MOV 5EH,#36H
MOV 5FH,#23H
LCALL HANZI
MOV 60H,#20H ;Y=10H
MOV 5DH,#05H ;"B"
MOV 5EH,#42H
LCALL ASCIICODE
MOV 60H,#02H ;Y=01H
MOV 5DH,#03H ;"幅"
MOV 5EH,#22H
MOV 5FH,#2BH
LCALL HANZI
INC 5DH ;"频"
MOV 5EH,#12H
MOV 5FH,#08H
LCALL HANZI
INC 5DH ;"特"
MOV 5EH,#26H
MOV 5FH,#57H
LCALL HANZI
INC 5DH ;"性"
MOV 5EH,#29H
MOV 5FH,#48H
LCALL HANZI
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -