📄 lcm.s
字号:
/* define symbols of system */.equ PORTA_MUX, 0x09000000.equ PORTA_DATA, 0x09001600.equ PORTA_DIR, 0x09001604.equ PORTB_MUX, 0x09000004.equ PORTB_DIR, 0x0900160c.equ PORTB_DATA, 0x09001608.equ PORT7_MUX, 0x09000020.equ PORT7_DIR, 0x09001644.equ PORT7_DATA, 0x09001640.equ PORT9_MUX, 0x09000028.equ PORT9_DIR, 0x09001654.equ PORT9_DATA, 0x09001650/* define symbols of program */.set LCM_WR_1, 0x00000010.set LCM_WR_0, 0xffffffef.set LCM_RS_1, 0x00000020.set LCM_RS_0, 0x000000df.set LCM_E_1, 0x00000020.set LCM_E_0, 0xffffffdf.set LCM_FUNC_SET, 0x00000038.set LCM_DISP_ON, 0x0000000e.set LCM_DISP_OFF, 0x00000008.set LCM_DISP_CLR, 0x00000001.set LCM_ENTRY_SET, 0x00000006.text.global _start.code 32_start:/* setup PORT B */start: ldr r0, =PORTB_DIR ldr r1, =0x00000000 str r1, [r0] ldr r0, =PORTB_DATA ldr r1, =0x00000000 str r1, [r0] ldr r0, =PORTB_MUX ldr r1, =0x00000faa str r1, [r0]/* setup PORT 9 */ ldr r0, =PORT9_DIR ldr r1, =0x00000000 str r1, [r0] ldr r0, =PORT9_DATA ldr r1, =0x00000000 str r1, [r0] ldr r0, =PORT9_MUX ldr r1, =0x00000140 str r1, [r0]/* initialize LCM */ adr r6, lcm_init_para mov r8, #5 lcm_init_loop: ldrb r1, [r6] ldr r2, =LCM_RS_0 bl lcm_write add r6, r6, #1 subs r8, r8, #1 bne lcm_init_loop /* display Hello! */ adr r6, string_hello mov r8, #6 display_loop: ldrb r1, [r6] ldr r2, =LCM_RS_1 bl lcm_write add r6, r6, #1 subs r8, r8, #1 bne display_loop/* program wait here */end_loop: b end_loop /* lcm write subroutine */lcm_write: mov r7, lr mov r3, #0 mov r5, #0@ set E=0 ldr r0, =PORT9_DATA ldr r4, =LCM_E_0 and r3, r3, r4 str r3, [r0] ldr r0, =0x1fff bl delay@ set RS and set R/W=0 ldr r0, =PORT7_DATA orr r5, r5, r2 str r5, [r0] ldr r0, =PORT9_DATA ldr r4, =LCM_WR_0 and r3, r3, r4 str r3, [r0] ldr r0, =0x1fff bl delay@ set E=1 ldr r0, =PORT9_DATA ldr r4, =LCM_E_1 orr r3, r3, r4 str r3, [r0] ldr r0, =0x1fff bl delay@ set D[7:0] ldr r0, =PORTB_DATA str r1, [r0] ldr r0, =0x1fff bl delay@ set E=0 ldr r0, =PORT9_DATA ldr r4, =LCM_E_0 and r3, r3, r4 str r3, [r0] ldr r0, =0x1fff bl delay mov lr, r7 mov pc, lr /* delay subroutine */delay: subs r0, r0, #1 bne delay mov pc, lr/* declare constant */lcm_init_para:.byte LCM_FUNC_SET, LCM_DISP_OFF, LCM_DISP_CLR, LCM_DISP_ON, LCM_ENTRY_SETstring_hello:.ascii "Hello!".end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -