📄 t6963.asm
字号:
;********************************************************
; 温度传感
; 2003.10.27
;********************************************************
PARA EQU 1EH ; LCD每行显示字符数
D_ADD EQU 0000h ; 数据通道地址
C_ADD EQU 4000h ; 指令通道地址
;
HIN EQU P1.0 ; 系统状态查询
DHO EQU P1.1 ; 系统状态标志
KT EQU P1.2 ; 加热控制输出
TEMPOV EQU P1.3 ; 温度超出警告
FM EQU P1.4 ; 蜂鸣器输出
RUN EQU P1.5 ; 运行状态标记
;
LCDRST EQU P1.6 ; LCD复位信号
CD EQU P2.6 ; 数据/指令通道选择信号
CS EQU P2.7 ; 片选信号
LCDRD EQU P3.7 ; 读操作信号
LCDWR EQU P3.6 ; 写操作信号
LCDBUS EQU P0 ; 数据总线
;
SYSSTA EQU 30H ; 运行状态
CONNECT EQU 31H ; 联机状态
;
TMST EQU 30H ; 时间设定值
TPST EQU 31H ; 温度设置值
TIME EQU 32H ; 运行时间
TEMP EQU 33H ; 实际温度
TMSTBCD EQU 34H ; 时间设定值BCD码
TPSTBCD EQU 35H ; 温度设置值BCD码
TIMEBCD EQU 36H ; 运行时间BCD码
TEMPBCD EQU 37H ; 实际温度BCD码
;
COM EQU 40H ; 指令码寄存器
DAT1 EQU 41H ; 数据寄存器1
DAT2 EQU 42H ; 数据寄存器2
COUNT1 EQU 43H ; 字符属性地址
COUNT2 EQU 44H ; 计数器地址
;
O_XL EQU 50H ; 行地址(00~07)
O_YL EQU 51H ; 列地址(00~1E)
ACODE EQU 52H ; 字符代码地址
STX EQU 53H ; 字符串开始X
STY EQU 54H ; 字符串开始Y
STCOD EQU 55H ; 字符串开始COD
SLONG EQU 56H ; 字符串长度
;********************************************************
;程序开始
;********************************************************
ORG 0000H
LJMP MAIN
;********************************************************
;间接控制方式,读状态字子程序
;********************************************************
PR0: MOV DPTR, #C_ADD
MOVX A, @DPTR
RET
;-------------------------------------------------------
; 判状态位S1,S0 子程序(读写指令和读写数据状态)
;-------------------------------------------------------
ST01: LCALL PR0
JNB ACC.0, ST01
JNB ACC.1, ST01
RET
;-------------------------------------------------------
; 判状态位S2子程序(数据自动读状态)
;-------------------------------------------------------
ST2: LCALL PR0
JNB ACC.2, ST2
RET
;-------------------------------------------------------
; 判状态位S3子程序(数据自动写状态)
;-------------------------------------------------------
ST3: LCALL PR0
JNB ACC.3, ST3
RET
;-------------------------------------------------------
; 判状态位S6子程序(屏读/屏拷贝状态)
;-------------------------------------------------------
ST6: LCALL PR0
JB ACC.6, ERR
RET
ERR: LJMP ST6 ; 出错处理程序
;******************************************************
; 写指令和写数据子程序
;******************************************************
PR1: LCALL ST01 ; 双字节参数指令写入入口
MOV A, DAT1 ; 取第一参数单元数据
LCALL PR13 ; 写入参数
PR11: LCALL ST01 ; 单字节参数指令写入入口
MOV A, DAT2 ; 取第二参数单元数据
LCALL PR13 ; 写入参数
PR12: LCALL ST01 ; 无参数指令写入入口
MOV A, COM ; 取指令代码单元数据
LJMP PR14 ; 写入指令代码
PR13: MOV DPTR, #D_ADD
PR14: MOVX @DPTR, A
RET
;******************************************************
; 读数据子程序
;******************************************************
PR2: LCALL ST01 ; 判状态位
MOV DPTR, #D_ADD
MOVX A, @DPTR
MOV DAT2, A
RET
;******************************************************
; 延时5秒 DLY_5S
;******************************************************
DLY_5S: MOV R7, #00H
MOV R6, #00H
MOV R5, #20H
D5S: DJNZ R7, D5S
DJNZ R6, D5S
DJNZ R5, D5S
RET
;******************************************************
; LCD初始化子程序一INTLCD1,图形模式下显示
;******************************************************
INTLCD1:MOV DAT1, #00H ; 设置文本显示区域首地址
MOV DAT2, #00H
MOV COM, #40H
LCALL PR1
MOV DAT1, #1EH ; 设置文本显示区域宽度
MOV DAT2, #00H ; 即一行显示所占字节数
MOV COM, #41H
LCALL PR1
MOV DAT1, #00H ; 设置图形显示区域首地址
MOV DAT2, #00H ; 或为文本属性区域首地址
MOV COM, #42H
LCALL PR1
MOV DAT1, #1EH ; 设置图形显示区域宽度
MOV DAT2, #00H ; 或为文本属性区域宽度
MOV COM, #43H ; 即一行显示所占字节数
LCALL PR1
MOV COM, #0A7H ; 光标形状设置
LCALL PR12
MOV COM, #80H ; 显示方式设置逻辑"或"合成
LCALL PR12
MOV COM, #98H ; 显示开关设置开图形显示
LCALL PR12
RET
;******************************************************
; LCD初始化子程序二INTLCD2,文本模式下显示
;******************************************************
INTLCD2:MOV DAT1, #00H ; 设置文本显示区域首地址
MOV DAT2, #00H
MOV COM, #40H
LCALL PR1
MOV DAT1, #1EH ; 设置文本显示区域宽度
MOV DAT2, #00H ; 即一行显示所占字节数
MOV COM, #41H
LCALL PR1
MOV DAT1, #00H ; 设置图形显示区域首地址
MOV DAT2, #08H ; 或为文本属性区域首地址
MOV COM, #42H
LCALL PR1
MOV DAT1, #1EH ; 设置图形显示区域宽度
MOV DAT2, #00H ; 或为文本属性区域宽度
MOV COM, #43H ; 即一行显示所占字节数
LCALL PR1
MOV COM, #0A7H ; 光标形状设置
LCALL PR12
MOV COM, #80H ; 显示方式设置文本特征
LCALL PR12
MOV COM, #94H ; 显示开关设置开文本显示
LCALL PR12
RET
;******************************************************
; 清LCD内部空间子程序CLRLCD
;******************************************************
CLRLCD: MOV DAT1, #00H ; 设置显示RAM 首地址
MOV DAT2, #00H
MOV COM, #24H
LCALL PR1
MOV R3, #00H ; 设置循环量(8K字节)
MOV R4, #0FH
MOV COM, #0B0H ; 设置自动写方式
LCALL PR12
CLRLCD1:LCALL ST3 ; 判状态位S2
MOV A, #00H ; 置数据"0"
LCALL PR2 ; 写入数据
DJNZ R3, CLRLCD1 ; 循环
DJNZ R4, CLRLCD1
MOV COM, #0B2H ; 设置自动写结束指令
LCALL PR12
RET
;******************************************************
; 建立CGRAM1子程序
;******************************************************
CGRAM: MOV DAT1, #03H ; 设置CGRAM偏置地址
MOV DAT2, #00H
MOV COM, #22H
LCALL PR1
MOV DAT1, #00H ; 设置RAM地址指针
MOV DAT2, #1CH
MOV COM, #24H
LCALL PR1
MOV COM, #0B0H ; 设置自动写方式
LCALL PR12
MOV A, COUNT1 ; 计算写入的字节数
MOV B, #08H
MUL AB
MOV COUNT1, A ; 计算器低8位数据
INC B ; 计算器高8位数据
MOV DPTR, #CTAB2 ; 取字符库首地址
PUSH DPH ; 存字符库指针
PUSH DPL
CGRAM1: LCALL ST3 ; 判自动写状态位
POP DPL ; 取字符库指针
POP DPH
CLR A
MOVC A, @A+DPTR ; 取数据
INC DPTR ; 字符库指针加一
PUSH DPH ; 存字符库指针
PUSH DPL
LCALL PR2 ; 写入数据
DJNZ COUNT1, CGRAM1 ; 计数循环
DJNZ B, CGRAM1
MOV COM, #0B2H ; 写入结束自动写指令
LCALL PR12
POP ACC ; 修正栈指针
POP ACC
RET
;******************************************************
; 汉字库24X24
;******************************************************
CTAB1: DB 000H,000H,000H,000H,000H,000H,000H,080H ;肌(00)
DB 000H,01FH,0C4H,030H,010H,087H,0E0H,010H
DB 084H,020H,010H,084H,020H,010H,084H,020H
DB 01FH,084H,020H,010H,084H,020H,010H,084H
DB 020H,010H,084H,020H,010H,084H,020H,01FH
DB 084H,020H,010H,084H,020H,010H,08CH,020H
DB 010H,088H,020H,010H,088H,024H,010H,088H
DB 024H,020H,090H,024H,027H,0A0H,026H,041H
DB 040H,03EH,000H,080H,000H,000H,000H,000H
DB 000H,000H,000H,000H,002H,000H,001H,003H ;体(01)
DB 000H,003H,001H,000H,003H,001H,000H,002H
DB 001H,000H,006H,001H,004H,004H,07FH,0FEH
DB 00CH,007H,080H,00EH,005H,080H,014H,00DH
DB 040H,024H,009H,040H,024H,011H,020H,044H
DB 011H,020H,004H,021H,010H,004H,041H,018H
DB 004H,081H,02CH,005H,03FH,0F4H,004H,001H
DB 000H,004H,001H,000H,004H,001H,000H,004H
DB 003H,000H,004H,003H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,004H,001H ;放(02)
DB 080H,002H,003H,000H,003H,003H,000H,001H
DB 002H,000H,000H,032H,00CH,03FH,0CFH,0F0H
DB 00CH,004H,010H,00CH,004H,030H,00CH,02CH
DB 030H,00FH,0EAH,020H,00CH,062H,020H,00CH
DB 062H,020H,00CH,061H,060H,008H,061H,040H
DB 008H,040H,0C0H,008H,040H,0C0H,018H,041H
DB 040H,010H,042H,030H,023H,0C4H,018H,021H
DB 098H,00EH,040H,020H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,006H,000H ;松(03)
DB 040H,004H,000H,080H,004H,006H,040H,004H
DB 00CH,040H,004H,08CH,040H,07FH,0C8H,020H
DB 004H,010H,020H,00CH,010H,030H,00EH,020H
DB 018H,00DH,022H,01CH,015H,0C3H,008H,014H
DB 083H,000H,014H,002H,000H,024H,006H,000H
DB 044H,004H,000H,044H,00CH,040H,004H,008H
DB 020H,004H,010H,030H,004H,030H,010H,004H
DB 03FH,0F8H,004H,000H,010H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,010H,020H ;训(04)
DB 018H,00CH,031H,018H,006H,031H,018H,006H
DB 031H,018H,000H,031H,018H,000H,031H,018H
DB 000H,031H,018H,006H,031H,018H,03CH,031H
DB 018H,004H,031H,018H,004H,031H,018H,004H
DB 031H,018H,004H,021H,018H,004H,021H,018H
DB 005H,0A1H,018H,005H,061H,018H,006H,041H
DB 018H,006H,040H,018H,004H,080H,018H,001H
DB 000H,018H,002H,000H,010H,000H,000H,000H
DB 000H,000H,000H,000H,002H,000H,006H,003H ;练(05)
DB 000H,004H,002H,000H,00CH,002H,008H,008H
DB 07FH,0FCH,010H,004H,000H,011H,0C4H,000H
DB 021H,088H,000H,03FH,07FH,0C0H,022H,018H
DB 080H,004H,010H,080H,008H,030H,080H,010H
DB 060H,08CH,023H,0BFH,0F0H,03CH,000H,080H
DB 020H,008H,0A0H,000H,018H,098H,007H,0B0H
DB 08CH,078H,020H,086H,020H,040H,086H,000H
DB 08FH,080H,001H,001H,080H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H ;系(06)
DB 0F8H,000H,07FH,000H,01FH,098H,000H,000H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -