📄 lcd_driver.txt
字号:
0002ae f7fffffe BL LCD_SetWindow
;;;284 }
0002b2 e8bd83f0 POP {r4-r9,pc}
;;;285 //液晶端口初始化,外部无需调用
ENDP
LCD_PortInit PROC
;;;286 void LCD_PortInit(void)
0002b6 485b LDR r0,|L1.1060|
;;;287 {
;;;288 //控制端口方向初始化,移植时只需更改有关宏定义
;;;289 /*LCD_CS_DDR |= BIT(LCD_CS_BIT);
;;;290 LCD_RS_DDR |= BIT(LCD_RS_BIT);
;;;291 LCD_WR_DDR |= BIT(LCD_WR_BIT);
;;;292 LCD_RD_DDR |= BIT(LCD_RD_BIT);
;;;293 LCD_REST_DDR |= BIT(LCD_REST_BIT);*/
;;;294 //控制端口电平初始化
;;;295 /*LCD_CS_H;
;;;296 LCD_RS_H;
;;;297 LCD_WR_H;
;;;298 LCD_RD_H;
;;;299 LCD_REST_H;*/
;;;300 //数据总线端口方向初始化,视接口需要更改或添加
;;;301
;;;302 //DATA_L_DDR = 0xff;
;;;303 //DATA_L_PORT = 0xff;
;;;304
;;;305 RCC->APB2ENR|=1<<3;//先使能外设PORTB时钟
0002b8 6980 LDR r0,[r0,#0x18]
0002ba f0400008 ORR r0,r0,#8
0002be 4959 LDR r1,|L1.1060|
0002c0 6188 STR r0,[r1,#0x18]
;;;306 RCC->APB2ENR|=1<<4;//先使能外设PORTC时钟
0002c2 4608 MOV r0,r1
0002c4 6980 LDR r0,[r0,#0x18]
0002c6 f0400010 ORR r0,r0,#0x10
0002ca 6188 STR r0,[r1,#0x18]
;;;307
;;;308
;;;309 //PORTC0~13推挽输出
;;;310 GPIOC->CRL=0x33333333;
0002cc f04f3033 MOV r0,#0x33333333
0002d0 494d LDR r1,|L1.1032|
0002d2 6008 STR r0,[r1,#0]
;;;311 GPIOC->CRH&=0xFF000000;
0002d4 4608 MOV r0,r1
0002d6 6840 LDR r0,[r0,#4]
0002d8 f000407f AND r0,r0,#0xff000000
0002dc 6048 STR r0,[r1,#4]
;;;312 GPIOC->CRH|=0x00333333;
0002de 4608 MOV r0,r1
0002e0 6840 LDR r0,[r0,#4]
0002e2 4951 LDR r1,|L1.1064|
0002e4 4308 ORRS r0,r0,r1
0002e6 4948 LDR r1,|L1.1032|
0002e8 6048 STR r0,[r1,#4]
;;;313 GPIOC->ODR|=0x3FFF;
0002ea 4608 MOV r0,r1
0002ec 68c0 LDR r0,[r0,#0xc]
0002ee f64371ff MOV r1,#0x3fff
0002f2 4308 ORRS r0,r0,r1
0002f4 4944 LDR r1,|L1.1032|
0002f6 60c8 STR r0,[r1,#0xc]
;;;314 //PORTB 高8位推挽输出
;;;315 GPIOB->CRH=0x33333333;
0002f8 f04f3033 MOV r0,#0x33333333
0002fc 4945 LDR r1,|L1.1044|
0002fe 6008 STR r0,[r1,#0]
;;;316 GPIOB->ODR|=0xFF00;
000300 4840 LDR r0,|L1.1028|
000302 f8d00c0c LDR r0,[r0,#0xc0c]
000306 f440407f ORR r0,r0,#0xff00
00030a 493d LDR r1,|L1.1024|
00030c 6008 STR r0,[r1,#0]
;;;317
;;;318
;;;319
;;;320 }
00030e 4770 BX lr
;;;321 //液晶驱动初始化
ENDP
LCD_DriverInit PROC
;;;322 void LCD_DriverInit(void)
000310 b510 PUSH {r4,lr}
;;;323 {
;;;324 unsigned short int lcd_id = 0x0000; //保存LCD_ID号
000312 2400 MOVS r4,#0
;;;325 LCD_PortInit(); //调用端口初始化
000314 f7fffffe BL LCD_PortInit
;;;326
;;;327 LCD_REST_L; //复位控制
000318 2000 MOVS r0,#0
00031a 4944 LDR r1,|L1.1068|
00031c 6008 STR r0,[r1,#0]
;;;328 Delay_nMS(1);
00031e f04f0001 MOV r0,#1
000322 f7fffffe BL delay_ms
;;;329 LCD_REST_H;
000326 2001 MOVS r0,#1
000328 4939 LDR r1,|L1.1040|
00032a f8c101b0 STR r0,[r1,#0x1b0]
;;;330 Delay_nMS(1); //完成复位
00032e f7fffffe BL delay_ms
;;;331
;;;332 LCD_WriteRegister(0x0000, 0x0001); //开启时钟
000332 2101 MOVS r1,#1
000334 2000 MOVS r0,#0
000336 f7fffffe BL LCD_WriteRegister
;;;333 Delay_nMS(10);
00033a 200a MOVS r0,#0xa
00033c f7fffffe BL delay_ms
;;;334 lcd_id = LCD_ReadRegister(0x0000); //读取LCD_ID
000340 2000 MOVS r0,#0
000342 f7fffffe BL LCD_ReadRegister
000346 4604 MOV r4,r0
;;;335
;;;336 while(0)
000348 bf00 NOP
00034a bf00 NOP
;;;337 {
;;;338 UART_Transmit(lcd_id >> 8);
;;;339 UART_Transmit(lcd_id);
;;;340 Delay_nMS(500);
;;;341 }
;;;342 switch(lcd_id)
00034c 4620 MOV r0,r4
00034e f2493225 MOV r2,#0x9325
000352 1aa1 SUBS r1,r4,r2
000354 4294 CMP r4,r2
000356 d052 BEQ |L1.1022|
000358 dc0a BGT |L1.880|
00035a f5a050a8 SUB r0,r0,#0x1500
00035e 3814 SUBS r0,r0,#0x14
000360 d00c BEQ |L1.892|
000362 f5a040fa SUB r0,r0,#0x7d00
000366 38ec SUBS r0,r0,#0xec
000368 d07e BEQ |L1.1128|
00036a 2820 CMP r0,#0x20
00036c d17d BNE |L1.1130|
00036e e1e9 B |L1.1860|
|L1.880|
000370 2903 CMP r1,#3
000372 d07b BEQ |L1.1132|
000374 f5b14f80 CMP r1,#0x4000
000378 d177 BNE |L1.1130|
00037a e0de B |L1.1338|
|L1.892|
;;;343 {
;;;344 //R61514
;;;345 case 0x1514: //R61514S驱动IC
;;;346 LCD_WriteRegister(0x0007, 0x0000);
00037c 2100 MOVS r1,#0
00037e 2007 MOVS r0,#7
000380 f7fffffe BL LCD_WriteRegister
;;;347 Delay_nMS(2);
000384 2002 MOVS r0,#2
000386 f7fffffe BL delay_ms
;;;348 LCD_WriteRegister(0x0017, 0x0001);
00038a 2101 MOVS r1,#1
00038c 2017 MOVS r0,#0x17
00038e f7fffffe BL LCD_WriteRegister
;;;349 LCD_WriteRegister(0x0010, 0x4410);
000392 f2444110 MOV r1,#0x4410
000396 2010 MOVS r0,#0x10
000398 f7fffffe BL LCD_WriteRegister
;;;350 LCD_WriteRegister(0x0011, 0x0000);
00039c 2100 MOVS r1,#0
00039e 2011 MOVS r0,#0x11
0003a0 f7fffffe BL LCD_WriteRegister
;;;351 LCD_WriteRegister(0x0012, 0x0118);
0003a4 f44f718c MOV r1,#0x118
0003a8 2012 MOVS r0,#0x12
0003aa f7fffffe BL LCD_WriteRegister
;;;352 LCD_WriteRegister(0x0013, 0x0d23);
0003ae f6405123 MOV r1,#0xd23
0003b2 2013 MOVS r0,#0x13
0003b4 f7fffffe BL LCD_WriteRegister
;;;353 Delay_nMS(2);
0003b8 2002 MOVS r0,#2
0003ba f7fffffe BL delay_ms
;;;354 LCD_WriteRegister(0x0010, 0x4490);
0003be f2444190 MOV r1,#0x4490
0003c2 2010 MOVS r0,#0x10
0003c4 f7fffffe BL LCD_WriteRegister
;;;355 LCD_WriteRegister(0x0011, 0x0000);
0003c8 2100 MOVS r1,#0
0003ca 2011 MOVS r0,#0x11
0003cc f7fffffe BL LCD_WriteRegister
;;;356 LCD_WriteRegister(0x0012, 0x013d);
0003d0 f240113d MOV r1,#0x13d
0003d4 2012 MOVS r0,#0x12
0003d6 f7fffffe BL LCD_WriteRegister
;;;357 Delay_nMS(2);
0003da 2002 MOVS r0,#2
0003dc f7fffffe BL delay_ms
;;;358 LCD_WriteRegister(0x0001, 0x0213);
0003e0 f2402113 MOV r1,#0x213
0003e4 2001 MOVS r0,#1
0003e6 f7fffffe BL LCD_WriteRegister
;;;359 LCD_WriteRegister(0x0003, 0x1030); //0x1030,设置接口方式,颜色位数和扫描方向
0003ea f2410130 MOV r1,#0x1030
0003ee 2003 MOVS r0,#3
0003f0 f7fffffe BL LCD_WriteRegister
;;;360 LCD_WriteRegister(0x0007, 0x0005);
0003f4 2105 MOVS r1,#5
0003f6 2007 MOVS r0,#7
0003f8 f7fffffe BL LCD_WriteRegister
;;;361 LCD_WriteRegister(0x0008, 0x0603);
0003fc e018 B |L1.1072|
|L1.1022|
0003fe e09a B |L1.1334|
|L1.1024|
DCD 0x40010c0c
|L1.1028|
DCD 0x40010000
|L1.1032|
DCD 0x40011000
|L1.1036|
DCD 0x422201a8
|L1.1040|
DCD 0x42220000
|L1.1044|
DCD 0x40010c04
|L1.1048|
DCD 0x422201ac
|L1.1052|
DCD 0x422201a0
|L1.1056|
DCD 0x422201a4
|L1.1060|
DCD 0x40021000
|L1.1064|
DCD 0x00333333
|L1.1068|
DCD 0x422201b0
|L1.1072|
000430 f2406103 MOV r1,#0x603
000434 2008 MOVS r0,#8
000436 f7fffffe BL LCD_WriteRegister
;;;362 LCD_WriteRegister(0x0009, 0x002f);
00043a 212f MOVS r1,#0x2f
00043c 2009 MOVS r0,#9
00043e f7fffffe BL LCD_WriteRegister
;;;363 LCD_WriteRegister(0x000b, 0x8000);
000442 f44f4100 MOV r1,#0x8000
000446 200b MOVS r0,#0xb
000448 f7fffffe BL LCD_WriteRegister
;;;364
;;;365 LCD_WriteRegister(0x0040, 0x0000);
00044c 2100 MOVS r1,#0
00044e 2040 MOVS r0,#0x40
000450 f7fffffe BL LCD_WriteRegister
;;;366 LCD_WriteRegister(0x0041, 0x0000);
000454 2100 MOVS r1,#0
000456 2041 MOVS r0,#0x41
000458 f7fffffe BL LCD_WriteRegister
;;;367 LCD_WriteRegister(0x0042, 0x9f00);
00045c f44f411f MOV r1,#0x9f00
000460 2042 MOVS r0,#0x42
000462 f7fffffe BL LCD_WriteRegister
;;;368 LCD_WriteRegister(0x0043, 0x9f00);
000466 e002 B |L1.1134|
|L1.1128|
000468 e16d B |L1.1862|
|L1.1130|
00046a e218 B |L1.2206|
|L1.1132|
00046c e064 B |L1.1336|
|L1.1134|
00046e f44f411f MOV r1,#0x9f00
000472 2043 MOVS r0,#0x43
000474 f7fffffe BL LCD_WriteRegister
;;;369 LCD_WriteRegister(0x0044, 0x7f00); //水平窗口起始大小(高8位HEA[结束地址],低8位HSA[起始地址])
000478 f44f41fe MOV r1,#0x7f00
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -