⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nokia_5110.txt

📁 嵌入式开发
💻 TXT
📖 第 1 页 / 共 4 页
字号:
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.0 [Build 951] for uVision
; commandline ArmCC [--debug -c --asm --interleave -onokia_5110.o --device=DARMP --apcs=interwork -O0 -IC:\Keil\ARM\INC\Philips NOKIA_LCD\nokia_5110.c]

                          ARM

                          AREA ||.text.7||, CODE, READONLY, ALIGN=2

                  DelayXms PROC
;;;20      uint16  D_t;
;;;21      while(xs--)
000000  ea000006          B        |L1.32|
;;;22      {
;;;23       for(D_t=Fcclk/1000;D_t>0;D_t--);
                  |L1.4|
000004  e59f18b8          LDR      r1,|L1.2244|
000008  ea000002          B        |L1.24|
                  |L1.12|
00000c  e2412001          SUB      r2,r1,#1
000010  e1a01802          LSL      r1,r2,#16
000014  e1a01821          LSR      r1,r1,#16
                  |L1.24|
000018  e3510000          CMP      r1,#0
00001c  cafffffa          BGT      |L1.12|
                  |L1.32|
000020  e1b02000          MOVS     r2,r0
000024  e2403001          SUB      r3,r0,#1
000028  e1a00803          LSL      r0,r3,#16
00002c  e1a00820          LSR      r0,r0,#16
000030  1afffff3          BNE      |L1.4|
;;;24      }
;;;25      
;;;26     }
000034  e12fff1e          BX       lr
                          ENDP

                  LCD_write_byte PROC
