📄 st7920.txt
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.0 [Build 942] for uVision
; commandline ArmCC [--debug -c --asm --interleave -ost7920.o --device=DARMP --apcs=interwork -O0 -IC:\Keil\ARM\INC\Philips ST7920.c]
ARM
AREA ||.text||, CODE, READONLY, ALIGN=2
Delay PROC
;;;8 int i;
;;;9 for (i=n;i>0x00;i--);
000000 e1a01000 MOV r1,r0
000004 ea000000 B |L1.12|
|L1.8|
000008 e2411001 SUB r1,r1,#1
|L1.12|
00000c e3510000 CMP r1,#0
000010 cafffffc BGT |L1.8|
000014 e12fff1e BX lr
;;;10 }
ENDP
SendByte PROC
;;;13 void SendByte(uint8 dat)
;;;14 {
000018 e92d4010 PUSH {r4,lr}
00001c e1a03000 MOV r3,r0
000020 e3a04000 MOV r4,#0
000024 ea000012 B |L1.116|
|L1.40|
000028 e3a00701 MOV r0,#0x40000
00002c e59f1330 LDR r1,|L1.868|
000030 e581001c STR r0,[r1,#0x1c]
000034 e3130080 TST r3,#0x80
000038 0a000002 BEQ |L1.72|
00003c e3a00802 MOV r0,#0x20000
000040 e5810014 STR r0,[r1,#0x14]
000044 ea000002 B |L1.84|
|L1.72|
000048 e3a00802 MOV r0,#0x20000
00004c e59f1310 LDR r1,|L1.868|
000050 e581001c STR r0,[r1,#0x1c]
|L1.84|
000054 e3a00005 MOV r0,#5
000058 ebfffffe BL Delay
00005c e3a00701 MOV r0,#0x40000
000060 e59f12fc LDR r1,|L1.868|
000064 e5810014 STR r0,[r1,#0x14]
000068 e1a00c83 LSL r0,r3,#25
00006c e1a03c20 LSR r3,r0,#24
000070 e2844001 ADD r4,r4,#1
|L1.116|
000074 e3540008 CMP r4,#8
000078 baffffea BLT |L1.40|
00007c e8bd4010 POP {r4,lr}
000080 e12fff1e BX lr
;;;15 int i;
;;;16 for (i=0;i<8;i++)
;;;17 {
;;;18 IO1CLR=ST7920_Clk; //SCK=0
;;;19 if((dat & 0x80)!=0)
;;;20 IO1SET=ST7920_Sda; //SID=1
;;;21 else
;;;22 IO1CLR=ST7920_Sda; //SID=0
;;;23 Delay(5);
;;;24 IO1SET=ST7920_Clk; //SCK=1;
;;;25 dat = (dat<<1);
;;;26 }
;;;27 }
ENDP
SendCmd PROC
;;;30 void SendCmd(uint8 dat)
;;;31 {
000084 e92d4010 PUSH {r4,lr}
000088 e1a04000 MOV r4,r0
00008c e3a000f8 MOV r0,#0xf8
000090 ebfffffe BL SendByte
000094 e20400f0 AND r0,r4,#0xf0
000098 ebfffffe BL SendByte
00009c e3a010f0 MOV r1,#0xf0
0000a0 e0010204 AND r0,r1,r4,LSL #4
0000a4 ebfffffe BL SendByte
0000a8 e8bd4010 POP {r4,lr}
0000ac e12fff1e BX lr
;;;32 SendByte(0xf8);
;;;33 SendByte(dat & 0xf0);
;;;34 SendByte((dat<<4)&0xf0);
;;;35 }
ENDP
SendDat PROC
;;;38 void SendDat(uint8 dat)
;;;39 {
0000b0 e92d4010 PUSH {r4,lr}
0000b4 e1a04000 MOV r4,r0
0000b8 e3a000fa MOV r0,#0xfa
0000bc ebfffffe BL SendByte
0000c0 e20400f0 AND r0,r4,#0xf0
0000c4 ebfffffe BL SendByte
0000c8 e3a010f0 MOV r1,#0xf0
0000cc e0010204 AND r0,r1,r4,LSL #4
0000d0 ebfffffe BL SendByte
0000d4 e8bd4010 POP {r4,lr}
0000d8 e12fff1e BX lr
;;;40 SendByte(0xfa);
;;;41 SendByte(dat & 0xf0);
;;;42 SendByte((dat<<4)&0xf0);
;;;43 }
ENDP
DispChar PROC
;;;48 void DispChar(uint8 x_addr, uint8 data)
;;;49 {
0000dc e92d4030 PUSH {r4,r5,lr}
0000e0 e1a04000 MOV r4,r0
0000e4 e1a05001 MOV r5,r1
0000e8 e1a00004 MOV r0,r4
0000ec ebfffffe BL SendCmd
0000f0 e1a00005 MOV r0,r5
0000f4 ebfffffe BL SendDat
0000f8 e8bd4030 POP {r4,r5,lr}
0000fc e12fff1e BX lr
;;;50 SendCmd(x_addr);
;;;51 SendDat(data);
;;;52
;;;53 }
ENDP
DispChars PROC
;;;60 void DispChars(uint8 Addr,uint8 *p,uint8 Num)
;;;61 {
000100 e92d40f0 PUSH {r4-r7,lr}
000104 e1a07000 MOV r7,r0
000108 e1a04001 MOV r4,r1
00010c e1a05002 MOV r5,r2
000110 e1a00007 MOV r0,r7
000114 ebfffffe BL SendCmd
000118 e3a06000 MOV r6,#0
00011c ea000003 B |L1.304|
|L1.288|
000120 e7d40006 LDRB r0,[r4,r6]
000124 ebfffffe BL SendDat
000128 e2860001 ADD r0,r6,#1
00012c e20060ff AND r6,r0,#0xff
|L1.304|
000130 e1560005 CMP r6,r5
000134 bafffff9 BLT |L1.288|
000138 e8bd40f0 POP {r4-r7,lr}
00013c e12fff1e BX lr
;;;62 uint8 i;
;;;63 SendCmd(Addr);
;;;64 for(i=0;i<Num;i++)
;;;65 SendDat(*(p+i));
;;;66 }
ENDP
Disp PROC
;;;68 void Disp(uint8 x_addr, uint8 *p)
;;;69 {
000140 e92d40f0 PUSH {r4-r7,lr}
000144 e1a04000 MOV r4,r0
000148 e1a05001 MOV r5,r1
00014c e3a07000 MOV r7,#0
000150 e1a00004 MOV r0,r4
000154 ebfffffe BL SendCmd
000158 e3a06000 MOV r6,#0
00015c ea00000c B |L1.404|
|L1.352|
000160 e7d50006 LDRB r0,[r5,r6]
000164 e3500000 CMP r0,#0
000168 1a000000 BNE |L1.368|
00016c e3a07001 MOV r7,#1
|L1.368|
000170 e3570000 CMP r7,#0
000174 1a000002 BNE |L1.388|
000178 e7d50006 LDRB r0,[r5,r6]
00017c ebfffffe BL SendDat
000180 ea000001 B |L1.396|
|L1.388|
000184 e3a00020 MOV r0,#0x20
000188 ebfffffe BL SendDat
|L1.396|
00018c e2860001 ADD r0,r6,#1
000190 e20060ff AND r6,r0,#0xff
|L1.404|
000194 e356000e CMP r6,#0xe
000198 bafffff0 BLT |L1.352|
00019c e8bd40f0 POP {r4-r7,lr}
0001a0 e12fff1e BX lr
;;;70
;;;71 uint8 i,flag=0;
;;;72 SendCmd(x_addr);
;;;73 for(i=0;i<14;i++)
;;;74 {
;;;75 if(*(p+i)=='\0')
;;;76 flag=1;
;;;77 if(flag==0)
;;;78 SendDat((uint8)*(p+i));
;;;79 else
;;;80 SendDat(' ');
;;;81 }
;;;82
;;;83
;;;84 }
ENDP
Display PROC
;;;90 void Display(uint8 x_add,uint8 high,uint8 low)
;;;91 {
0001a4 e92d4070 PUSH {r4-r6,lr}
0001a8 e1a04000 MOV r4,r0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -