📄 cs1821_20060106_ok.asm
字号:
;*******************************************************************
;-------------------------------------------------------------------
;-----CS1821_TEST.ASM-----------------------------------------------
;-----AUTHOR:TAOXY@20060104-----------------------------------------
;-----MCU:AT89C2051@12MHz-------------------------------------------
;-------------------------------------------------------------------
;*******************************************************************
;*******************************************************************
;-----------------------相关管脚的位定义----------------------------
;CS1821_RD EQU P2.4
;CS1821_CS EQU P2.5
;CS1821_WR EQU P2.6
;CS1821_DATA EQU P2.7
;CS1821_CS EQU P1.7
;CS1821_RD EQU P1.6
;CS1821_WR EQU P1.5
;CS1821_DATA EQU P1.4
CS1821_CS EQU P3.1
CS1821_RD EQU P3.7
CS1821_WR EQU P3.0
CS1821_DATA EQU P1.7
COUNT EQU 30H ;COUNTER FOR LOOP
READ_TEMP EQU 31H
TEMP_1 EQU 32H ;TEMP REGISTER RAM
TEMP_2 EQU 33H
TEMP_3 EQU 34H
TEMP_4 EQU 35H
ERROR_FLAG EQU 36H
MRD EQU 40H ;读取数据缓冲区首地址
MTD EQU 50H
STACK EQU 60H
;**************************************************************************
;***************************************************************************
;----------------------------HT1621命令字定义-------------------------------
ID_COMMAND EQU 80H
ID_DATA EQU 0A0H
ID_READ EQU 0C0H ;110 00000 读RAM ID
X EQU 00H
RAM_ADD EQU 00H
;----------------------------HT1621 COMMAND--------------------------------
SYS_DIS EQU 00H
SYS_EN EQU 01H
LCD_OFF EQU 02H
LCD_ON EQU 03H
TIMER_DIS EQU 04H
TIMER_EN EQU 06H
WDT_DIS EQU 05H
WDT_EN EQU 07H
TONE_OFF EQU 08H
TONE_ON EQU 09H
XTAL_32K EQU 14H
RC_256K EQU 18H
EXT_256K EQU 1CH
BIAS_2 EQU 28H
BIAS_3 EQU 29H
TONE_4K EQU 40H
TONE_2K EQU 60H
IRQ_DIS EQU 80H
IRQ_EN EQU 88H
F1 EQU 0A0H
F2 EQU 0A1H
F4 EQU 0A2H
F8 EQU 0A3H
F16 EQU 0A4H
F32 EQU 0A5H
F64 EQU 0A6H
F128 EQU 0A7H
TOPT EQU 0E0H
TNORMAL EQU 0E3H
;***************************************************************************
;---------------------------------------------------------------------------
ORG 0000H
AJMP MAIN
;----------------------------------------------------------------------------
ORG 0030H
MAIN:
MOV R7,#00H
DJNZ R7,$
MOV SP,#STACK
MOV R0,#20H
CLR A
CLR_RAM:
MOV @R0,A
INC R0
CJNE R0,#80H,CLR_RAM
MOV A,#0FFH
;MOV P0,A
MOV P1,A
;MOV P2,A
MOV P3,A
MOV ERROR_FLAG,#00H
;****************************************************************************
;----------------------------------------------------------------------------
MAIN_LOOP:
NOP
NOP
LCALL CS1821_INIT
LCALL CS1821_DIS_1 ;DISPLAY 'CS1821 ----- -----'
LCALL DELAY_400MS ;DELAY ABOUT 800MS
LCALL DELAY_400MS
LCALL DELAY_400MS
LCALL CS1821_DIS_2 ;显示A,B,C,D,E,F,G,H共8个笔画
;LCALL DELAY_20MS
LCALL CS1821_DIS_3 ;显示10次9~0共10个数字
LCALL DELAY_400MS
LCALL DELAY_400MS
LCALL DELAY_400MS
;LCALL DELAY_400MS
;LCALL CS1821_DIS_4 ;显示16次F~0共16个字符
;LCALL DELAY_20MS
LCALL CS1821_DIS_5 ;显示F~0共16个字符
LCALL DELAY_400MS
LCALL DELAY_400MS
LCALL DELAY_400MS
;LCALL DELAY_400MS
LCALL DIS_RAM_READ ;READ RAM SUB
LCALL LOOK_UP_TAB5
LCALL DATA_COMPARE
MOV A,ERROR_FLAG
JB ACC.7,MAIN_EXIT_1
LCALL READ_MODIFY_WRITE ;READ_MODIFY_WRITE
LJMP MAIN_EXIT_2
MAIN_EXIT_1:
LCALL DIS_ERROR
LJMP MAIN_EXIT_3
MAIN_EXIT_2:
;LCALL CS1821_DIS
LCALL DELAY_400MS
LCALL DELAY_400MS
LCALL DELAY_400MS
;LCALL DELAY_400MS
MAIN_EXIT:
SJMP $
;SJMP MAIN_LOOP
main_exit_3:
sjmp $
NOP
NOP
;--------------------------------------------------------------------------
;***************************************************************************
CS1821_INIT:
SETB CS1821_CS
SETB CS1821_WR
LCALL DELAY
CLR CS1821_CS ;CS EN
MOV R1,#ID_COMMAND
LCALL ID_WR
MOV R2,#SYS_EN
MOV R3,#X
LCALL COMMAND_WR
LCALL X_WR
MOV R2,#LCD_ON
MOV R3,#X
LCALL COMMAND_WR
LCALL X_WR
MOV R2,#TIMER_EN ;允许时间基准输出
MOV R3,#X
LCALL COMMAND_WR
LCALL X_WR
MOV R2,#BIAS_3 ;LCD 1/3 BIAS 1/4 DUTY
MOV R3,#X
LCALL COMMAND_WR
LCALL X_WR
MOV R2,#RC_256K ;系统时钟为片内RC振荡器256K
MOV R3,#X
LCALL COMMAND_WR
LCALL X_WR
;MOV R2,#XTAL_32K ;系统时钟为晶体振荡器32.768K
;MOV R3,#X
;LCALL COMMAND_WR
;LCALL X_WR
MOV R2,#IRQ_DIS ;禁止IRQ输出
MOV R3,#X
LCALL COMMAND_WR
LCALL X_WR
MOV R2,#TONE_ON ;开启蜂鸣输出
MOV R3,#X
LCALL COMMAND_WR
LCALL X_WR
;MOV R2,#TONE_4K ;蜂鸣频率:4KHz
MOV R2,#TONE_2K
MOV R3,#X
LCALL COMMAND_WR
LCALL X_WR
LCALL DELAY_20MS ;蜂鸣时间160MS
LCALL DELAY_20MS
LCALL DELAY_20MS
LCALL DELAY_20MS
LCALL DELAY_20MS
LCALL DELAY_20MS
LCALL DELAY_20MS
LCALL DELAY_20MS
;MOV R2,#TONE_OFF ;禁止蜂鸣输出
;MOV R3,#X
;LCALL COMMAND_WR
;LCALL X_WR
MOV R2,#IRQ_EN ;允许IRQ输出
MOV R3,#X
LCALL COMMAND_WR
LCALL X_WR
SETB CS1821_CS
NOP
NOP
NOP
NOP
RET
;---------------------------------------------------------------------------
;***************************************************************************
CS1821_DIS_1:
SETB CS1821_CS
LCALL DELAY
CLR CS1821_CS ;CS EN
MOV R1,#ID_DATA
LCALL ID_WR
MOV R5,#06H
MOV R2,#RAM_ADD
LCALL COMMAND_WR_1
;---------------------------------------------------------------------------
MOV COUNT,#10H ;共显示"CS1821 2006- 01-05"十六个字符
MOV R7,#00H
CS1821_DIS_1_1:
LCALL DIS_DATA_WR_1
nop
INC R7
DJNZ COUNT,CS1821_DIS_1_1
NOP
NOP
RET
;---------------------------------------------------------------------------
;****************************************************************************
CS1821_DIS_2: ;显示A,B,C,D,E,F,G,H共8个笔画
SETB CS1821_CS
LCALL DELAY
CLR CS1821_CS
MOV R1,#ID_DATA ;将数据ID(101)写入CS1821
LCALL ID_WR
CS1821_DIS_2_1:
MOV R5,#06H ;将显示RAM的六位地址写入CS1821
MOV R2,#RAM_ADD ;地址从00H开始
LCALL COMMAND_WR_1
;---------------------------------------------------------
MOV COUNT,#0BH
MOV R7,#00H
CS1821_DIS_2_2:
LCALL DIS_DATA_WR_2
LCALL DELAY_400MS
LCALL DELAY_20MS
LCALL DELAY_20MS
;LCALL DELAY_20MS
INC R7
DJNZ COUNT,CS1821_DIS_2_2
RET
;-----------------------------------------------------------------------------
;*****************************************************************************
CS1821_DIS_3: ;共显示9~0十个数字
SETB CS1821_CS
LCALL DELAY
CLR CS1821_CS ;CS EN
MOV R1,#ID_DATA
LCALL ID_WR
MOV R5,#06H
MOV R2,#RAM_ADD
LCALL COMMAND_WR_1
;---------------------------------------------------------------------------
MOV COUNT,#10H
MOV R7,#00H
CS1821_DIS_3_1:
LCALL DIS_DATA_WR_3
;LCALL DELAY_400MS
;LCALL DELAY_20MS
;LCALL DELAY_20MS
INC R7 ;显示下一个数据
DJNZ COUNT,CS1821_DIS_3_1
RET
;-------------------------------------------------------------------------
;**************************************************************************
CS1821_DIS_4:
SETB CS1821_CS
LCALL DELAY
CLR CS1821_CS ;CS EN
MOV R1,#ID_DATA
LCALL ID_WR
MOV R5,#06H
MOV R2,#RAM_ADD
LCALL COMMAND_WR_1
;---------------------------------------------------------------------------
MOV COUNT,#11H ;
MOV R7,#00H
CS1821_DIS_4_1:
LCALL DIS_DATA_WR_4
LCALL DELAY_400MS
INC R7 ;显示下一个数据
DJNZ COUNT,CS1821_DIS_4_1 ;
RET
;--------------------------------------------------------------------------
;***************************************************************************
CS1821_DIS_5:
SETB CS1821_CS
LCALL DELAY
CLR CS1821_CS ;CS EN
MOV R1,#ID_DATA
LCALL ID_WR
MOV R5,#06H
MOV R2,#RAM_ADD
LCALL COMMAND_WR_1
;---------------------------------------------------------------------------
MOV COUNT,#10H ;
MOV R7,#00H
CS1821_DIS_5_1:
LCALL DIS_DATA_WR_5
INC R7 ;显示下一个数据
DJNZ COUNT,CS1821_DIS_5_1 ;
RET
;--------------------------------------------------------------------------
;**************************************************************************
CS1821_DIS_CLR:
SETB CS1821_CS
LCALL DELAY
CLR CS1821_CS
MOV R1,#ID_DATA ;将数据ID(101)写入CS1821
LCALL ID_WR
MOV R5,#06H ;将显示RAM的六位地址写入CS1821
MOV R2,#RAM_ADD ;地址从00H开始
LCALL COMMAND_WR_1
MOV R7,#00H
MOV DPTR,#DIS_TAB_CLR ;20050907 ADD
MOV A,R7
MOVC A,@A+DPTR
MOV B,A ;另存显示数据
;---------------------------------------------------------
MOV R0,#10H ;共16个字节,32个显示RAM
CS1821_DIS_CLR_1:
MOV A,B
ANL A,#0F0H ;取显示数据的的高四位
MOV R3,A ;将高四位查表显示数据送入R3
LCALL DATA_WR
MOV A,B
ANL A,#0FH ;取显示数据的低四位
SWAP A
MOV R3,A ;将低四位查表显示数据送入R3
LCALL DATA_WR
DJNZ R0,CS1821_DIS_CLR_1
RET
;---------------------------------------------------------------------------
;***************************************************************************
DIS_ERROR:
SETB CS1821_CS
LCALL DELAY
CLR CS1821_CS ;CS EN
MOV R1,#ID_DATA
LCALL ID_WR
MOV R5,#06H
MOV R2,#RAM_ADD
LCALL COMMAND_WR_1
;---------------------------------------------------------------------------
MOV COUNT,#10H
MOV R7,#00H
DIS_ERROR_1:
LCALL DIS_ERROR_WR
nop
INC R7
DJNZ COUNT,DIS_ERROR_1
NOP
NOP
RET
;---------------------------------------------------------------------------
;***************************************************************************
DIS_RIGHT:
SETB CS1821_CS
LCALL DELAY
CLR CS1821_CS ;CS EN
MOV R1,#ID_DATA
LCALL ID_WR
MOV R5,#06H
MOV R2,#RAM_ADD
LCALL COMMAND_WR_1
;---------------------------------------------------------------------------
MOV COUNT,#10H
MOV R7,#00H
DIS_RIGHT_1:
LCALL DIS_RIGHT_WR
nop
INC R7
DJNZ COUNT,DIS_RIGHT_1
NOP
NOP
RET
;---------------------------------------------------------------------------
;****************************************************************************
;-------------------显示数据写入子程序--------------------------------------
;-----------------------------------------------------------------------------
DIS_DATA_WR_1:
MOV DPTR,#DIS_TAB_1 ;20051130 ADD
MOV A,R7
MOVC A,@A+DPTR
MOV B,A ;另存显示数据
;---------------------------------------------------------------------------
MOV R0,#01H ;每次写入一个数据
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -