⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 12864p.asm

📁 51单片机对SPLC501写的ASM程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;********************************************* 
;* 128x64P COG 演示程序 (IC(COG): SPLC501C 并行控制)
;* 程序编写:吴巍
;* Date: 2005,08,22 
;* IC(COG): SPLC501C 
;* INTERFACE:MPU-89S5x
;* 网址:www.cdream5.com
;********************************************* 
org 000H

jmp begin

;=====硬件连接参加如下=========================
CS1  EQU P1.0     ;
RES  EQU P1.1     ;复位端,低电平触发有效,正常时 高电平 
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      复位     
 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    设置显示方向      
 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    对比度设置 020H~027H           
 LCALL    TCOM 
 MOV      A,#081H         ;set reference voltage mode            
 LCALL    TCOM 
 MOV      A,#019H         ;set reference voltage  亮度电压调节 00H~03FH  先发指令 81H,后写具体值 
 LCALL    TCOM   
     ;以上2条指令互相配合可以调节到合适得对比度    
          
 MOV      A,#0A6H         ;set reverse display OFF  ,正 反显示设置      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
  
;===================显示定义好的字符===================================
;调用前先指定 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           ;页设置指令,高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单元数
DCR1:
  MOV R0,#016          ;显示列数 
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单元数
  
DPC1:
  MOV R0,#016                             ;显示列数 
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     ; 下个行地址超过就退出循环
  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------------------------- 

;====忙查寻==============================================
;在高速中,使用忙查询会稳定显示效果
;========================================================
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-------------------------------------------
  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -