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

📄 lcdtest-st.dt

📁 ST7036点阵LCD 义隆单片机EM78P5841汇编语言
💻 DT
📖 第 1 页 / 共 2 页
字号:
;/**************************************************************
;/            To define general registers
;/**************************************************************
R0	==	0X00	;INDIRECT ADDRESSING REGISTER
TCC	==	0X01    ;TIMER/COUNTER
STATE	==	0X03	;STATUS REGISTER
    C       ==      0       ;CARRY BIT
    Z       ==      2       ;ZERO FLAG
    IOCPAGE ==      5       ;CHANGE IOC0~IOCE TO ANOTHER PAGE
    RPAGE0  ==      6       ;CHANGE R0~RE TO ANOTHER PAGE
    RPAGE1  ==      7       ;CHANGE R0~RE TO ANOTHER PAGE
R4	==	0X04     ;RAM SELECTION
   BIT6 == 6
   BIT7 == 7
R5	==	0X05     ;PROGRAM PAGE SELECTION
R6	==	0X06     
R7	==	0X07
ADDATAH	==	0X07	;THE CONTENTS ARE THE RUSULTS OF ADC
R8	==	0X08
R9	==	0X09
   XRESET == 0;
   SCL == 1;
   SDA == 2;
   LED == 3;
RA	==	0X0A	;WDTC CONTROL
RB      ==      0X0B
ADDATA	==	0X0B	;THE CONTENTS ARE THE RUSULTS OF ADC
RC	==	0X0C
RD    ==        0X0D
RE	==	0X0E
RF      ==	0X0F	;INTERRUPT STATUS REGISTER
;/**************************************************************
;/            To define special registers
;/**************************************************************
IOC5 	==	0X05	;CONTROL REGISTER OF PORT6
IOC6	==	0X06	;CONTROL REGISTER OF PORT6
IOC7	==	0X07	;CONTROL REGISTER OF PORT7
IOC8	==	0X08	;CONTROL REGISTER OF PORT7
IOC9	==	0X09	;CONTROL REGISTER OF PORT9
IOCA	==	0X0A	;ADC .7.8 PIN CONTROL
IOCB	==	0X0B	;IOCB ON PAGE0
IOCB1   ==      0X0B    ;ADC CONTROL ON PAGE1
IOCC	==	0X0C	;PORTC CONTROL ON PAGE0
IOCC1   ==      0X0C    ;PORT SWITCH ON  PAGE1
IOCD	==	0X0D	;CLOCK SOURCE/PRESCALER FOR TIMER
IOCE	==	0X0E	;INTERRUPT MASK
IOCF	==	0X0F	;INTERRUPT MASK 
;/**************************************************************
;/            To define common registers
;/**************************************************************
IIC == 0X10
IIC_TEMP == 0X11
IIC_STA == 0X12
   ERR == 0
ERRTIMES == 0X13
DELAY == 0X14
R4_BUF      ==    0X15   ;R4 INTERRUPT BUFFFER
TEMP == 0X16
LEVEL == 0X17
LCDTEST == 0X18
;/**************************************************************
;/                 Program start
;/**************************************************************
    ORG 0000H
    JMP RESET
;/**************************************************************
;/                    中断程序
;/**************************************************************
    ORG 0008H
    DISI
    WDTC
    SWAPA R4
    MOV R4_BUF,A
    PAGE 0
    BC STATE,RPAGE0
    BC STATE,RPAGE1
    BC R4,BIT6
    BC R4,BIT7
    MOV A,@0X00
    MOV RF,A
EXIT_INT:
    SWAPA R4_BUF
    MOV R4,A
    WDTC
    RETI
;/**************************************************************
;/                     初始化
;/**************************************************************
RESET:
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    WDTC
    DISI
    BC STATE,RPAGE0
    BC STATE,RPAGE1
    BC STATE,IOCPAGE
    MOV A,@0X79
    MOV RA,A
    MOV A,@0X00
    MOV R5,A
    MOV R6,A
    MOV R7,A
    MOV A,@0X06
    MOV R9,A
    MOV A,@0X00
    MOV RC,A
    MOV RD,A
    MOV RE,A
    MOV RF,A
    MOV A,@0X33                 
    CONTW
    BS STATE,RPAGE0
    MOV A,@0X04
    MOV R7,A
    MOV A,@0X00
    MOV RC,A
    BS STATE,RPAGE1
    MOV	A,@0X00
    MOV	R5,A                        
    MOV	R6,A	
    MOV	R7,A			         	
    MOV	R8,A
    MOV A,@06H
    MOV R9,A
    MOV A,@00H                  
    MOV RA,A
    MOV RB,A	                
    BC STATE,RPAGE0
    BC STATE,RPAGE1
    MOV A,@00H
    IOW IOC5                  
    IOW	IOC6                  
    IOW	IOC7                  
    IOW	IOC9
    IOW IOCB	
    IOW	IOCC
    IOW	IOCE
    IOW	IOCF
    BS STATE,IOCPAGE
    MOV	A,@00H	
    IOW	IOC6	
    IOW	IOC7
    IOW IOC9
    IOW	IOCA
    IOW	IOCB
    MOV	A,@01H
    IOW	IOCC
    MOV	A,@0X0D
    IOW	IOCD
    BC STATE,IOCPAGE    
;/***************************************************************
;/               初始化BANK0到BANK3通用寄存器区
;/***************************************************************
    BC R4,BIT6
    BC R4,BIT7
    MOV A,@1FH
    MOV TEMP,A
INIT_RAM_LOOP:
    WDTC
    INC TEMP
    MOV A,R4
    AND A,@0XC0
    MOV R4,A
    MOV A,TEMP
    ADD R4,A
    MOV A,@00H
    MOV R0,A
    NOP
    MOV A,@3FH
    SUB A,TEMP
    JBS STATE,Z
    JMP INIT_RAM_LOOP
    MOV A,@0XFF
    SUB A,R4
    JBC STATE,Z
    JMP INIT_GEN_RAM_END
    MOV A,@0X40
    ADD R4,A
    MOV A,@1FH
    MOV TEMP,A
    JMP INIT_RAM_LOOP
INIT_GEN_RAM_END: 
;/**************************************************************
;/                初始化10到1F通用寄存器区
;***************************************************************
    MOV	A,@00H
    MOV	10H,A
    MOV	11H,A
    MOV	12H,A
    MOV	13H,A
    MOV	14H,A
    MOV	15H,A
    MOV	16H,A
    MOV	17H,A
    MOV	18H,A
    MOV	19H,A
    MOV	1AH,A
    MOV	1BH,A
    MOV	1CH,A
    MOV	1DH,A
    MOV	1EH,A
    MOV	1FH,A
    MOV A,@0X08
    MOV LEVEL,A
    CALL DELAY1         ;LCD芯片复位
    BS R9,XRESET
LCD_INIT:       ;lcd初始化,此处没有试是否每个控制指令前都需要控制码
    CALL IIC_START
    CALL DELAY1
    MOV A,@0X78      ;lcd地址
    CALL INIT_IIC
    MOV A,@0X80      ;控制码
    CALL INIT_IIC
    MOV A,@0X39      ;function  set
    CALL INIT_IIC
    MOV A,@0X80      ;控制码
    CALL INIT_IIC
    MOV A,@0X15      ;bias set
    CALL INIT_IIC
    MOV A,@0X80      ;控制码
    CALL INIT_IIC
    MOV A,@0X78      ;contrast set
    CALL INIT_IIC
    MOV A,@0X80      ;控制码
    CALL INIT_IIC
    MOV A,@0X5E      ;power/icon/contrast set
    CALL INIT_IIC
    MOV A,@0X80      ;控制码
    CALL INIT_IIC
    MOV A,@0X6A      ;follower control
    CALL INIT_IIC
    CALL DELAY1
    MOV A,@0X80      ;控制码
    CALL INIT_IIC
    MOV A,@0X0C      ;display on
    CALL INIT_IIC
    MOV A,@0X80      ;控制码
    CALL INIT_IIC
    MOV A,@0X01      ;clear display
    CALL INIT_IIC
    CALL DELAY1
    CALL DELAY1
    MOV A,@0X80      ;控制码
    CALL INIT_IIC
    MOV A,@0X06      ;entry mode set
    CALL INIT_IIC
    MOV A,@0X80      ;控制码
    CALL INIT_IIC
    MOV A,@0X38      ;function set
    CALL INIT_IIC
    
    MOV A,@0X80      ;开始造向上的第一种箭头加横线,控制码
    CALL INIT_IIC
    MOV A,@0X40      ;CGRAM起始地址,相对于DDRAM的00H
    CALL INIT_IIC
    MOV A,@0X40      ;控制码,开始写入数据
    CALL INIT_IIC
    MOV A,@0X02
    CALL INIT_IIC
    MOV A,@0X07
    CALL INIT_IIC
    MOV A,@0X07
    CALL INIT_IIC
    MOV A,@0X00
    CALL INIT_IIC
    MOV A,@0X1F
    CALL INIT_IIC
    MOV A,@0X00
    CALL INIT_IIC
    MOV A,@0X00
    CALL INIT_IIC
    MOV A,@0X00
    CALL INIT_IIC
    CALL IIC_STOP 
    
    CALL IIC_START    ;开始造上横线
    CALL DELAY1
    MOV A,@0X78       ;lcd地址
    CALL INIT_IIC
    MOV A,@0X80       ;控制码
    CALL INIT_IIC
    MOV A,@0X48       ;CGRAM起始地址,相对于DDRAM的01H
    CALL INIT_IIC
    MOV A,@0X40       ;开始写入数据
    CALL INIT_IIC
    MOV A,@0X00
    CALL INIT_IIC
    MOV A,@0X00
    CALL INIT_IIC
    MOV A,@0X00
    CALL INIT_IIC
    MOV A,@0X00
    CALL INIT_IIC
    MOV A,@0X1F
    CALL INIT_IIC
    MOV A,@0X00
    CALL INIT_IIC
    MOV A,@0X00
    CALL INIT_IIC
    MOV A,@0X00
    CALL INIT_IIC
    CALL IIC_STOP 
    
    CALL IIC_START     ;第一种向下箭头
    CALL DELAY1
    MOV A,@0X78
    CALL INIT_IIC
    MOV A,@0X80
    CALL INIT_IIC
    MOV A,@0X50        ;CGRAM起始地址,相对于DDRAM的02H
    CALL INIT_IIC
    MOV A,@0X40
    CALL INIT_IIC
    MOV A,@0X00
    CALL INIT_IIC
    MOV A,@0X00
    CALL INIT_IIC
    MOV A,@0X1F
    CALL INIT_IIC
    MOV A,@0X00
    CALL INIT_IIC
    MOV A,@0X07
    CALL INIT_IIC
    MOV A,@0X07
    CALL INIT_IIC
    MOV A,@0X02
    CALL INIT_IIC
    MOV A,@0X00
    CALL INIT_IIC
    CALL IIC_STOP 
    
    CALL IIC_START         ;下横线
    CALL DELAY1
    MOV A,@0X78
    CALL INIT_IIC
    MOV A,@0X80
    CALL INIT_IIC
    MOV A,@0X58           ;CGRAM起始地址,相对于DDRAM的03H
    CALL INIT_IIC
    MOV A,@0X40
    CALL INIT_IIC
    MOV A,@0X00
    CALL INIT_IIC
    MOV A,@0X00
    CALL INIT_IIC
    MOV A,@0X1F
    CALL INIT_IIC
    MOV A,@0X00
    CALL INIT_IIC
    MOV A,@0X00
    CALL INIT_IIC
    MOV A,@0X00
    CALL INIT_IIC
    MOV A,@0X00
    CALL INIT_IIC
    MOV A,@0X00
    CALL INIT_IIC
    CALL IIC_STOP 

    CALL IIC_START       ;第二种向上箭头
    CALL DELAY1
    MOV A,@0X78
    CALL INIT_IIC
    MOV A,@0X80
    CALL INIT_IIC
    MOV A,@0X60          ;CGRAM起始地址,相对于DDRAM的04H
    CALL INIT_IIC
    MOV A,@0X40
    CALL INIT_IIC
    MOV A,@0X08
    CALL INIT_IIC
    MOV A,@0X1C
    CALL INIT_IIC
    MOV A,@0X1C
    CALL INIT_IIC
    MOV A,@0X00
    CALL INIT_IIC
    MOV A,@0X1F
    CALL INIT_IIC
    MOV A,@0X00
    CALL INIT_IIC
    MOV A,@0X00
    CALL INIT_IIC
    MOV A,@0X00
    CALL INIT_IIC
    CALL IIC_STOP 
    
    CALL IIC_START       ;第二种向下箭头
    CALL DELAY1
    MOV A,@0X78
    CALL INIT_IIC
    MOV A,@0X80          ;;CGRAM起始地址,相对于DDRAM的05H
    CALL INIT_IIC
    MOV A,@0X68
    CALL INIT_IIC
    MOV A,@0X40
    CALL INIT_IIC
    MOV A,@0X00
    CALL INIT_IIC
    MOV A,@0X00
    CALL INIT_IIC
    MOV A,@0X1F
    CALL INIT_IIC
    MOV A,@0X00
    CALL INIT_IIC
    MOV A,@0X1C
    CALL INIT_IIC
    MOV A,@0X1C
    CALL INIT_IIC
    MOV A,@0X08
    CALL INIT_IIC
    MOV A,@0X00
    CALL INIT_IIC
    CALL IIC_STOP 
        
    JMP MAIN
    
INIT_IIC:
    WDTC
    CALL IIC_MAIN          ;初始化IIC写入程序,判断是否正常相应
    JBC IIC_STA,ERR
    JMP INIT_ERR_END
    RET
    
INIT_ERR_END:
    CALL IIC_ERR_END       ;错误后的操作
    JMP LCD_INIT
MAIN:
    PAGE 1
    CALL DISPLAY           ;不同的level显示不同内容
    PAGE 0
    INC LCDTEST            ;用于循环测试显示是否正确
    MOV A,LCDTEST
    SUB A,@0X60
    JBS STATE,Z
    JMP MAIN
    MOV A,@0X00
    MOV LCDTEST,A
    INC LEVEL
    MOV A,LEVEL
    SUB A,@0X09
    JBS STATE,Z
    JMP MAIN
    MOV A,@0X01
    MOV LEVEL,A
    JMP MAIN

;/**************************************************************
;/                IIC PROGRAM
;*************************************************************** 
IIC_MAIN:
    MOV IIC_TEMP,A        ;数据写入,产生IIC信号,完成后等待
    CALL IIC_WRITE
    CALL DELAY_10US
    CALL DELAY_10US
    CALL DELAY_10US
    RET
   
IIC_START:                 ;IIC开始信号
    BC R9,SDA
    CALL DELAY1
    BC R9,SCL
    RET

IIC_STOP:                   ;IIC结束信号
    BC R9,SDA
    CALL DELAY1
    BS R9,SCL
    CALL DELAY1
    BS R9,SDA
    RET

IIC_ERR_END:                ;多次写入错误后LED闪烁提示
    CALL IIC_STOP
    INC ERRTIMES
    MOV A,ERRTIMES
    SUB A,@0X0A
    JBC STATE,Z
    JMP ERR_FLASH
    RET

ERR_FLASH:
    BS R9,LED
    CALL DELAY500
    BC R9,LED
    CALL DELAY500
    JMP ERR_FLASH
    
IIC_WRITE:                 ;IIC产生程序
    MOV A,@0X08
    MOV IIC,A
    BC STATE,C
IIC_WRITE_1:
    CALL DELAY_10US        ;SDA数据左移
    RLC IIC_TEMP
    JBC STATE,C
    JMP SDA_SET
    BC R9,SDA
IIC_WRITE_2:
    CALL DELAY_10US         ;产生SCL信号
    BS R9,SCL
    CALL DELAY_10US
    BC R9,SCL
    DJZ IIC
    JMP IIC_WRITE_1
    MOV A,@0X04              ;判断lcd驱动芯片是否正确响应
    IOW IOC9
    CALL DELAY_10US
    BS R9,SCL
    CALL DELAY1
    JBC R9,SDA
    JMP IIC_ERR
    BC R9,SCL
    BC IIC_STA,ERR
    MOV A,@0X00
    IOW IOC9
    RET
IIC_ERR:
    BC R9,SCL              ;lcd驱动芯片不正确响应写错误标志
    BS IIC_STA,ERR
    MOV A,@0X00
    IOW IOC9
    RET
SDA_SET:
    BS R9,SDA
    JMP IIC_WRITE_2
;/**************************************************************
;/                DELAY PROGRAM
;***************************************************************   
DELAY_10US:                            
    MOV A,@0X06
    MOV TEMP,A
DELAY_10US1:        
    WDTC
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    DJZ TEMP
    JMP DELAY_10US1
    RET        
		
DELAY500:
    MOV A,@0XFA
    MOV DELAY,A
DELAY500_1:
    CALL DELAY1
    DJZ DELAY
    JMP DELAY500_1
    RET
DELAY1:                            
    MOV A,@0X0F
    MOV TEMP,A
DELAY11:        
    WDTC
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    NOP
    DJZ TEMP
    JMP DELAY11
    RET

;/**************************************************************
;/                DISPLAY PROGRAM
;***************************************************************    
ORG 0400H
DISPLAY:                
    MOV A,LEVEL            ;判断level的值,确定写入内容
    SUB A,@0X01
    JBC STATE,Z
    JMP LEVEL1
    MOV A,LEVEL
    SUB A,@0X02
    JBC STATE,Z
    JMP LEVEL2
    MOV A,LEVEL
    SUB A,@0X03
    JBC STATE,Z
    JMP LEVEL3
    MOV A,LEVEL
    SUB A,@0X04
    JBC STATE,Z
    JMP LEVEL4
    MOV A,LEVEL
    SUB A,@0X05
    JBC STATE,Z
    JMP LEVEL5
    MOV A,LEVEL
    SUB A,@0X06
    JBC STATE,Z
    JMP LEVEL6
    MOV A,LEVEL
    SUB A,@0X07
    JBC STATE,Z
    JMP LEVEL7
    MOV A,LEVEL
    SUB A,@0X08
    JBC STATE,Z
    JMP LEVEL8
    MOV A,@0X08
    MOV LEVEL,A
    RET
    
LEVEL1:    
    PAGE 0                
    CALL IIC_START
    CALL DELAY1
    PAGE 1
    MOV A,@0X78                  ;第一行内容,lcd芯片地址
    CALL LINE_IIC
    MOV A,@0X80                   ;控制码
    CALL LINE_IIC
    MOV A,@0X80                   ;第一行DDRAM起始地址
    CALL LINE_IIC
    MOV A,@0X40                   ;数据写入控制码,开始写入数据
    CALL LINE_IIC
    MOV A,@0X04
    CALL LINE_IIC
    MOV A,@0X01
    CALL LINE_IIC
    MOV A,@0X01
    CALL LINE_IIC
    MOV A,@0X01
    CALL LINE_IIC
    MOV A,@0X01
    CALL LINE_IIC
    MOV A,@0X01
    CALL LINE_IIC
    MOV A,@0X01
    CALL LINE_IIC
    MOV A,@0X01
    CALL LINE_IIC
    PAGE 0
    CALL IIC_STOP
    PAGE 1
    WDTC
    
    PAGE 0
    CALL IIC_START                ;第二行内容
    CALL DELAY1
    PAGE 1
    MOV A,@0X78
    CALL LINE_IIC
    MOV A,@0X80
    CALL LINE_IIC
    MOV A,@0X90
    CALL LINE_IIC
    MOV A,@0X40
    CALL LINE_IIC
    MOV A,@0XA0
    CALL LINE_IIC
    MOV A,@0XA0
    CALL LINE_IIC
    MOV A,@0X53
    CALL LINE_IIC
    MOV A,@0X59
    CALL LINE_IIC
    MOV A,@0X4E
    CALL LINE_IIC
    MOV A,@0XA0
    CALL LINE_IIC
    MOV A,@0XA0
    CALL LINE_IIC
    MOV A,@0XA0
    CALL LINE_IIC
    PAGE 0
    CALL IIC_STOP
    PAGE 1
    WDTC
    
    PAGE 0
    CALL IIC_START                 ;第三行内容
    CALL DELAY1
    PAGE 1
    MOV A,@0X78
    CALL LINE_IIC
    MOV A,@0X80
    CALL LINE_IIC
    MOV A,@0XA0
    CALL LINE_IIC
    MOV A,@0X40
    CALL LINE_IIC
    MOV A,@0X03
    CALL LINE_IIC
    MOV A,@0X03
    CALL LINE_IIC
    MOV A,@0X03
    CALL LINE_IIC
    MOV A,@0X03
    CALL LINE_IIC
    MOV A,@0X03
    CALL LINE_IIC
    MOV A,@0X03
    CALL LINE_IIC
    MOV A,@0X03
    CALL LINE_IIC
    MOV A,@0X03
    CALL LINE_IIC
    PAGE 0
    CALL IIC_STOP
    PAGE 1
    WDTC
    
    RET
   
LEVEL2:   
    PAGE 0

⌨️ 快捷键说明

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