📄 io.lib
字号:
;;; The keypad-LCD interface library.BASE equ 0e000hLCD_REGISTER equ 80hLCD_DATA equ 81hLCD_CONTROL equ 90hKEYPAD equ 0a0hRow equ 32Col equ 33OldRow equ 34OldCol equ 35Counter equ 36key_init: clr PX1 setb INT1 setb IT1retcgetc: clr IE1 setb EX1 mov R0, #SP_IE1 acall Pause clr EX1 mov DPTR, #(BASE + KEYPAD) movx A, @DPTR anl A, #0fhretStrobe: mov DPTR, #(BASE + LCD_CONTROL) mov A, #1 movx @DPTR, A mov A, #0 movx @DPTR, Aretclear: mov OldRow, #0 mov OldCol, #0 mov Row, #0 mov Col, #0 mov A, #01 acall WriteRegistersjmp ClearDelayhome: mov Row, #0 mov Col, #0 mov A, #02 acall WriteRegistersjmp ClearDelayClearDelay: ;;; A 1600 microsecond delay (+ 40 for WriteRegister) mov (Counter + 1), #10 ClearLoop: mov Counter, #00 djnz Counter, $ djnz (Counter + 1), ClearLoopretWriteRegister: mov DPTR, #(BASE + LCD_REGISTER) movx @DPTR, A acall Strobe mov Counter, #50 ;;; A 40 microsecond delay is needed. djnz Counter, $retDISPLAY_ON equ 4CURSOR_ON equ 2CURSOR_BLINK equ 1set_cursor: add A, #08sjmp WriteRegistercursor_left: dec Col mov A, #10hsjmp WriteRegistercursor_right: inc Col mov A, #14hsjmp WriteRegistershift_left: mov A, #18hsjmp WriteRegistershift_right: mov A, #1chsjmp WriteRegisterlocate: mov A, #80h add A, Col jnb Row.0, XX0 add A, #40h XX0: jnb Row.1, XX1 add A, #14h XX1:sjmp WriteRegisterrestore_cursor: mov Row, OldRow mov Col, OldColsjmp locatesave_cursor: mov OldRow, Row mov OldCol, Colretscr_init: mov A, #38h acall WriteRegister ;;; 1/16 duty, 5x7 font, 8 bit interface. mov A, #06h acall WriteRegister ;;; Cursor increments, no display shift. mov A, #DISPLAY_ON acall set_cursor acall clearretcputc: inc Col mov DPTR, #(BASE + LCD_DATA) movx @DPTR, A acall Strobe mov Counter, #50 ;;; A 40 microsecond delay is needed. djnz Counter, $retcputs: cputsLoop: clr A movc A, @A + DPTR inc DPTR jz cputsBreak push DPL push DPH acall cputc pop DPH pop DPL sjmp cputsLoopcputsBreak:ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -