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

📄 lcd0.lis

📁 长沙理工自己的实验程序
💻 LIS
字号:
                        .module lcd0.c
                        .area text(rom, con, rel)
                ;              i -> R10
                ;              j -> R16,R17
                        .even
 0000           _timeDelay::
 0000 AA92              st -y,R10
 0002           ; #include "lcd0.h"
 0002           ; 
 0002           ; void timeDelay(unsigned int j)                     /* 延时                  */
 0002           ; {
 0002           ;     unsigned char i;
 0002           ;       
 0002           ;       for(i = 0;i < j;i++);
 0002 AA24              clr R10
 0004 01C0              xjmp L5
 0006           L2:
 0006           L3:
 0006 A394              inc R10
 0008           L5:
 0008 2A2C              mov R2,R10
 000A 3324              clr R3
 000C 2016              cp R2,R16
 000E 3106              cpc R3,R17
 0010 D0F3              brlo L2
 0012           X0:
 0012           L1:
 0012                   .dbline 0 ; func end
 0012 A990              ld R10,y+
 0014 0895              ret
 0016           ;         ucData -> R16
                        .even
 0016           _lcdWrite::
 0016           ; }
 0016           ; 
 0016           ; void lcdWrite(unsigned char ucData)
 0016           ; {
 0016           L7:
 0016           ;     while ((PINE & 0x80) != 0x00);                  /* ASK=1,状态为忙,不能接收数据      */
 0016           L8:
 0016 0F99              sbic 0x1,7
 0018 FECF              rjmp L7
 001A           X1:
 001A           ; 	
 001A           ; 	DATA_H;
 001A C09A              sbi 0x18,0
 001C           ;       PORTA = ucData;
 001C 0BBB              out 0x1b,R16
 001E           ;       DATA_L;
 001E C098              cbi 0x18,0
 0020           ;       REQUEST_H;
 0020 1E9A              sbi 0x03,6
 0022           L10:
 0022           ; 	
 0022           ; 	while((PINE & 0x80) == 0x00);                   /* ASK=0,闲,接收数据                 */
 0022           L11:
 0022 0F9B              sbis 0x1,7
 0024 FECF              rjmp L10
 0026           X2:
 0026           L6:
 0026                   .dbline 0 ; func end
 0026 0895              ret
                        .even
 0028           _lcdInitiate::
 0028           ; }
 0028           ; 
 0028           ; void lcdInitiate(void)
 0028           ; {
 0028           ;     DDRB  |= 0x01;                                  /* 定义PB0(LCD)口为输出            */
 0028 B89A              sbi 0x17,0
 002A           ;       PORTB &= 0xfe;                                  /* PB0口输出为0           */                            
 002A 88B3              in R24,0x18
 002C 8E7F              andi R24,254
 002E 88BB              out 0x18,R24
 0030           ;       DDRE   = 0x40;                                  /* PE6为输出            */
 0030 80E4              ldi R24,64
 0032 82B9              out 0x2,R24
 0034           ;       PORTE  = 0xff;                                  /* PE口输出为1          */
 0034 8FEF              ldi R24,255
 0036 83B9              out 0x3,R24
 0038           ;       timeDelay(10);
 0038 0AE0              ldi R16,10
 003A 10E0              ldi R17,0
 003C E1DF              xcall _timeDelay
 003E           L13:
 003E                   .dbline 0 ; func end
 003E 0895              ret
                        .even
 0040           _lcdClear::
 0040           ; }
 0040           ; 
 0040           ; void lcdClear(void)
 0040           ; {
 0040           ;     lcdWrite(0xf4);                                  /* 清屏                */
 0040 04EF              ldi R16,244
 0042 E9DF              xcall _lcdWrite
 0044           L14:
 0044                   .dbline 0 ; func end
 0044 0895              ret
 0046           ;        ucpData -> R20,R21
 0046           ;            ucY -> R10
 0046           ;            ucX -> R22
                        .even
 0046           _characterDisplay::
 0046 0E940000          xcall push_xgsetF00C
 004A A22E              mov R10,R18
 004C 602F              mov R22,R16
 004E 4E81              ldd R20,y+6
 0050 5F81              ldd R21,y+7
 0052           ; }
 0052           ; 
 0052           ; void characterDisplay(unsigned char ucX,unsigned char ucY,unsigned char *ucpData)
 0052           ; {   
 0052 13C0              xjmp L17
 0054           L16:
 0054           ;     while (*ucpData)
 0054           ;     {
 0054           ;         lcdWrite(0xf1);                               /* 显示8*8 ASCLL 字符  */
 0054 01EF              ldi R16,241
 0056 DFDF              xcall _lcdWrite
 0058           ;           lcdWrite(ucX);                                /* X坐标               */
 0058 062F              mov R16,R22
 005A DDDF              xcall _lcdWrite
 005C           ;           lcdWrite(ucY);                                /* Y坐标               */
 005C 0A2D              mov R16,R10
 005E DBDF              xcall _lcdWrite
 0060           ;           lcdWrite(*ucpData);                           
 0060 FA01              movw R30,R20
 0062 0081              ldd R16,z+0
 0064 D8DF              xcall _lcdWrite
 0066           ;               ucpData++;
 0066 4F5F              subi R20,255  ; offset = 1
 0068 5F4F              sbci R21,255
 006A           ;               
 006A           ;               if (ucX >= 19)                                /* 换行                */
 006A 6331              cpi R22,19
 006C 28F0              brlo L19
 006E           X3:
 006E           ; 		{
 006E           ; 		    ucX = 0x04;
 006E 64E0              ldi R22,4
 0070           ;                       ucY += 8;
 0070 8A2D              mov R24,R10
 0072 885F              subi R24,248    ; addi 8
 0074 A82E              mov R10,R24
 0076           ;               }
 0076 01C0              xjmp L20
 0078           L19:
 0078           ; 		else
 0078           ; 	    {
 0078           ; 		    ucX++;
 0078 6395              inc R22
 007A           ;               }
 007A           L20:
 007A           ; 	}
 007A           L17:
 007A FA01              movw R30,R20
 007C 2080              ldd R2,z+0
 007E 2220              tst R2
 0080 49F7              brne L16
 0082           X4:
 0082           L15:
 0082                   .dbline 0 ; func end
 0082 0C940000          xjmp pop_xgsetF00C
 0086           ;        ucpData -> R20,R21
 0086           ;            ucY -> R10
 0086           ;            ucX -> R22
                        .even
 0086           _chineseDisplay::
 0086 0E940000          xcall push_xgsetF00C
 008A A22E              mov R10,R18
 008C 602F              mov R22,R16
 008E 4E81              ldd R20,y+6
 0090 5F81              ldd R21,y+7
 0092           ; }
 0092           ; 
 0092           ; void chineseDisplay(unsigned char ucX,unsigned char ucY,unsigned char *ucpData)
 0092           ; {
 0092 18C0              xjmp L23
 0094           L22:
 0094           ;      
 0094           ; 	while (*ucpData)
 0094           ; 	{
 0094           ; 	   lcdWrite(0xf0);                               /* 显示国标汉字         */
 0094 00EF              ldi R16,240
 0096 BFDF              xcall _lcdWrite
 0098           ;          lcdWrite(ucX);
 0098 062F              mov R16,R22
 009A BDDF              xcall _lcdWrite
 009C           ;          lcdWrite(ucY);
 009C 0A2D              mov R16,R10
 009E BBDF              xcall _lcdWrite
 00A0           ;          lcdWrite(*ucpData - 0xa0); 
 00A0 FA01              movw R30,R20
 00A2 0081              ldd R16,z+0
 00A4 005A              subi R16,160
 00A6 B7DF              xcall _lcdWrite
 00A8           ;          ucpData++;
 00A8 4F5F              subi R20,255  ; offset = 1
 00AA 5F4F              sbci R21,255
 00AC           ;          lcdWrite(*ucpData - 0xa0); 
 00AC FA01              movw R30,R20
 00AE 0081              ldd R16,z+0
 00B0 005A              subi R16,160
 00B2 B1DF              xcall _lcdWrite
 00B4           ;          ucpData++;
 00B4 4F5F              subi R20,255  ; offset = 1
 00B6 5F4F              sbci R21,255
 00B8           ;          if (ucX >= 9)
 00B8 6930              cpi R22,9
 00BA 18F0              brlo L25
 00BC           X5:
 00BC           ; 	   {
 00BC           ; 	       ucX = 2;
 00BC 62E0              ldi R22,2
 00BE           ;                  ucY ++;
 00BE A394              inc R10
 00C0           ;          }else
 00C0 01C0              xjmp L26
 00C2           L25:
 00C2           ; 	   {
 00C2           ; 	       ucX++;
 00C2 6395              inc R22
 00C4           ;          }
 00C4           L26:
 00C4           ;     }
 00C4           L23:
 00C4 FA01              movw R30,R20
 00C6 2080              ldd R2,z+0
 00C8 2220              tst R2
 00CA 21F7              brne L22
 00CC           X6:
 00CC           L21:
 00CC                   .dbline 0 ; func end
 00CC 0C940000          xjmp pop_xgsetF00C
 00D0           ; }
 00D0           ;       
 00D0           ;       

⌨️ 快捷键说明

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