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

📄 8bit.asm

📁 Library for the 8051 microcontroller. such as math routine, hexBCD, LCD, Keyboard, I2C, Remote, Ke
💻 ASM
字号:
;------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
;Author: Ashwin.V
;Country:India
;Code:LCD interface in 8bit mode
;CPU:At89c51@11.0592Mhz
;Tips:All you need to do is call the line where you want to display the message, mov the charecter to lcd_data and call datw.
;If you want to display a string, move the address of the hardcodded string into dptr and call datw.
;-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


                       RS         EQU      P3.0
                       EN         EQU      P3.1
					   lcd_data	  DATA	   30h


org 0000h

    ljmp lcd8_main

org 0030h

;___________________________________________________________________________
;------------------------------delay subroutines----------------------------
;___________________________________________________________________________

;------------------------------100us delay----------------------------------

delay_100us:       push 00h
                   mov r0,#46
delay_100us_loop:  djnz r1,delay_100us_loop
                   pop 00h
                   ret

;------------------------------16ms delay----------------------------------

delay_16ms:         push 00h
                    push 01h
                    mov r0,#30
delay_16ms_loop1:   mov r1,#255
delay_16ms_loop2:   djnz r1,delay_16ms_loop2
                    djnz r0,delay_16ms_loop1 
                    pop 01h
                    pop 00h
                    ret

;--------------------------half second delay-------------------------------

delay_half_second:	push 00h
			        push 01h
			        push 02h
	                mov r2,#0ah 
delay_half_second1:	mov r1,#64h
delay_half_second2:	mov r0,#0ffh
back:	        	djnz r0,back
	       		    djnz r1, delay_half_second2
		            djnz r2,delay_half_second1
			        pop 02h
			        pop 01h
			        pop 00h
			        ret

;_________________________________________________________________
;----------------message definition and display-------------------
;_________________________________________________________________ 


disp_message:         push acc
                      push 00h
					  mov r0,#17    ; maximum of 16charecters on lcd display

disp_message_loop1:   mov a,#00h	; reset accumulator	
		              movc a,@a+dptr
					  djnz r0,disp_message_loop2

					  pop 00h
					  pop acc
					  ret

disp_message_loop2:   mov lcd_data,a
                      acall datw
                      acall delay_100us
		              inc dptr
					  sjmp disp_message_loop1

disp_ashwin:DB"  Hello ashwin  "
disp_testing:DB"Testing 4bit LCD"
disp_initialising:DB"Initialising...."
disp_ready:DB" 4bit LCD ready "
disp_clear:DB"                "

;___________________________________________________________________________
;--------------------command and data write subroutines---------------------
;___________________________________________________________________________


cmdw:        push acc
             
			 mov a,lcd_data
             mov p0,a
             clr rs
             setb en
             clr en

			 pop acc
             ret

datw:        push acc
             
			 mov a,lcd_data
             mov p0,a
             setb rs
             setb en
             clr en

			 pop acc
             ret

;___________________________________________________________________________
;--------------------------line select subroutines--------------------------
;___________________________________________________________________________


line1:       mov lcd_data,#80h	          ;initial position of cursor
             acall cmdw
			 acall delay_100us
			 ret

line2:       mov lcd_data,#0c0h		 ;initial position of cursor
             acall cmdw
			 acall delay_100us
			 ret


;___________________________________________________________________________
;----------------------lcd initialisation subroutine------------------------
;___________________________________________________________________________


lcd8_initialise: acall delay_16ms   ;wait more than 15ms after vdd reaches 4.5v

                 mov lcd_data,#38h         ;2line 5x7 matrix
                 acall cmdw
                 acall delay_100us
	 
			     mov lcd_data,#0fh	        ;display on, cursor on, cursor blinking
			     acall cmdw
                 acall delay_100us
			 
			     mov lcd_data,#01h	        ;clear screen
			     acall cmdw
                 acall delay_100us
			 
			     mov lcd_data,#06h	        ;cursor and display shifts(right/left)
			     acall cmdw
                 acall delay_100us

				 ret

;___________________________________________________________________________
;-------------------------------lcd main code-------------------------------
;___________________________________________________________________________


lcd8_main:   mov p0,#00h
             clr RS              ;make out pins
             clr EN              ;make out pins
			 mov IE,#00h
              
			 acall lcd8_initialise  		 
;---------------------------------------------------------------------------
			acall line1
			mov dptr,#disp_initialising
			acall disp_message
			acall delay_half_second
			acall delay_half_second
			acall delay_half_second
			acall delay_half_second

			lcall line2
			mov dptr,#disp_ready
			acall disp_message
			acall delay_half_second
			acall delay_half_second
			acall delay_half_second
			acall delay_half_second

            lcall line1
			mov dptr,#disp_testing
			acall disp_message
			acall delay_half_second
			acall delay_half_second

lcd8_loop:  acall line2
		    
			mov dptr,#disp_clear
			acall disp_message

			acall line2
			mov lcd_data,#'a'
			acall datw
			acall delay_half_second
			mov lcd_data,#'b'
			acall datw
			acall delay_half_second
			mov lcd_data,#'c'
			lcall datw
			acall delay_half_second
			mov lcd_data,#'d'
	        lcall datw
			acall delay_half_second

			acall line2
	        mov dptr,#disp_ashwin
	        lcall disp_message
			acall delay_half_second
			acall delay_half_second

			sjmp lcd8_loop


end

⌨️ 快捷键说明

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