📄 driver_pvg190602.asm
字号:
; ******************************************************************
; *S6B0108点阵液晶驱动程序[column driver:S6B0108;row driver:S6B0107*
; ******************************************************************
RS_S6B0108 BIT P2.0; H:数据;L:指令
RW_S6B0108 BIT P2.1; 读写控制信号,H:读;L:写
RE_S6B0108 BIT P2.2; 片使能信号,下降沿写数据锁存;高电平时输出给单片机
CSA_S6B0108 BIT P2.3; S6B0108片选信号,L:使能
CSB_S6B0108 BIT P2.4; S6B0108片选信号,L:使能
CSC_S6B0108 BIT P2.5; S6B0108片选信号,L:使能
RST_S6B0108 BIT P2.6; S6B0108复位信号,低电平有效
LED_S6B0108 BIT P3.0; 背光控制,低电平有效
Busy_S6B0108 BIT P0.7; 液晶忙标志
Data_S6B0108 EQU P0; 液晶数据IO使用P0口
; 液晶驱动标志位定义
SelectFlag BIT 20H.0; 反白标志,高电平有效
IntFlag BIT 20H.1; 数据类型标志,高电平表示有符号数,低电平表示无符号数
; 寄存器定义
Databuf EQU 22H; 通用数据缓存
Address EQU 23H; 液晶绘图起始地址
ByteCount EQU 24H; 通用读写字节数(液晶,DS1302)计数
EndAdr EQU 25H; 液晶绘图结束地址
Chip EQU 26H; 液晶片选
PageN EQU 27H; 液晶页选
DPLbuf EQU 28H; DPTR低位地址缓存
DPHbuf EQU 29H; DPTR高位地址缓存
ORG 0000H
SJMP Main
Main:
MOV R7,#09;
MOV R0,#20H;
ClearMemory:
MOV @R0,#00H;
INC R0;
DJNZ R7,ClearMemory;
CALL S6B0108_Init; 初始化
CALL S6B0108_Clear; 清屏
CLR LED_S6B0108; 开背光
LOOP:
; 液晶驱动使用示例一
/*************************************************
; 8*16字体字符串 enjoydiy
MOV PageN,#00H; 显示页的地址(0-3)
MOV Address,#00; 显示地址0-149(00H-95H)
MOV DPTR,#Table_Str;
CALL S6B0108_WriStr8_16
; 紧接着是6*8字体字符串 enjoydiy
MOV DPTR,#Table_Str
CALL S6B0108_WriStr6_8; 调用显示字符串子程序
; 单个ASCLL码字符 a
MOV A,#61H;
CALL S6B0108_WriSigalASCLL8_16;
MOV A,#61H;
CALL S6B0108_WriSigalASCLL6_8;
MOV Address,#00;
MOV PageN,#02H;
; 整型数据显示,方法一 255
MOV A,#0FFH;
CALL Hex_Num2ASCLL;
MOV A,R7;
CALL S6B0108_WriSigalASCLL6_8;
MOV A,R6;
CALL S6B0108_WriSigalASCLL6_8;
MOV A,R5;
CALL S6B0108_WriSigalASCLL6_8;
; 整型数据显示,方法二
MOV A,#0FFH; 255
CALL Display_INT_Number;
SETB IntFlag; 声明为有符号数
MOV A,#0FFH; -127
CALL Display_INT_Number;
;*********************************************/
;示例二
;/********************************************
MOV Address,#00;
MOV PageN,#00H;
MOV DPTR,#Table_Str;
CALL S6B0108_WriStr8_16;
;*********************************************/
JMP LOOP;
; ************
; *读忙子程序*
; ************
; 功能:
; 液晶读忙
; 入口参数:
; 无
; 出口参数:
; 无
; 占用资源:
; 无
S6B0108_busy:
CLR RS_S6B0108;
SETB RW_S6B0108;
MOV Data_S6B0108,#0FFH;
SETB RE_S6B0108;
JB Busy_S6B0108,S6B0108_busy;
RET
; ******************
; *液晶初始化子程序*
; ******************
; 功能:
; 液晶初始化,复位,开液晶显示
; 入口参数:
; 无
; 出口参数:
; 无
; 占用资源:
; 无
S6B0108_Init:
CLR RST_S6B0108;
SETB RST_S6B0108; 液晶复位
SETB CSC_S6B0108; 显示开IC1(详见S6B0108的Datasheet)
SETB CSB_S6B0108;
CLR CSA_S6B0108;
CALL S6B0108_busy;
CLR RS_S6B0108;
CLR RW_S6B0108;
SETB RE_S6B0108;
MOV Data_S6B0108,#3FH;
CLR RE_S6B0108;
SETB CSC_S6B0108;
CLR CSB_S6B0108; 显示开IC2(详见S6B0108的Datasheet)
SETB CSA_S6B0108;
CALL S6B0108_busy;
CLR RS_S6B0108;
CLR RW_S6B0108;
SETB RE_S6B0108;
MOV Data_S6B0108,#3FH;
CLR RE_S6B0108;
CLR CSC_S6B0108;
SETB CSB_S6B0108; 显示开IC3(详见S6B0108的Datasheet)
SETB CSA_S6B0108;
CALL S6B0108_busy;
CLR RS_S6B0108;
CLR RW_S6B0108;
SETB RE_S6B0108;
MOV Data_S6B0108,#3FH;
CLR RE_S6B0108;
RET
; ****************************
; *液晶显示起始位置设定子程序*
; ****************************
; 功能:
; 设定液晶显示起始位置,根据片选值设定片选
; 入口参数:
; Chip. 片选值(Chip = 00 or 01 or 10)
; PageN. 页地址
; Address. 显示地址(0-63)
; 出口参数:
; 无
; 占用资源:
; A,Chip,PageN,Address
S6B0108_SetAddress:
MOV A,Chip; 设置片选
JNB ACC.1,Chip_10; 若Chip为10,则IC3=0,IC1=IC2=1
SETB CSA_S6B0108;
SETB CSB_S6B0108;
CLR CSC_S6B0108;
SJMP ChipSetEnd;
Chip_10:
SETB CSC_S6B0108; 否则IC3=1
Chip_01:
JNB ACC.0,Chip_00; 若Chip为01,则IC2=0,IC3=IC1=1
SETB CSA_S6B0108;
CLR CSB_S6B0108;
SJMP ChipSetEnd;
Chip_00:
CLR CSA_S6B0108; 否则IC1=0,IC3=IC2=1
SETB CSB_S6B0108;
ChipSetEnd:
CALL S6B0108_busy; 设定页地址(X address))
CLR RS_S6B0108;
CLR RW_S6B0108;
SETB RE_S6B0108;
ORL PageN,#0B8H;
MOV Data_S6B0108,PageN;
CLR RE_S6B0108;
CALL S6B0108_busy; 设定地址(Y address)
CLR RS_S6B0108;
CLR RW_S6B0108;
SETB RE_S6B0108;
ORL Address,#40H;
MOV Data_S6B0108,Address;
CLR RE_S6B0108;
RET
; ************
; *清屏子程序*
; ************
; 功能:
; 液晶清屏,先使能片选1再逐页清屏,接着是片2和片3,方法同样
; 入口参数:
; 无
; 出口参数:
; 无
; 占用资源:
; A,R7,R6,R5,Chip,PageN,Address
S6B0108_Clear:
MOV R7,#40H;
MOV R6,#08H;
MOV R5,#03H;
MOV Chip,#00H;
MOV PageN,#00H;
ClearNextPage:
MOV Address,#00H;
CALL S6B0108_SetAddress;
Next:
CALL S6B0108_busy;
SETB RS_S6B0108;
CLR RW_S6B0108;
SETB RE_S6B0108;
MOV Data_S6B0108,#00H;
CLR RE_S6B0108;
DJNZ R7,Next;
MOV R7,#40H;
INC PageN; 清下一页
DJNZ R6,ClearNextPage;
MOV PageN,#00H;
MOV R6,#08H;
INC Chip; 清下一片
DJNZ R5,ClearNextPage;
RET
; *********************
; *自定义字符,字符串表*
; *********************
; 功能:
; 在此定义将要显示的字符串
; 入口参数:
; DPTR
; 出口参数:
; 返回字符在ASCLL码表中的值
Table_Str:
DB "enjoydiy000000000000000000000000",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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -