; MCU 89C52
; Fosc 11.0592MHz
;*************************************************************************************
;/*HT1621 4x32 Segment lcd Driver IC */
;/* /CS: 片选
; BZ,/BZ: 声音输出
; /WR: 写脉冲输入,接一上拉电阻。在/WR信号的上升沿,DATA线上的数据写到HT1621。
; /RD: 读脉冲输入,接一上拉电阻。在/RD信号的下降沿,HT1621内存的数据被读到
; DATA线上,主控器可以在下个上升沿时锁存这些数据;
; DATA: 外接上拉电阻的串行数据输入/输出;
; /IRQ: 时基或WDT溢出输出,NMOS开漏输出;
; 命令 代码 数据/命令 功 能
; DEAD 110,A5A4A3A2A1A0,D0D1D2D3 数据 读RAM数据
; WRITE 101,A5A4A3A2A1A0,D0D1D2D3 数据 写数据到RAM
; READ-MODI
; FY-WRITE 101,A5A4A3A2A1A0,D0D1D2D3 数据 读和写数据
; SYS DIS 100,0-0000-000X (00H) 命令0 关闭系统振荡器和LCD偏压发生器
; SYS EN 100,0-0000-001X (02H) 命令0 打开系统振荡器
; LCD OFF 100,0-0000-010X (04H) 命令0 关闭LCD偏压发生器
; LCD ON 100,0-0000-011X (06H) 命令0 打开LCD偏压发生器
; TIMER DIS 100,0-0000-100X (08H) 命令0 时基输出失效
; WDT DIS 100,0-0000-101X (0AH) 命令0 WDT溢出标志输出失效
; TIMER ON 100,0-0000-110X (0CH) 命令0 时基输出使能
; WDT ON 100,0-0000-111X (0EH) 命令0 WDT溢出标志输出使能
; TONE OFF 100,0-0001-000X (10H) 命令0 关闭声音输出
; TONE ON 100,0-0001-001X (12H) 命令0 打开声音输出
; CLR TIMER 100,0-0001-1XXX (18H) 命令0 时基发生器清零
; CLR WDT 100,0-0001-11XX (1CH) 命令0 清除WDT状态
; XTAL 32K 100,0-0010-1XXX (28H) 命令0 系统时钟源,晶振
; RC 256K 100,0-0011-0XXX (30H) 命令0 系统时钟源,片内256K RC振荡器
; EXT 256K 100,0-0011-1XXX (38H) 命令0 系统时钟源,外部时钟
; BIAS 1/2 100,0-010a-bX0X (XXH) 命令0 LCD 1/2偏压选项,
; (40H) ab=00: 2COM
; (48H) ab=01: 3COM
; (50H) ab=10: 4COM
; BIAS 1/3 100,0-010a-bX1X (XXH) 命令0 LCD 1/3偏压选项,
; (42H) ab=00: 2COM
; (4AH) ab=01: 3COM
; (52H) ab=10: 4COM
; TONE 4K 100,0-10XX-XXXX (80H) 命令0 声音频率,4KHz
; TONE 2K 100,0-11XX-XXXX (C0H) 命令0 声音频率,2KHz
;//////////////////////////////////////////////////////////////////////////
; /IRQ DIS 100,1-00X0-XXXX (00H) 命令1 使/IRQ输出失效
; /IRQ EN 100,1-00X1-XXXX (10H) 命令1 使/IRQ输出有效
; F1 100,1-01XX-000X (40H) 命令1 时基/WDT时钟输出1Hz
; F2 100,1-01XX-001X (42H) 命令1 时基/WDT时钟输出2Hz
; F4 100,1-01XX-010X (44H) 命令1 时基/WDT时钟输出4Hz
; F8 100,1-01XX-011X (46H) 命令1 时基/WDT时钟输出8Hz
; F16 100,1-01XX-100X (48H) 命令1 时基/WDT时钟输出16Hz
; F32 100,1-01XX-101X (4AH) 命令1 时基/WDT时钟输出32Hz
; F64 100,1-01XX-110X (4CH) 命令1 时基/WDT时钟输出64Hz
; F128 100,1-01XX-111X (4EH) 命令1 时基/WDT时钟输出128Hz
; TOPT 100,1-1100-000X (C0H) 命令1 测试模式
; TNORMOL 100,1-1100-011X (C6H) 命令1 普通模式
; */
;
;/*****************************************************************/
SYS_DIS DATA 00H
SYS_EN DATA 02H
LCD_OFF DATA 04H
LCD_ON DATA 06H
TIMER_DIS DATA 08H
WDT_DIS DATA 0AH
TIMER_ON DATA 0CH
WDT_ON DATA 0EH
TONE_OFF DATA 10H
TONE_ON DATA 12H
CLR_TIMER DATA 18H
CLR_WDT DATA 1CH
XTAL_32K DATA 28H
RC_256K DATA 30H
EXT_256K DATA 38H
BIAS1_2 DATA 50H ;/*4COM*/
;//BIAS1_2 DATA 48H /*3COM*/
;//BIAS1_2 DATA 40H /*2COM*/
BIAS1_3 DATA 52H ;/*4COM*/
;//BIAS1_3 DATA 4AH /*3COM*/
;//BIAS1_3 DATA 42H /*2COM*/
TONE_4K DATA 80H
TONE_2K DATA 0C0H
;******************************************************************
DATA_1621 BIT P1.4
WR_1621 BIT P1.5
RD_1621 BIT P1.6
CS_1621 BIT P1.7
COMM_1621 DATA 07H ;/命令码寄存器* R7 */
;/******************************************************************/
;初始化HT1621
;/******************************************************************/
INTI_HT1621:
MOV COMM_1621,#BIAS1_3 ;/* 设置偏压(1/3)和占空比(1/4)*/
LCALL SENDCOMM_1621A
MOV COMM_1621,#SYS_EN ;/* 打开系统振荡器 */
LCALL SENDCOMM_1621A
MOV COMM_1621,#RC_256K ;/* 选择片内256KHz振荡器 */
LCALL SENDCOMM_1621A
MOV COMM_1621,#LCD_ON ;/* 打开LCD偏压发生器 */
LCALL SENDCOMM_1621A
;MOV COMM_1621,#TONE_2K ;/* 声音频率,2KHz */
;LCALL SENDCOMM_1621A
;/*******************************************************/
;/*********HT1621 命令模式子程序: ********/
;/*********SENDCOMM_1621A: ID+0 ********/
;/*********SENDCOMM_1621B: ID+1 ********/
;/*******************************************************/
SENDCOMM_1621A:
MOV A,#80H ;/* ID 100+0 */
SJMP SENDCOMM_1621
SENDCOMM_1621B:
MOV A,#90H ;/* ID 100+1 */
SENDCOMM_1621:
CLR CS_1621 ;/* REDAY */
MOV R6,#04H ;/* SEND ID+0/1 */
ACALL SENDBIT_1621
MOV R6,#08H ;/* SEND COMMAND */
MOV A,COMM_1621
ACALL SENDBIT_1621
SETB CS_1621
SETB WR_1621
SETB DATA_1621
RETI
;/*******************************************************/
;/*******HT1621 数据模式子程序: ********/
;/*******数据首址在R0 ********/
;/*******向HT1621连续写入N(R7)字节数据 ********/
;/*******HT1621RAM 首地址在寄存器 A 里 ********/
;/*******在调用该子程序前要预置地址和字节数 ********/
;/*******************************************************/
SENDDATA_1621:
CLR CS_1621
SETB C
CLR WR_1621 ;ID第一位
MOV DATA_1621,C ;WR '1' TO 1621
SETB WR_1621
ANL A,#3FH ;确保地址有效
OR A,#40H ;ID低2位
;MOV A,#40H ;'01-000000'ID低2位+地址00
MOV R6,#08H
ACALL SENDBIT_1621
SENDDATA0:
MOV A,@R0
MOV R6,#08H
ACALL SENDBIT_1621
INC R0 ;数据地址加1
DJNZ R7,SENDDATA0
SETB CS_1621
SETB WR_1621
SETB DATA_1621
RETI
;/*******************************************************/
;/*******向HT1621写入n Bit数据,n=R6<=8 *********/
;/*******************************************************/
SENDBIT_1621: ;/* SEND n BIT TO HT1621 */
RLC A
CLR WR_1621
MOV DATA_1621,C
SETB WR_1621
DJNZ R6,SENDBIT_1621
RETI
;**********************************************************
END
一周热门 更多>