;;;253        unsigned char i;
;;;254         IO1CLR=LCD_CE;
000038  e3a03501          MOV      r3,#0x400000
00003c  e59fc884          LDR      r12,|L1.2248|
000040  e58c301c          STR      r3,[r12,#0x1c]
;;;255        if (command == 0)
000044  e3510000          CMP      r1,#0
000048  1a000002          BNE      |L1.88|
;;;256          IO0CLR=LCD_DC;
00004c  e3a03a02          MOV      r3,#0x2000
000050  e58c300c          STR      r3,[r12,#0xc]
000054  ea000002          B        |L1.100|
;;;257        else
;;;258          IO0SET=LCD_DC;
                  |L1.88|
000058  e3a03a02          MOV      r3,#0x2000
00005c  e59fc864          LDR      r12,|L1.2248|
000060  e58c3004          STR      r3,[r12,#4]
;;;259    		for(i=0;i<8;i++)
                  |L1.100|
000064  e3a02000          MOV      r2,#0
000068  ea000011          B        |L1.180|
;;;260    		{
;;;261    			if(dat&0x80)
                  |L1.108|
00006c  e3100080          TST      r0,#0x80
000070  0a000003          BEQ      |L1.132|
;;;262    				IO0SET=SDIN;
000074  e3a03a01          MOV      r3,#0x1000
000078  e59fc848          LDR      r12,|L1.2248|
00007c  e58c3004          STR      r3,[r12,#4]
000080  ea000002          B        |L1.144|
;;;263    			else
;;;264    				IO0CLR=SDIN;
                  |L1.132|
000084  e3a03a01          MOV      r3,#0x1000
000088  e59fc838          LDR      r12,|L1.2248|
00008c  e58c300c          STR      r3,[r12,#0xc]
;;;265    			IO0CLR=SCLK;
                  |L1.144|
000090  e3a03b02          MOV      r3,#0x800
000094  e59fc82c          LDR      r12,|L1.2248|
000098  e58c300c          STR      r3,[r12,#0xc]
;;;266    			dat = dat << 1;
00009c  e1a03c80          LSL      r3,r0,#25
0000a0  e1a00c23          LSR      r0,r3,#24
;;;267    			IO0SET=SCLK;
0000a4  e3a03b02          MOV      r3,#0x800
0000a8  e58c3004          STR      r3,[r12,#4]
0000ac  e2823001          ADD      r3,r2,#1              ;259
0000b0  e20320ff          AND      r2,r3,#0xff           ;259
                  |L1.180|
0000b4  e3520008          CMP      r2,#8                 ;259
0000b8  baffffeb          BLT      |L1.108|              ;259
;;;268    		}
;;;269     
;;;270    	 IO1SET=LCD_CE;
0000bc  e3a03501          MOV      r3,#0x400000
0000c0  e59fc800          LDR      r12,|L1.2248|
0000c4  e58c3014          STR      r3,[r12,#0x14]
;;;271      }
0000c8  e12fff1e          BX       lr
                          ENDP

                  LCD_clear PROC
;;;63     void LCD_clear(void)
;;;64       {
0000cc  e92d4010          PUSH     {r4,lr}
;;;65         unsigned int i;
;;;66     
;;;67         LCD_write_byte(0x0c, 0);			
0000d0  e3a01000          MOV      r1,#0
0000d4  e3a0000c          MOV      r0,#0xc
0000d8  ebfffffe          BL       LCD_write_byte
;;;68         LCD_write_byte(0x80, 0);			
0000dc  e3a01000          MOV      r1,#0
0000e0  e3a00080          MOV      r0,#0x80
0000e4  ebfffffe          BL       LCD_write_byte
;;;69     
;;;70         for (i=0; i<504; i++)
0000e8  e3a04000          MOV      r4,#0
0000ec  ea000003          B        |L1.256|
;;;71         LCD_write_byte(0, 1);			
                  |L1.240|
0000f0  e3a01001          MOV      r1,#1
0000f4  e3a00000          MOV      r0,#0
0000f8  ebfffffe          BL       LCD_write_byte
0000fc  e2844001          ADD      r4,r4,#1              ;70
                  |L1.256|
000100  e3540f7e          CMP      r4,#0x1f8             ;70
000104  3afffff9          BCC      |L1.240|              ;70
;;;72       }
000108  e8bd4010          POP      {r4,lr}
00010c  e12fff1e          BX       lr
                          ENDP

                  LCD_init PROC
;;;37     void LCD_init(void)
;;;38       {
000110  e52de004          PUSH     {lr}
;;;39                 // 产生一个让LCD复位的低电平脉冲
;;;40         IO0CLR=LCD_RST;
000114  e3a00901          MOV      r0,#0x4000
000118  e59f17a8          LDR      r1,|L1.2248|
00011c  e581000c          STR      r0,[r1,#0xc]
;;;41     	DelayXms(1);
000120  e3a00001          MOV      r0,#1
000124  ebfffffe          BL       DelayXms
;;;42         IO0SET=LCD_RST;
000128  e3a00901          MOV      r0,#0x4000
00012c  e59f1794          LDR      r1,|L1.2248|
000130  e5810004          STR      r0,[r1,#4]
;;;43         IO1CLR=LCD_CE;
000134  e3a00501          MOV      r0,#0x400000
000138  e581001c          STR      r0,[r1,#0x1c]
;;;44       	DelayXms(1);
00013c  e3a00001          MOV      r0,#1
000140  ebfffffe          BL       DelayXms
;;;45         IO1SET=LCD_CE;
000144  e3a00501          MOV      r0,#0x400000
000148  e59f1778          LDR      r1,|L1.2248|
00014c  e5810014          STR      r0,[r1,#0x14]
;;;46       	DelayXms(1);
000150  e3a00001          MOV      r0,#1
000154  ebfffffe          BL       DelayXms
;;;47         LCD_write_byte(0x21, 0);	// 使用扩展命令设置LCD模式
000158  e3a01000          MOV      r1,#0
00015c  e3a00021          MOV      r0,#0x21
000160  ebfffffe          BL       LCD_write_byte
;;;48         LCD_write_byte(0xc8, 0);	// 设置偏置电压
000164  e3a01000          MOV      r1,#0
000168  e3a000c8          MOV      r0,#0xc8
00016c  ebfffffe          BL       LCD_write_byte
;;;49         LCD_write_byte(0x06, 0);	// 温度校正
000170  e3a01000          MOV      r1,#0
000174  e3a00006          MOV      r0,#6
000178  ebfffffe          BL       LCD_write_byte
;;;50         LCD_write_byte(0x13, 0);	// 1:48
00017c  e3a01000          MOV      r1,#0
000180  e3a00013          MOV      r0,#0x13
000184  ebfffffe          BL       LCD_write_byte
;;;51         LCD_write_byte(0x20, 0);	// 使用基本命令
000188  e3a01000          MOV      r1,#0
00018c  e3a00020          MOV      r0,#0x20
000190  ebfffffe          BL       LCD_write_byte
;;;52         LCD_clear();	        // 清屏
000194  ebfffffe          BL       LCD_clear
;;;53         LCD_write_byte(0x0c, 0);	// 设定显示模式,正常显示
000198  e3a01000          MOV      r1,#0
00019c  e3a0000c          MOV      r0,#0xc
0001a0  ebfffffe          BL       LCD_write_byte
;;;54         IO1CLR=LCD_CE;	   // 关闭LCD
0001a4  e3a00501          MOV      r0,#0x400000
0001a8  e59f1718          LDR      r1,|L1.2248|
0001ac  e581001c          STR      r0,[r1,#0x1c]
;;;55       }
0001b0  e49de004          POP      {lr}
0001b4  e12fff1e          BX       lr
                          ENDP

                  LCD_set_XY PROC
;;;83     void LCD_set_XY(unsigned char X, unsigned char Y)
;;;84       {
0001b8  e92d4030          PUSH     {r4,r5,lr}
0001bc  e1a04000          MOV      r4,r0
0001c0  e1a05001          MOV      r5,r1
;;;85         LCD_write_byte(0x40 | Y, 0);		// column
0001c4  e3850040          ORR      r0,r5,#0x40
0001c8  e3a01000          MOV      r1,#0
0001cc  ebfffffe          BL       LCD_write_byte
;;;86         LCD_write_byte(0x80 | X, 0);          	// row
0001d0  e3840080          ORR      r0,r4,#0x80
0001d4  e3a01000          MOV      r1,#0
0001d8  ebfffffe          BL       LCD_write_byte
;;;87       }
0001dc  e8bd4030          POP      {r4,r5,lr}
0001e0  e12fff1e          BX       lr
                          ENDP

                  LCD_write_char PROC
;;;97     void LCD_write_char(unsigned char c)
;;;98       {
0001e4  e92d4030          PUSH     {r4,r5,lr}
0001e8  e1a04000          MOV      r4,r0
;;;99         unsigned char line;
;;;100    
;;;101        c -= 32;
0001ec  e2440020          SUB      r0,r4,#0x20
0001f0  e20040ff          AND      r4,r0,#0xff
;;;102    
;;;103        for (line=0; line<6; line++)
0001f4  e3a05000          MOV      r5,#0
0001f8  ea000007          B        |L1.540|
;;;104        LCD_write_byte(font6x8[c][line], 1);
                  |L1.508|
0001fc  e0841084          ADD      r1,r4,r4,LSL #1
000200  e59f26c4          LDR      r2,|L1.2252|
000204  e0821081          ADD      r1,r2,r1,LSL #1
000208  e7d10005          LDRB     r0,[r1,r5]
00020c  e3a01001          MOV      r1,#1
000210  ebfffffe          BL       LCD_write_byte
000214  e2850001          ADD      r0,r5,#1              ;103
000218  e20050ff          AND      r5,r0,#0xff           ;103
                  |L1.540|
00021c  e3550006          CMP      r5,#6                 ;103
000220  bafffff5          BLT      |L1.508|              ;103
;;;105      }
000224  e8bd4030          POP      {r4,r5,lr}
000228  e12fff1e          BX       lr
                          ENDP

                  LCD_write_english_string PROC
;;;116    void LCD_write_english_string(unsigned char X,unsigned char Y,char *s)
;;;117      {
00022c  e92d4070          PUSH     {r4-r6,lr}
000230  e1a04000          MOV      r4,r0
000234  e1a06001          MOV      r6,r1
000238  e1a05002          MOV      r5,r2
;;;118        LCD_set_XY(X,Y);
00023c  e1a01006          MOV      r1,r6
000240  e1a00004          MOV      r0,r4
000244  ebfffffe          BL       LCD_set_XY
;;;119        while (*s) 
000248  ea000002          B        |L1.600|
;;;120          {
;;;121    	 LCD_write_char(*s);
                  |L1.588|
00024c  e5d50000          LDRB     r0,[r5,#0]
000250  ebfffffe          BL       LCD_write_char
;;;122    	 s++;
000254  e2855001          ADD      r5,r5,#1
                  |L1.600|
000258  e5d50000          LDRB     r0,[r5,#0]
00025c  e3500000          CMP      r0,#0
000260  1afffff9          BNE      |L1.588|
;;;123          }
;;;124      }
000264  e8bd4070          POP      {r4-r6,lr}
000268  e12fff1e          BX       lr
                          ENDP

                  LCD_write_chinese_string PROC
;;;142                       unsigned char line,unsigned char row)
;;;143      {
00026c  e92d4ff0          PUSH     {r4-r11,lr}
000270  e1a04000          MOV      r4,r0
000274  e1a05001          MOV      r5,r1
000278  e1a06002          MOV      r6,r2
00027c  e1a07003          MOV      r7,r3
000280  e28d9024          ADD      r9,sp,#0x24
000284  e8990300          LDM      r9,{r8,r9}
;;;144        unsigned char i,n;
;;;145        
;;;146        LCD_set_XY(X,Y);                             //设置初始位置
000288  e1a01005          MOV      r1,r5
00028c  e1a00004          MOV      r0,r4
000290  ebfffffe          BL       LCD_set_XY
;;;147        
;;;148        for (i=0;i<num;)
000294  e3a0a000          MOV      r10,#0
000298  ea000022          B        |L1.808|
;;;149          {
;;;150          	for (n=0; n<ch_with*2; n++)              //写一个汉字
                  |L1.668|
00029c  e3a0b000          MOV      r11,#0
0002a0  ea000017          B        |L1.772|
;;;151          	  { 
;;;152          	    if (n==ch_with)                      //写汉字的下半部分
                  |L1.676|
0002a4  e15b0006          CMP      r11,r6
0002a8  1a00000c          BNE      |L1.736|
;;;153          	      {
;;;154          	        if (i==0) LCD_set_XY(X,Y+1);
0002ac  e35a0000          CMP      r10,#0
0002b0  1a000004          BNE      |L1.712|
0002b4  e2850001          ADD      r0,r5,#1
0002b8  e20010ff          AND      r1,r0,#0xff
0002bc  e1a00004          MOV      r0,r4
0002c0  ebfffffe          BL       LCD_set_XY
0002c4  ea000005          B        |L1.736|
;;;155          	        else
;;;156          	           LCD_set_XY((X+(ch_with+row)*i),Y+1);
                  |L1.712|
0002c8  e2852001          ADD      r2,r5,#1
0002cc  e20210ff          AND      r1,r2,#0xff

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -