?? 12864p.asm
字號:
;*********************************************
;* 128x64P COG 演示程序 (IC(COG): SPLC501C 并行控制)
;* 程序編寫:吳巍
;* Date: 2005,08,22
;* IC(COG): SPLC501C
;* INTERFACE:MPU-89S5x
;* 網(wǎng)址:www.cdream5.com
;*********************************************
org 000H
jmp begin
;=====硬件連接參加如下=========================
CS1 EQU P1.0 ;
RES EQU P1.1 ;復(fù)位端,低電平觸發(fā)有效,正常時 高電平
A0 EQU P1.6 ;
RW EQU P1.7 ;
E_RD EQU P3.4 ;
Data_bus data P0 ;LCM Data bus
;----------------------------------------------
HZ_P data 51H ;頁地址
HZ_C data 52H ;行地址
HZ_H data 53H ;字高 16x16顯示的時候 =2
ORG 0030H
begin:
call lcm_init ;初始化
MOV R5,#08H
MOV R3,#00H
call busy_check
call clr_screen ;清屏
TSTART:
;call delay_ns
MOV DPTR,#PIC1 ;顯示圖片1
call disp_pic
call delay_ns
call clr_screen
call disp_all ;滿屏顯示同一個文字 16x16 32個漢字
call delay_ns
call clr_screen
call disp_wei ;顯示一個漢字 16x16
call delay_ns
MOV DPTR,#PIC2 ;顯示自定義圖片
call disp_pic
call delay_ns
MOV DPTR,#PIC3 ;顯示圖片3,12x12滿屏漢字
call disp_pic
call delay_ns
call clr_screen
call Print_string ;顯示一行漢字
;call light_test
call delay_ns
call clr_screen
jmp TSTART
;===LCM initalization 初始化=======
LCM_INIT:
LCALL DELAY
CLR RES ;initalization reset 復(fù)位
LCALL DELAY
LCALL DELAY
SETB RES
LCALL DELAY
MOV A,#0E2H ;initialize interal function
LCALL TCOM
LCALL DELAY
MOV A,#0A2H ;set LCD bias=1/9
LCALL TCOM
MOV A,#0C8H ;set SHL COM1 to COM64 =C0H,set SHL COM64 to COM1 =C8H 設(shè)置顯示方向
LCALL TCOM
MOV A,#0A0H ;ADC select SEG0 to SEG131 A1H 顯示圖像左右鏡像
LCALL TCOM
MOV A,#040H ;Initial Display Line
LCALL TCOM
MOV A,#02CH
LCALL TCOM
LCALL DELAY
MOV A,#02EH
LCALL TCOM
LCALL DELAY
MOV A,#02FH ;power control(VC,VR,VF=1,1,1)
LCALL TCOM
LCALL DELAY
;----------------------------
MOV A,#023H ;Regulator resistor select 對比度設(shè)置 020H~027H
LCALL TCOM
MOV A,#081H ;set reference voltage mode
LCALL TCOM
MOV A,#019H ;set reference voltage 亮度電壓調(diào)節(jié) 00H~03FH 先發(fā)指令 81H,后寫具體值
LCALL TCOM
;以上2條指令互相配合可以調(diào)節(jié)到合適得對比度
MOV A,#0A6H ;set reverse display OFF ,正 反顯示設(shè)置 A6 正顯示 A7反顯示
LCALL TCOM
MOV A,#0D2h ;driving mode set
LCALL TCOM
MOV A,#000H ;MODE 1
LCALL TCOM
MOV A,#0AFH ;turns the display ON
LCALL TCOM
ret
;***********Initial over***********
;======亮度測試========
Light_test:
mov r7,#00H
LT_LOOP:
call delay_ns
MOV A,#10000001B ;set column address MSB ;列地址 高4位
CALL TCOM
mov a,r7
call tcom ;change亮度
cjne r7,#03Fh,LTA
mov r7,#00h
jmp lt_loop
LTA:
inc R7
jmp LT_LOOP
;==========顯示一行字 16x16=======================
;顯示一行16x16的字符 8個
Print_String:
MOV DPTR,#CHAR_s ;指定字符頭地址
mov HZ_P,#01H ;行
MOV HZ_C,#07H ;列 (段)
DWLOOP:
;call delay_ns
call disp_char
mov a,hz_c
add a,#16 ;顯示完一個漢字后 段地址加16 即下一個漢字得地址 最大 128
mov HZ_C,a
mov HZ_P,#01H
cjne a,#119,DWLOOP
mov HZ_C,#00
ret
;-------------Over-------------------------------------------------------
;========顯示一個字======================================================
Disp_wei:
MOV DPTR,#CHAR_wei ;指定字符頭地址
mov HZ_P,#02H ;行
MOV HZ_C,#060 ;列 (段)
Disp_WD:
;call delay_ns
call disp_char
ret
;---------------Over--------------------------------------------------
;==============顯示一屏字====================
Disp_all:
MOV DPTR,#CHAR_s ;指定字符頭地址
mov HZ_P,#00H ;行
MOV HZ_C,#00H ;列 (段)
mov 55H,#00 ;漢字顯示起始行
DPL1:
;call delay_ns
call disp_char
mov a,hz_c
add a,#16 ;顯示完一個漢字后 段地址加16 即下一個漢字得地址 最大 128
mov HZ_C,a
mov HZ_P,59H
MOV DPTR,#CHAR_s ;dptr地址回寫
cjne a,#128,DPL1
mov HZ_C,#00
inc 59H
inc 59H
inc HZ_P
inc HZ_P
MOV DPTR,#CHAR_s
mov a,59H
cjne a,#08,dpl1
ret
;===================顯示定義好的字符===================================
;調(diào)用前先指定 HZ_P行 HZ_C列,DPTR 字符地址
;======================================================================
Disp_char:
mov HZ_H,#2 ;16x16字高 =2
MOV R2,HZ_P ;顯示行(頁,共8頁 0~7)
DCR2:
MOV A,R2 ;set page address
setb acc.7
clr acc.6
setb acc.5
setb acc.4 ;頁設(shè)置指令,高4位1011
CALL TCOM
mov a,HZ_C
swap A ;高4位 移動到低4位上
clr acc.7
clr acc.6
clr acc.5
setb acc.4 ;高4位指令 0001
;MOV A,#00010000B ;set column address MSB ;列地址 高4位
CALL TCOM
mov a,HZ_C
clr acc.7
clr acc.6
clr acc.5
clr acc.4 ;高四位指令 0000
;MOV A,#00000000B ;set column address LSB ;列地址 低4位 128x64 列地址從0~128
LCALL TCOM
MOV R1,#01H ;set (8*16)*16characters ;每行(頁)顯示8x16單元數(shù)
DCR1:
MOV R0,#016 ;顯示列數(shù)
DCR0:
MOV A,#0H
MOVC A,@A+DPTR
CALL TDATA
INC DPTR
DJNZ R0,DCR0 ;顯示一個 8x16圖案
DJNZ R1,DCR1 ;
INC R2
djnz HZ_H,DCR2 ;顯示完2個字高后就退出
RET
;----------------------Over-------------------------------------
;=======================顯示一屏圖片============================
Disp_PIC:
;mov R3,#0
;MOV DPTR,#PIC3 ;圖片地址
MOV R2,#0B0H ;顯示行(頁,共8頁 0~7)
DPC2:
MOV A,R2 ;set page address
LCALL TCOM
MOV A,#00010000B ;set column address MSB ;列地址 高4位
LCALL TCOM
MOV A,#00000000B ;set column address LSB ;列地址 低4位 128x64 列地址從0~128
LCALL TCOM
MOV R1,#08H ;set (8*16)*16characters ;每行(頁)顯示8x16單元數(shù)
DPC1:
MOV R0,#016 ;顯示列數(shù)
DPC0:
MOV A,#0h ;R3=char 偏移量
MOVC A,@A+DPTR
CALL TDATA
INC DPTR
DJNZ R0,DPC0 ;顯示一個 8x16圖案
DJNZ R1,DPC1 ;
INC R2 ;行地址增加
CJNE R2,#0B8H,DPC2 ; 下個行地址超過就退出循環(huán)
RET
;--------------------Over---------------------------------------
;改變顯示位置
test1:
MOV A,#01000111B
LCALL TCOM
; call disp_1
MOV A,#01001111B
LCALL TCOM
MOV A,#01011111B
TTE:
LCALL TCOM
;cjne a,#64,TTE
ret
;==========清屏==========================================
;實際上就是RAM中全寫00H
;========================================================
clr_screen:
mov r2,#0B0h
clr_2:
MOV A,R2 ;set page address
LCALL TCOM
MOV A,#010H ;set column address MSB ;列地址
LCALL TCOM
MOV A,#00H ;set column address LSB ;列地址
LCALL TCOM
MOV R1,#010H ;set (8*8)*16characters
clr1:
MOV R0,#08H
clr0:
mov a,#00h
call tdata
DJNZ R0,clr0
DJNZ R1,clr1
INC R2
LCALL DELAY
CJNE R2,#0B8H,clr_2
ret
;----------------CLR Screen Over-------------------------
;====忙查尋==============================================
;在高速中,使用忙查詢會穩(wěn)定顯示效果
;========================================================
busy_check:
mov data_bus,#0FFH
mov a,data_bus
SETB CS1
CLR CS1 ;cs1=0
CLR A0 ;a0=0
setb RW ;RW=1
clr e_rd ;RD=0
nop
nop
mov a,data_bus
setb e_rd
nop
nop
setb cs1 ;
;jmp busy_check
ret
;------------------Over-------------------------------------------
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -