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

📄 ex_one.asm

📁 用89S52单片机实现1602的汉字输出功能
💻 ASM
字号:
/*******************************************************************************
  Title:  演示程序---LED显示器实验             		   	                        *
  Name:   one.asm                                                            	*
  Date:   2008-12-3                                                           	*                                           *
********************************************************************************
     1602字符型LCD显示演示程序                                                	*
      显示汉字“中”                                                        	*	
                                                                              	*
********************************************************************************/

lcd_rs bit P2.0    ;LCD寄存器选择
lcd_rw bit P2.1    ;LCD读写控制
lcd_e bit P2.2     ;LCD选通

lcdio equ P0

lcdbusy equ 33H    ;LCD忙寄存
lcddata equ 34H    ;LCD传递数据

	ORG 0000H
 	jmp Main    ;复位入口,转主程序

  	ORG 030H
Main:  	
	mov sp,#50H            ;设置堆栈指针
       	mov dptr,#char1        ;设置指针指向第一行第一个字符的地址
       	lcall delay
       	lcall delay
       	lcall lcd_init         ;调液晶初始化
       	lcall lcd_sendchar

loop:
       	nop
       	Ajmp loop
  
delay: mov r3,#50              ;延时程序
delay_loop:
       mov r4,#50
       djnz r4,$
       djnz r3,delay_loop
       ret

lcd_init:           ;液晶初始化程序
lcd_init_1:
       lcall lcd_readbusy
       mov a,lcdbusy
       cjne A,#0,lcd_init_1
       mov lcddata,#38H
       lcall lcd_writecomm
       lcall delay

lcd_init_2:
       lcall lcd_readbusy
       mov a,lcdbusy
       cjne A,#0,lcd_init_2
       mov lcddata,#06H
       lcall lcd_writecomm
       lcall delay

lcd_init_3:
       lcall lcd_readbusy
       mov a,lcdbusy
       cjne A,#0,lcd_init_3
       mov lcddata,#0dH
       lcall lcd_writecomm
       lcall delay

lcd_init_4:
       lcall lcd_readbusy
       mov a,lcdbusy
       cjne A,#0,lcd_init_4
       mov lcddata,#01H
       lcall lcd_writecomm
       lcall delay
       ret

lcd_writecomm:       ;写命令
       clr lcd_rs
       nop
       clr lcd_rw
       nop
       mov lcdio,lcddata
       nop
       setb lcd_e
       nop
       clr lcd_e
       ret

lcd_writedata:       ;写数据
       setb lcd_rs
       nop
       clr lcd_rw
       nop
       mov lcdio,lcddata
       nop
       setb lcd_e
       nop
       clr lcd_e
       ret

lcd_readdata:        ;读数据
       setb lcd_rs
       nop
       setb lcd_rw
       nop
       setb lcd_e
       nop
       mov lcdbusy,lcdio
       clr lcd_e
       ret

lcd_readbusy:        ;读忙
       clr lcd_rs
       nop
       setb lcd_rw
       nop
       setb lcd_e
       nop
       mov lcdbusy,lcdio
       clr lcd_e  
       anl lcdbusy,#80H
       ret

lcd_sendchar:        ;发送字符
lcd_sendchar_1:       
       lcall lcd_readbusy
       mov a,lcdbusy
       cjne A,#0,lcd_sendchar_1
	   mov lcddata,#40h
	   lcall lcd_writecomm
	   mov lcddata,#00h
	   lcall lcd_writedata
	   mov lcddata,#41h
	   lcall lcd_writecomm
	   mov lcddata,#04h
	   lcall lcd_writedata
	   mov lcddata,#42h
	   lcall lcd_writecomm
	   mov lcddata,#1fh
	   lcall lcd_writedata
	   mov lcddata,#43h
	   lcall lcd_writecomm
	   mov lcddata,#15h
	   lcall lcd_writedata
	   mov lcddata,#44h
	   lcall lcd_writecomm
	   mov lcddata,#1fh
	   lcall lcd_writedata
	   mov lcddata,#45h
	   lcall lcd_writecomm
	   mov lcddata,#04h
	   lcall lcd_writedata
	   mov lcddata,#46h
	   lcall lcd_writecomm
	   mov lcddata,#04h
	   lcall lcd_writedata
	   mov lcddata,#47h
	   lcall lcd_writecomm
	   mov lcddata,#00h
	   lcall lcd_writedata

test0:
	   lcall lcd_readbusy
	   mov a,lcdbusy
	   cjne a,#0,test0
	   mov lcddata,#80h
	   lcall lcd_writecomm
	   lcall delay

test1:
	   lcall lcd_readbusy
       mov a,lcdbusy
       cjne A,#0, test1
	   mov lcddata,#00h
	   lcall lcd_writedata
	   lcall delay

       ret

char1:
      DB 00H,04H,1FH,15H,1FH,04H,04H,04H   ;'中'

   END

⌨️ 快捷键说明

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