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

📄 51+Ҧ

📁 AT89C51汇编语言例子大全
💻
📖 第 1 页 / 共 3 页
字号:
/***************************************************************************
标题:	LCD12864程序
效果:	本程序在LCD12864液晶屏显示汉字、字符及图形内容
本店网站      http://xxdpj.taobao.com/
以芯换心  竭诚为您服务 您学习单片机的好帮手
近期本店有很多优惠活动 有空就进来看看吧
http://xxdpj.taobao.com/
技术支持QQ:412150384
******************************************************************************/
;-----------------------脚功能定义----------------------------	      
	      RS EQU P1.0	
              RW EQU P1.1
              E EQU P1.2
              PSB EQU P1.6	;PSB脚为12864-12系列的串、并通讯功能切换,我们使用8位并行接口,PSB=1
              ;-----------------------------------------------
              LCD_X EQU 30H	;行座标
              LCD_Y EQU 31H	;列座标
              COUNT EQU 32H	;定义记数缓冲
              COUNT1 EQU 33H
              COUNT2 EQU 34H
              COUNT3 EQU 35H
              ;-----------------------------------------------
              LCD_DATA EQU 36H		;字义数据RAM空间
              LCD_DATA1 EQU 37H
              LCD_DATA2 EQU 38H
              STORE EQU 39H

              ;-----------------------------------------------
              ORG 0000H
              LJMP MAIN
              ORG 0100H
              ;-----------------------------------------------
              MAIN:
              MOV SP,#5FH
              LCALL DELAY4          ;延时40.301ms
              NOP
              SETB PSB ;通讯方式为8位数据并口

              ;********************初始化**********************
              LGS0: MOV A,#34H ;34H--扩充指令操作          在12864原理中有解释
              LCALL SEND_I         ;调用写指令子程序
              MOV A,#30H 	;基本指令操作
              LCALL SEND_I
              MOV A,#01H 	;清除显示
              LCALL SEND_I
              MOV A,#06H 	;指定在资料写入或读取时,光标的移动方向
              LCALL SEND_I 	;DDRAM 的地址计数器(AC)加1
              MOV A,#0CH 	;开显示,关光标,不闪烁
              LCALL SEND_I
              ;===============================================
              TU_PLAY1:
              MOV DPTR,#TU_TAB1 ;显示图形1
              LCALL PHO_DISP	      
              LCALL DELAY3        ;1秒
	      LCALL DELAY3        
	      LCALL DELAY3        ;共3秒

              ;=================================================
              ;;显示汉字和字符
              ;加入40ms的延时,使你能够看清楚显示的过程
              ;根据汉字显示坐标分段写入(顺序写入)
              ;=================================================
              HAN_WR2:
              LCALL CLEAR_P        ;调入清屏子程序
              HAN_WR2A:
              MOV DPTR,#TAB1A ;显示汉字和字符
              MOV COUNT,#10H ;地址计数器设为16。
              MOV A,#80H ;第一行起始地址
              LCALL SEND_I
              LCALL QUSHU
              HAN_WR2B:
              MOV DPTR,#TAB1B ;显示汉字和字符
              MOV COUNT,#10H ;地址计数器设为16。
              MOV A,#90H ;第二行起始地址
              LCALL SEND_I
              LCALL QUSHU
              HAN_WR2C:
              MOV DPTR,#TAB1C ;显示汉字和字符
              MOV COUNT,#10H ;地址计数器设为16。
              MOV A,#88H ;第三行起始地址
              LCALL SEND_I
              LCALL QUSHU
              HAN_WR2D:
              MOV DPTR,#TAB1D ;显示汉字和字符
              MOV COUNT,#10H ;地址计数器设为16。
              MOV A,#98H ;第四行起始地址
              LCALL SEND_I
              LCALL QUSHU
              LCALL DELAY3
              LCALL FLASH	;调用闪烁子程序
              LCALL CLEAR_P	;清屏子程序

              ;----------------------------------------------
              TU_PLAY2:
              MOV DPTR,#TU_TAB2 ;显示图形
              LCALL PHO_DISP
              LCALL DELAY3
	      LCALL DELAY3
	      LCALL DELAY3
              ;----------------------------------------------
              TU_PLAY3:
              MOV DPTR,#TU_TAB4 ;显示图形
              LCALL PHO_DISP
              LCALL DELAY3
	      LCALL DELAY3
	      LCALL DELAY3
	      ;----------------------------------------------
              TU_PLAY4:
              MOV DPTR,#TU_TAB3 ;显示图形
              LCALL PHO_DISP
              LCALL DELAY3
	      LCALL DELAY3
	      LCALL DELAY3


              ;-----------------------------------------------
              ;显示点阵
              ;-----------------------------------------------
              LATPLAY1:
              MOV A,#01H ;清屏
              LCALL SEND_I
              MOV LCD_DATA1,#0CCH ;显示点阵
              MOV LCD_DATA2,#0CCH
              LCALL LAT_DISP
              LCALL DELAY3
	      LCALL DELAY3
              LCALL CLEAR_P

              KU_PLAY2:

              LJMP TU_PLAY1

              ;===============================================
              ;全屏显示点阵图形子程序
              ;===============================================
              PHO_DISP:		;图形点阵排列方式为,一行128点/8=16个字节,即每行16字节,每字节以高位开始排列
              MOV COUNT3,#02H	
              MOV LCD_X,#80H      ;显示数据RAM的水平起始地址是80H
              PHO_DISP1:
              MOV LCD_Y,#80H      ;显示数据RAM的垂直起始地址也是80H
              MOV COUNT2,#20H	;上半部份32行
              PHO_DISP2:
              MOV COUNT1,#10H	;每行16字节
              LCALL WR_ZB	;功能指令调用,即为点阵数据
              PHO_DISP3:
              CLR A
              MOVC A,@A+DPTR      ;读取点阵数据内容
              LCALL SEND_D    	
              INC DPTR
              DJNZ COUNT1,PHO_DISP3
              INC LCD_Y
              DJNZ COUNT2,PHO_DISP2    
              MOV LCD_X,#88H
              DJNZ COUNT3,PHO_DISP1

              MOV A,#36H      ;扩充功能设定
              LCALL SEND_I
              MOV A,#30H
              LCALL SEND_I
              RET
              ;----------------------------------------------
              CLRRAM:
              MOV LCD_DATA1,#00H ;GDRAM写0子程序
              MOV LCD_DATA2,#00H
              LCALL LAT_DISP
              RET
              ;==============================================
              ;显示点阵子程序,此子程序与图形显示一样,只是输出的数据是固定的两个数据
              ;==============================================
              LAT_DISP:
              MOV COUNT3,#02H
              MOV LCD_X,#80H
              LAT_DISP1:
              MOV LCD_Y,#80H
              CLR F0
              MOV COUNT2,#20H
              LAT_DISP2:
              MOV COUNT1,#10H
              LCALL WR_ZB
              LAT_DISP3:
              JB F0,LAT_DISP32      ;P直接寻址位为1转移
              MOV LCD_DATA,LCD_DATA1
              AJMP LAT_DISP31
              LAT_DISP32:
              MOV LCD_DATA,LCD_DATA2
              LAT_DISP31:
              MOV A,LCD_DATA
              LCALL SEND_D
              DJNZ COUNT1,LAT_DISP31
              INC LCD_Y
              CPL F0
              DJNZ COUNT2,LAT_DISP2
              MOV LCD_X,#88H
              DJNZ COUNT3,LAT_DISP1

              MOV A,#36H
              LCALL SEND_I
              MOV A,#30H
              LCALL SEND_I
              RET
              ;---------------------------------------------
              WR_ZB:
              MOV A,#34H
              LCALL SEND_I
              MOV A,LCD_Y
              LCALL SEND_I
              MOV A,LCD_X
              LCALL SEND_I
              MOV A,#30H
              LCALL SEND_I
              RET

              ;===============================================
              FLASH:
              MOV A,#08H ;关闭显示
              LCALL SEND_I
              LCALL DELAY5    

⌨️ 快捷键说明

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