📄 driver_lm7221sgl.asm
字号:
; *****************************************************************
; *LM7221SGL点阵液晶驱动程序[column driver:T7932;row driver:T7933]*
; *****************************************************************
E_T7932 BIT P2.0; 片使能信号,下降沿写数据锁存;高电平时输出给单片机
RW_T7932 BIT P2.1; 读写控制信号,H:读;L:写
DI_T7932 BIT P2.2; H:数据;L:指令
CS3A_T7932 BIT P2.6; T7932(IC1)片选信号,H:使能
CS3B_T7932 BIT P2.5; T7932(IC2)片选信号,H:使能
CS3C_T7932 BIT P2.4; T7932(IC3)片选信号,H:使能
RST_T7932 BIT P2.3; T7932复位信号,低电平有效
LED_T7932 BIT P2.7; 背光控制,低电平有效
Busy_T7932 BIT P0.7; 液晶忙标志
Data_t7932 EQU P0; 液晶数据IO使用P0口
SelectFlag BIT 20H.0; 反白标志,高电平有效
IntFlag BIT 20H.1; 数据类型标志,高电平表示有符号数,低电平表示无符号数
Databuf EQU 21H; 通用数据缓存
Address EQU 22H; 液晶绘图起始地址
ByteCount EQU 23H; 通用读写字节数(液晶,DS1302)计数
EndAdr EQU 24H; 液晶绘图结束地址
Chip EQU 25H; 液晶片选
PageN EQU 26H; 液晶页选
DPLbuf EQU 27H; DPTR低位地址缓存
DPHbuf EQU 28H; DPTR高位地址缓存
ORG 0000H
SJMP Main
Main:
MOV R7,#09;
MOV R0,#20H;
ClearMemory:
MOV @R0,#00H;
INC R0;
DJNZ R7,ClearMemory;
CALL T7932_Init; 初始化
CALL T7932_Clear; 清屏
CLR LED_T7932; 开背光
; 液晶驱动使用示例一
;/*************************************************
; 8*16字体字符串 enjoydiy
SETB SelectFlag;
MOV DPTR,#Table_Str;
MOV PageN,#00H; 显示页的地址(0-3)
MOV Address,#00; 显示地址0-149(00H-95H)
CALL T7932_WriStr8_16;
; 紧接着是6*8字体字符串 enjoydiy
SETB SelectFlag;
MOV DPTR,#Table_Str
CALL T7932_WriStr6_8; 调用显示字符串子程序
; 单个ASCLL码字符 a
MOV A,#61H;
CALL T7932_WriSigalASCLL8_16;
MOV A,#61H;
CALL T7932_WriSigalASCLL6_8;
MOV Address,#00;
MOV PageN,#02H;
; 整型数据显示,方法一 255
MOV A,#0FFH;
CALL Hex_Num2ASCLL;
MOV A,R7;
CALL T7932_WriSigalASCLL6_8;
MOV A,R6;
CALL T7932_WriSigalASCLL6_8;
MOV A,R5;
CALL T7932_WriSigalASCLL6_8;
; 整型数据显示,方法二
MOV A,#0FFH; 255
CALL Display_INT_Number;
SETB IntFlag; 声明为有符号数
MOV A,#0FFH; -127
CALL Display_INT_Number;
;*********************************************/
AJMP $;
; ************
; *读忙子程序*
; ************
; 功能:
; 液晶读忙
; 入口参数:
; 无
; 出口参数:
; 无
; 占用资源:
; 无
T7932_busy:
CLR DI_T7932;
SETB RW_T7932;
MOV Data_t7932,#0FFH;
SETB E_T7932;
JB Busy_T7932,T7932_busy;
RET
; ******************
; *液晶初始化子程序*
; ******************
; 功能:
; 液晶初始化,液晶开,设定起始页PageN0-3循环
; 入口参数:
; 无
; 出口参数:
; 无
; 占用资源:
; 无
T7932_Init:
CLR E_T7932; 液晶复位
CLR RST_T7932;
SETB RST_T7932;
CLR DI_T7932; 判断复位是否成功
SETB RW_T7932;
MOV Data_t7932,#0FFH;
SETB E_T7932;
JB Data_t7932.4,$;
SETB CS3A_T7932; 显示开(详见T7932的Datasheet)
SETB CS3B_T7932;
CLR CS3C_T7932;
CALL T7932_busy;
CLR DI_T7932;
CLR RW_T7932;
SETB E_T7932;
MOV Data_t7932,#39H;
CLR E_T7932;
CALL T7932_busy; 设置起始页(详见T7932的Datasheet)
CLR DI_T7932;
CLR RW_T7932;
SETB E_T7932;
MOV Data_t7932,#3EH;
CLR E_T7932;
RET
; ****************************
; *液晶显示起始地址设定子程序*
; ****************************
; 功能:
; 设定液晶显示起始地址,根据片选值设定片选
; 入口参数:
; Chip. 片选值(Chip = 00 or 01 or 10)
; PageN. 页地址
; Address. 显示地址(0-49)
; 出口参数:
; 无
; 占用资源:
; A,Chip,PageN,Address
T7932_SetAddress:
MOV A,Chip; 设置片选
JNB ACC.1,Chip_10; 若Chip为10,则IC3=1,IC1=IC2=0
CLR CS3A_T7932;
CLR CS3B_T7932;
SETB CS3C_T7932;
SJMP ChipSetEnd;
Chip_10:
CLR CS3C_T7932; 否则IC3=0
Chip_01:
JNB ACC.0,Chip_00; 若Chip为01,则IC2=1,IC3=IC1=0
CLR CS3A_T7932;
SETB CS3B_T7932;
SJMP ChipSetEnd;
Chip_00:
SETB CS3A_T7932; 否则IC1=1,IC3=IC2=0
CLR CS3B_T7932;
ChipSetEnd:
MOV A,PageN;
RL A;
RL A;
SWAP A;
ADD A,Address; 合成页地址和显示起始地址(详见T7932的Datasheet)
CALL T7932_busy;
CLR DI_T7932;
CLR RW_T7932;
SETB E_T7932; 写入显示起始地址
MOV Data_t7932,A;
CLR E_T7932;
RET
; ************
; *清屏子程序*
; ************
; 功能:
; 液晶清屏,先使能片选1再逐页清屏,接着是片2和片3,方法同样
; 入口参数:
; 无
; 出口参数:
; 无
; 占用资源:
; A,R7,R6,R5,Chip,PageN,Address
T7932_Clear:
MOV R7,#32H;
MOV R6,#04H;
MOV R5,#03;
MOV Chip,#00H;
MOV PageN,#00H;
ClearNextPage:
MOV Address,#00H;
CALL T7932_SetAddress;
Next:
CALL T7932_busy;
SETB DI_T7932;
CLR RW_T7932;
SETB E_T7932;
MOV Data_t7932,#00H;
CLR E_T7932;
DJNZ R7,Next;
MOV R7,#32H;
INC PageN; 清下一页
DJNZ R6,ClearNextPage;
MOV PageN,#00H;
MOV R6,#04H;
INC Chip; 清下一片
DJNZ R5,ClearNextPage;
RET
; *********************
; *自定义字符,字符串表*
; *********************
; 功能:
; 在此定义将要显示的字符串
; 入口参数:
; DPTR
; 出口参数:
; 返回字符在ASCLL码表中的值
Table_Str:
DB "enjoydiy",0;
; ********************************8*6LCD点阵字库************************
; 包括以下ASCII字符:
; !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`
; abcdefghijklmnopqrstuvwxyz{|}
; **********************************************************************
Table_ASCLL6_8:
DB 0x00,0x00,0x00,0x00,0x00,0x00 ;
DB 0x00,0xBE,0x00,0x00,0x00,0x00 ; !
DB 0x07,0x00,0x07,0x00,0x00,0x00 ; "
DB 0x24,0xFE,0x24,0xFE,0x24,0x00 ; #
DB 0x4C,0x92,0xFF,0x92,0x64,0x00 ; $
DB 0x8E,0x6E,0x10,0xEC,0xE2,0x00 ; %
DB 0x60,0x94,0x9A,0x64,0xA0,0x00 ; &
DB 0x04,0x03,0x00,0x00,0x00,0x00 ; '
DB 0x00,0x3C,0x42,0x81,0x00,0x00 ; (
DB 0x81,0x42,0x3C,0x00,0x00,0x00 ; )
DB 0x12,0x0C,0x3F,0x0C,0x12,0x00 ; *
DB 0x00,0x08,0x3E,0x08,0x00,0x00 ; +
DB 0xA0,0x60,0x00,0x00,0x00,0x00 ; ,
DB 0x08,0x08,0x08,0x08,0x00,0x00 ; -
DB 0x40,0x40,0x00,0x00,0x00,0x00 ; .
DB 0xC0,0x30,0x0C,0x03,0x00,0x00 ; /
DB 0x3E,0x41,0x41,0x3E,0x00,0x00 ; 0
DB 0x00,0x02,0x7F,0x00,0x00,0x00 ; 1
DB 0x62,0x51,0x49,0x46,0x00,0x00 ; 2
DB 0x22,0x49,0x49,0x36,0x00,0x00 ; 3
DB 0x30,0x2C,0x23,0x7F,0x20,0x00 ; 4
DB 0x27,0x45,0x45,0x39,0x00,0x00 ; 5
DB 0x3E,0x49,0x49,0x32,0x00,0x00 ; 6
DB 0x01,0x71,0x0D,0x03,0x00,0x00 ; 7
DB 0x36,0x49,0x49,0x36,0x00,0x00 ; 8
DB 0x26,0x49,0x49,0x3E,0x00,0x00 ; 9
DB 0x00,0x48,0x48,0x00,0x00,0x00 ; :
DB 0x00,0xA2,0x62,0x00,0x00,0x00 ; ;
DB 0x08,0x14,0x22,0x41,0x00,0x00 ; <
DB 0x14,0x14,0x14,0x14,0x00,0x00 ; =
DB 0x41,0x22,0x14,0x08,0x00,0x00 ; >
DB 0x02,0x01,0xD9,0x06,0x00,0x00 ; ?
DB 0x3E,0x41,0x5D,0x55,0x1E,0x00 ; @
DB 0x7C,0x13,0x13,0x7C,0x00,0x00 ; A
DB 0x7F,0x49,0x49,0x36,0x00,0x00 ; B
DB 0x3E,0x41,0x41,0x22,0x00,0x00 ; C
DB 0x7F,0x41,0x41,0x3E,0x00,0x00 ; D
DB 0x7F,0x49,0x49,0x41,0x00,0x00 ; E
DB 0x7F,0x09,0x09,0x01,0x00,0x00 ; F
DB 0x3E,0x41,0x49,0x7A,0x00,0x00 ; G
DB 0x7F,0x08,0x08,0x7F,0x00,0x00 ; H
DB 0x00,0x7F,0x00,0x00,0x00,0x00 ; I
DB 0x20,0x40,0x40,0x3F,0x00,0x00 ; J
DB 0x7F,0x08,0x14,0x63,0x00,0x00 ; K
DB 0x7F,0x40,0x40,0x40,0x00,0x00 ; L
DB 0x7F,0x0C,0x70,0x0C,0x7F,0x00 ; M
DB 0x7F,0x0C,0x30,0x7F,0x00,0x00 ; N
DB 0x3E,0x41,0x41,0x3E,0x00,0x00 ; O
DB 0x7F,0x11,0x11,0x0E,0x00,0x00 ; P
DB 0x3E,0x51,0x21,0x5E,0x00,0x00 ; Q
DB 0x7F,0x09,0x09,0x76,0x00,0x00 ; R
DB 0x26,0x49,0x49,0x32,0x00,0x00 ; S
DB 0x01,0x01,0x7F,0x01,0x01,0x00 ; T
DB 0x3F,0x40,0x40,0x3F,0x00,0x00 ; U
DB 0x07,0x18,0x60,0x18,0x07,0x00 ; V
DB 0x0F,0x70,0x0F,0x70,0x0F,0x00 ; W
DB 0x63,0x1C,0x1C,0x63,0x00,0x00 ; X
DB 0x03,0x04,0x78,0x04,0x03,0x00 ; Y
DB 0x61,0x51,0x4D,0x43,0x00,0x00 ; Z
DB 0x00,0x00,0xFF,0x81,0x00,0x00 ; [
DB 0x03,0x0C,0x70,0x80,0x00,0x00 ; \
DB 0x81,0xFF,0x00,0x00,0x00,0x00 ; ]
DB 0x02,0x01,0x02,0x00,0x00,0x00 ; ^
DB 0x80,0x80,0x80,0x80,0x80,0x00 ; _
DB 0x01,0x02,0x00,0x00,0x00,0x00 ; `
DB 0x24,0x54,0x54,0x78,0x00,0x00 ; a
DB 0x7F,0x44,0x44,0x38,0x00,0x00 ; b
DB 0x38,0x44,0x44,0x28,0x00,0x00 ; c
DB 0x38,0x44,0x44,0x7F,0x00,0x00 ; d
DB 0x38,0x54,0x54,0x58,0x00,0x00 ; e
DB 0x04,0x7E,0x05,0x04,0x00,0x00 ; f
DB 0x6C,0x92,0xAC,0x62,0x00,0x00 ; g
DB 0x7F,0x04,0x04,0x78,0x00,0x00 ; h
DB 0x00,0x00,0x7D,0x00,0x00,0x00 ; i
DB 0x80,0x80,0x7D,0x00,0x00,0x00 ; j
DB 0x7F,0x10,0x18,0x64,0x00,0x00 ; k
DB 0x00,0x00,0x7F,0x00,0x00,0x00 ; l
DB 0x7C,0x04,0x78,0x04,0x78,0x00 ; m
DB 0x7C,0x04,0x04,0x78,0x00,0x00 ; n
DB 0x38,0x44,0x44,0x38,0x00,0x00 ; o
DB 0xFC,0x24,0x24,0x18,0x00,0x00 ; p
DB 0x18,0x24,0x24,0xFC,0x00,0x00 ; q
DB 0x7C,0x08,0x04,0x00,0x00,0x00 ; r
DB 0x48,0x54,0x54,0x24,0x00,0x00 ; s
DB 0x04,0x3F,0x44,0x44,0x00,0x00 ; t
DB 0x3C,0x40,0x40,0x7C,0x00,0x00 ; u
DB 0x1C,0x60,0x60,0x1C,0x00,0x00 ; v
DB 0x1C,0x60,0x1C,0x60,0x1C,0x00 ; w
DB 0x64,0x18,0x18,0x64,0x00,0x00 ; x
DB 0x0C,0x90,0x60,0x1C,0x00,0x00 ; y
DB 0x64,0x54,0x4C,0x44,0x00,0x00 ; z
DB 0x00,0x08,0x76,0x81,0x00,0x00 ; {
DB 0x00,0x00,0xFF,0x00,0x00,0x00 ; |
DB 0x81,0x76,0x08,0x00,0x00,0x00 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -