📄 lcd_driver.txt
字号:
; generated by ARM C/C++ Compiler, 4.1 [Build 481]
; commandline ArmCC [--debug -c --asm --interleave -o.\OBJ\lcd_driver.o --depend=.\OBJ\lcd_driver.d --cpu=Cortex-M3 --apcs=interwork -O0 -I..\Demo -I.\HARDWARE\EXTI -I.\HARDWARE\KEY -I.\HARDWARE\LCD -I.\HARDWARE\LED -I.\HARDWARE\TIMER -I.\HARDWARE\WDG -I.\SYSTEM\delay -I.\SYSTEM\sys -I.\SYSTEM\usart -I.\USER -IC:\Keil\ARM\INC -IC:\Keil\ARM\INC\ST\STM32F10x --omf_browse=.\OBJ\lcd_driver.crf USER\LCD_Driver.c]
THUMB
AREA ||.text||, CODE, READONLY, ALIGN=2
LCD_DATA_OUT PROC
;;;11 ////////////////////////////////////////////////////////////////////////////////
;;;12 void LCD_DATA_OUT(u16 data)
000000 49ff LDR r1,|L1.1024|
;;;13 {
;;;14 /*
;;;15 //默认为8位数据端口写高8位
;;;16 DATA_L_PORT = (unsigned char)(data>>8);
;;;17 LCD_WR_L;
;;;18
;;;19 LCD_WR_H;
;;;20 //写低8位
;;;21 DATA_L_PORT = (unsigned char)data;
;;;22 LCD_WR_L;
;;;23
;;;24 LCD_WR_H;
;;;25 */
;;;26
;;;27 //16位数据接口
;;;28 DATAOUT(data);
000002 6809 LDR r1,[r1,#0]
000004 b2c9 UXTB r1,r1
000006 4aff LDR r2,|L1.1028|
000008 f8c21c0c STR r1,[r2,#0xc0c]
00000c 4611 MOV r1,r2
00000e f8d11c0c LDR r1,[r1,#0xc0c]
000012 ea412100 ORR r1,r1,r0,LSL #8
000016 f8c21c0c STR r1,[r2,#0xc0c]
00001a 49fb LDR r1,|L1.1032|
00001c 68c9 LDR r1,[r1,#0xc]
00001e f401417f AND r1,r1,#0xff00
000022 4af9 LDR r2,|L1.1032|
000024 60d1 STR r1,[r2,#0xc]
000026 4611 MOV r1,r2
000028 68c9 LDR r1,[r1,#0xc]
00002a ea412120 ORR r1,r1,r0,ASR #8
00002e 60d1 STR r1,[r2,#0xc]
;;;29 LCD_WR_L;
000030 f04f0100 MOV r1,#0
000034 4af5 LDR r2,|L1.1036|
000036 6011 STR r1,[r2,#0]
;;;30 LCD_WR_H;
000038 f04f0101 MOV r1,#1
00003c 4af4 LDR r2,|L1.1040|
00003e f8c211a8 STR r1,[r2,#0x1a8]
;;;31 }
000042 4770 BX lr
;;;32 ////////////////////////////////////////////////////////////////////////////////
ENDP
LCD_DATA_IN PROC
;;;38 ////////////////////////////////////////////////////////////////////////////////
;;;39 u16 LCD_DATA_IN(void)
000044 2000 MOVS r0,#0
;;;40 {
;;;41 u16 temp = 0;
;;;42 /*
;;;43 DATA_L_IN;
;;;44
;;;45 LCD_RD_L; //读有效
;;;46 LCD_RD_H;
;;;47 temp = DATA_L_PIN; //读取高字节
;;;48
;;;49 LCD_RD_L; //读有效
;;;50 LCD_RD_H;
;;;51 temp <<= 8;
;;;52 temp |= DATA_L_PIN; //读取低字节
;;;53
;;;54 DATA_L_OUT;
;;;55 */
;;;56 //置为输入
;;;57 GPIOC->CRL = 0x88888888; //PC0-7 上拉输入
000046 f04f3188 MOV r1,#0x88888888
00004a 4aef LDR r2,|L1.1032|
00004c 6011 STR r1,[r2,#0]
;;;58 GPIOB->CRH = 0X88888888; // PB8-15上拉输入
00004e 4af1 LDR r2,|L1.1044|
000050 6011 STR r1,[r2,#0]
;;;59 GPIOB->ODR |= 0XFF00; //全部输出高
000052 49ec LDR r1,|L1.1028|
000054 f8d11c0c LDR r1,[r1,#0xc0c]
000058 f441417f ORR r1,r1,#0xff00
00005c 4ae9 LDR r2,|L1.1028|
00005e f8c21c0c STR r1,[r2,#0xc0c]
;;;60 GPIOC->ODR |= 0X00FF;
000062 49e9 LDR r1,|L1.1032|
000064 68c9 LDR r1,[r1,#0xc]
000066 f04101ff ORR r1,r1,#0xff
00006a 4ae7 LDR r2,|L1.1032|
00006c 60d1 STR r1,[r2,#0xc]
;;;61
;;;62 LCD_RD_L; //读有效
00006e 4601 MOV r1,r0
000070 4ae9 LDR r2,|L1.1048|
000072 6011 STR r1,[r2,#0]
;;;63 LCD_RD_H;
000074 f04f0101 MOV r1,#1
000078 4ae5 LDR r2,|L1.1040|
00007a f8c211ac STR r1,[r2,#0x1ac]
;;;64 temp = DATAIN;
00007e 49e1 LDR r1,|L1.1028|
000080 f8d11c08 LDR r1,[r1,#0xc08]
000084 ea4f2111 LSR r1,r1,#8
000088 4adf LDR r2,|L1.1032|
00008a 6892 LDR r2,[r2,#8]
00008c ea412102 ORR r1,r1,r2,LSL #8
000090 b288 UXTH r0,r1
;;;65
;;;66 GPIOC->CRL = 0X33333333; //PC0-7 上拉输出
000092 f04f3133 MOV r1,#0x33333333
000096 4adc LDR r2,|L1.1032|
000098 6011 STR r1,[r2,#0]
;;;67 GPIOB->CRH = 0X33333333; //PB8-15 上拉输出
00009a 4ada LDR r2,|L1.1028|
00009c f8c21c04 STR r1,[r2,#0xc04]
;;;68 GPIOB->ODR |= 0XFF00; //全部输出高
0000a0 4611 MOV r1,r2
0000a2 f8d11c0c LDR r1,[r1,#0xc0c]
0000a6 f441417f ORR r1,r1,#0xff00
0000aa f8c21c0c STR r1,[r2,#0xc0c]
;;;69 GPIOC->ODR |= 0X00FF;
0000ae 49d6 LDR r1,|L1.1032|
0000b0 68c9 LDR r1,[r1,#0xc]
0000b2 f04101ff ORR r1,r1,#0xff
0000b6 4ad4 LDR r2,|L1.1032|
0000b8 60d1 STR r1,[r2,#0xc]
;;;70 return temp;
;;;71 }
0000ba 4770 BX lr
;;;72 //写LCD缓存命令,视需要更改0x0022的值,一般LCD驱动
ENDP
LCD_WriteGRAM_EN PROC
;;;73 //IC都使用的该命令
;;;74 void LCD_WriteGRAM_EN(void)
0000bc b500 PUSH {lr}
;;;75 {
;;;76 LCD_CS_L; //选中片选
0000be 2000 MOVS r0,#0
0000c0 49d6 LDR r1,|L1.1052|
0000c2 6008 STR r0,[r1,#0]
;;;77
;;;78 LCD_RS_L; //命令读写控制RS->0有效
0000c4 49d2 LDR r1,|L1.1040|
0000c6 f8c101a4 STR r0,[r1,#0x1a4]
;;;79 LCD_DATA_OUT(0x0022); //写入寄存器地址
0000ca f04f0022 MOV r0,#0x22
0000ce f7fffffe BL LCD_DATA_OUT
;;;80 LCD_RS_H;
0000d2 2001 MOVS r0,#1
0000d4 49d2 LDR r1,|L1.1056|
0000d6 6008 STR r0,[r1,#0]
;;;81 }
0000d8 bd00 POP {pc}
;;;82 //读LCD缓存命令,视需要更改0x0022的值,一般LCD驱动
ENDP
LCD_ReadGRAM_EN PROC
;;;83 //IC都使用的该命令
;;;84 void LCD_ReadGRAM_EN(void)
0000da b500 PUSH {lr}
;;;85 {
;;;86 LCD_CS_L; //选中片选
0000dc 2000 MOVS r0,#0
0000de 49cf LDR r1,|L1.1052|
0000e0 6008 STR r0,[r1,#0]
;;;87
;;;88 LCD_RS_L; //命令读写控制RS->0有效
0000e2 49cb LDR r1,|L1.1040|
0000e4 f8c101a4 STR r0,[r1,#0x1a4]
;;;89 LCD_DATA_OUT(0x0022); //写入寄存器地址
0000e8 f04f0022 MOV r0,#0x22
0000ec f7fffffe BL LCD_DATA_OUT
;;;90 LCD_RS_H;
0000f0 2001 MOVS r0,#1
0000f2 49cb LDR r1,|L1.1056|
0000f4 6008 STR r0,[r1,#0]
;;;91 }
0000f6 bd00 POP {pc}
;;;92 ////////////////////////////////////////////////////////////////////////////////
ENDP
LCD_WriteRegister PROC
;;;115 ////////////////////////////////////////////////////////////////////////////////
;;;116 void LCD_WriteRegister(u16 index, u16 data)
0000f8 b510 PUSH {r4,lr}
;;;117 {
0000fa 4604 MOV r4,r0
0000fc 460b MOV r3,r1
;;;118 ////////////////////////////////////////////////////////////////////////////////
;;;119 // 对于8位模式,则数据端口要进行两次操作,下图是16位模式情况下的操作 //
;;;120 // nCS ----\__________________________________________/------- //
;;;121 // RS ------\____________/----------------------------------- //
;;;122 // nRD ------------------------------------------------------- //
;;;123 // nWR --------\_______/--------\_____/----------------------- //
;;;124 // DB[0:15] ---------[index]----------[data]----------------------- //
;;;125 // //
;;;126 ////////////////////////////////////////////////////////////////////////////////
;;;127 LCD_CS_L; //选中片选
0000fe 2000 MOVS r0,#0
000100 49c6 LDR r1,|L1.1052|
000102 6008 STR r0,[r1,#0]
;;;128
;;;129 LCD_RS_L; //命令读写控制RS->0有效
000104 49c2 LDR r1,|L1.1040|
000106 f8c101a4 STR r0,[r1,#0x1a4]
;;;130 LCD_DATA_OUT(index); //先写入寄存器地址
00010a 4620 MOV r0,r4
00010c f7fffffe BL LCD_DATA_OUT
;;;131
;;;132 LCD_RS_H; //数据读写控制RS->1有效
000110 2001 MOVS r0,#1
000112 49c3 LDR r1,|L1.1056|
000114 6008 STR r0,[r1,#0]
;;;133 LCD_DATA_OUT(data);
000116 4618 MOV r0,r3
000118 f7fffffe BL LCD_DATA_OUT
;;;134
;;;135 LCD_CS_H; //关闭片选
00011c 2001 MOVS r0,#1
00011e 49bc LDR r1,|L1.1040|
000120 f8c101a0 STR r0,[r1,#0x1a0]
;;;136 }
000124 bd10 POP {r4,pc}
;;;137
ENDP
LCD_SetCursor PROC
;;;96 ////////////////////////////////////////////////////////////////////////////////
;;;97 void LCD_SetCursor(u16 x,u16 y)
000126 b530 PUSH {r4,r5,lr}
;;;98 { // *-------->x
000128 4604 MOV r4,r0
00012a 460d MOV r5,r1
;;;99 LCD_WriteRegister(0x0020, x); // 行 | (H 127)
00012c 4621 MOV r1,r4
00012e 2020 MOVS r0,#0x20
000130 f7fffffe BL LCD_WriteRegister
;;;100 LCD_WriteRegister(0x0021, y); // 列 |
000134 4629 MOV r1,r5
000136 2021 MOVS r0,#0x21
000138 f7fffffe BL LCD_WriteRegister
;;;101 /////////////////////////////// |
;;;102 //R61514屏没有20H寄存器,xy坐标通过21H寄存器转化 |
;;;103 //完成,公式:y*256 + x,参见手册R21H寄存器描述 V(V 159)
;;;104 # if R61514_EN > 0
;;;105 LCD_WriteRegister(0x0021,(y << 8) + x);
;;;106 # endif
;;;107 }
00013c bd30 POP {r4,r5,pc}
;;;108
ENDP
LCD_ReadRegister PROC
;;;144 ////////////////////////////////////////////////////////////////////////////////
;;;145 u16 LCD_ReadRegister(u16 index)
00013e b510 PUSH {r4,lr}
;;;146 {
000140 4603 MOV r3,r0
;;;147 ////////////////////////////////////////////////////////////////////////////////
;;;148 // 对于8位模式,则数据端口要进行两次操作,下图是16位模式情况下的操作 //
;;;149 // nCS ----\__________________________________________/------- //
;;;150 // RS ------\____________/----------------------------------- //
;;;151 // nRD -------------------------\_____/----------------------- //
;;;152 // nWR --------\_______/-------------------------------------- //
;;;153 // DB[0:15] ---------[index]----------[data]----------------------- //
;;;154 // //
;;;155 ////////////////////////////////////////////////////////////////////////////////
;;;156 u16 temp = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -