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

📄 main.asm

📁 通过实例实践LCD 驱动显示(以128DI0 为例)
💻 ASM
📖 第 1 页 / 共 2 页
字号:

    ;************************************************************************
	;文件说明
	;创 建 人:杨宏伟		
	;修 改 人:杨宏伟			
	;创建日期:2004-08-08
	;最后更新:2004-10-10
	;描    述:FOR 128DI0,EM65565A,8位并行,模拟8080时序
    ;************************************************************************

	;接口定义
    ;************************************************************************
	CS1   BIT   P3.5			  ;片选控制端定义(低电平有效)
	RES   BIT   P3.4			  ;复位控制端定义(低电平有效)
	RS    BIT   P3.3			  ;指令、数据选择控制端定义
	WR1   BIT   P3.1			  ;写信号控制端定义
	RD1   BIT   P3.0			  ;读信号控制端定义
	MI    BIT   P3.7			  ;8080或6800选择
    ;************************************************************************

	
	ORG   0000H
	LJMP  start		              ;程序跳转,转到标号为start

	ORG   0003H
    LJMP  EXINT0

	ORG   0100h
	start:NOP
    SETB  EX0                     ;开外部中断0
    SETB  PX0
    CLR   IT0
    SETB  EA					  ;允许所有中断有效

	CLR   CS1			          ;片选有效(置低)
	CLR   MI				      ;选择8080时序
	CLR   RES			          ;复位LCD,RES置低
	LCALL DELAY
	LCALL DELAY
	SETB  RES                     ;复位LCD完成
	LCALL DELAY


	;设置(置高)数据表头标志位(在位寻址区)
	;****************************************************
	SETB  20h                     ;全显
	SETB  21h                     ;隔行
	SETB  22h                     ;清屏
	SETB  23h 					  ;显示图片
	LJMP  MAIN


	;LCD模块初始化(开始)
	;****************************************************
	ORG 0200H
	main:   NOP
	MOV A,#0a0h		               ;ADC select    
	LCALL SENT_COM				  
	MOV A,#0a6h					   ;Sets the LCD display normal/reverse
	LCALL SENT_COM
	MOV A,#0a2H					   ;Sets the LCD drive voltage bias ratio  1/9
	LCALL SENT_COM
	LCALL DELAY
	MOV A,#2fh					   ;Power control set
	LCALL SENT_COM
	MOV A,#24H					   ;V0 Voltage Regulator Internal Resistor Ratio Set 
	LCALL SENT_COM
	MOV A,#81H					   ;Electronic volume mode set
	LCALL SENT_COM
	MOV A,#29h
	LCALL SENT_COM
	MOV A,#0AFH                    ;Display ON
	LCALL SENT_COM
	;******************************LCD初始化完成

	
	;设置起始行,设置起始列和页地址
	;******************************************************
	again: 	mov r4,#0b0h          ;设页地址寄存器为R4,起始页地址B0H,第一页
	mov r5,#09H                   ;#09h;页数寄存器为R5,9页
	mov r6,#40h                   ;行地址寄存器为R6,起始行地址40H,第一行


	set_page_col:
	mov r3,#80h                   ;设置列数寄存器为R3,列数为128
	MOV A,r4                      ;送页地址
	LCALL SENT_COM
	MOV A,#10H                    ;送列地址,双字节指令
	LCALL SENT_COM
	MOV A,#00H;
	LCALL SENT_COM

	

	;判断表头标志,决定程序跳转方向
	;*****************************************************
	JB 20h,tab0                   ;全显
	JB 21h,tab1	                  ;隔行
	JB 22h,tab2                   ;清屏 
	JB 23h,tab3           		  ;显示图片
	

	LCALL ldelay
	AJMP  start                   ;返回,重复
	;*****************************************************

	tab0:	AJMP table0
	tab1:	AJMP table1
	tab2:	AJMP table2
	tab3:	AJMP table3

	;*****************************************************	
	table0:	mov dptr,#tab0_data  ;取表头地址
	dis0:CLR A
	movc a,@a+dptr
	LCALL SENT_DAT
	inc dptr
	DJNZ R3,DIS0                 ;列数减一,共128列
	inc r4                       ;页地址加1,下一页
	djnz r5,set_page_col         ;共显示9页
	clr 20h                      ;清除表标志
	lcall ldelay
	ajmp again
	;*****************************第一屏显示完成,全显

	


	table1:	mov dptr,#tab1_data  ;取表头地址
	dis1:CLR A
	movc a,@a+dptr
	LCALL SENT_DAT
	inc dptr
	DJNZ R3,DIS1                 ;列数减一,共128列
	inc r4                       ;页地址加1,下一页
	djnz r5,set_page_col         ;共显示9页
	clr 21h                      ;清除表标志
	lcall ldelay
	ajmp again 
	;****************************第二屏显示完成,隔行显示


	
	table2:	mov dptr,#tab2_data  ;取表头地址
	dis2:CLR A
	movc a,@a+dptr
	LCALL SENT_DAT
	inc dptr
	DJNZ R3,DIS2                 ;列数减一,共128列
	inc r4                       ;页地址加1,下一页
	djnz r5,set_page_col         ;共显示9页
	clr 22h                      ;清除表标志
	
	lcall ldelay
	ajmp again  
	;*****************************第三屏显示完成,清屏



	table3:	mov dptr,#tab3_data   ;取表头地址
	mov r5,#08H 				  ;设置页地址,共8页
 	dis3:MOV A,r4                 ;送页地址
	LCALL SENT_COM
	MOV A,#10H                    ;送列地址,双字节指令
	LCALL SENT_COM
	MOV A,#00H;
	LCALL SENT_COM

	mov r3,#80h                   ;设置列数寄存器为R3,列数为128
	dis31:CLR A
	movc a,@a+dptr
	LCALL SENT_DAT
	inc dptr
	DJNZ R3,dis31                ;列数减一,共128列

	inc r4                       ;页地址加1,下一页
	djnz r5,dis3                 ;共显示8页
	clr 23h                      ;清除表标志
	
	lcall ldelay
	ajmp again  
	;*****************************第四屏显示完成,显示一幅图片

	
	
		
	
	;子程序:
	;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
	DELAY:NOP					  ;延时
	MOV R1,#0FFH
	DL1:MOV R2,#06FH
	DL2:DJNZ R2,DL2
	DJNZ R1,DL1
	RET
	;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
	ldelay:						  ;长延时
	mov 30h,#010h            
	dela40:lcall delay
	djnz 30h,dela40
	ret
	;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
	SENT_COM:NOP				  ;写命令
	CLR RS
	CLR WR1
	clr CS1
	setb RD1

⌨️ 快捷键说明

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