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

📄 lcd.lst

📁 一个关于AVR单片机的例程
💻 LST
📖 第 1 页 / 共 2 页
字号:
_LcdClear:
  i                    --> R20
    014E 940E01B4  CALL	push_gset1
(0164)    
(0165) }
(0166) 
(0167) /*--------------------------------------------------------------------------------------------------
(0168)   Name         :  LcdClear
(0169)   Description  :  Clears the display.
(0170)   Argument(s)  :  None.
(0171)   Return value :  None.
(0172) --------------------------------------------------------------------------------------------------*/
(0173) void LcdClear(void)
(0174) {
(0175) unsigned int i;
(0176) 
(0177) LcdSend(0x0c, 0); 
    0150 2722      CLR	R18
    0151 E00C      LDI	R16,0xC
    0152 D021      RCALL	_LcdSend
(0178) LcdSend(0x80, 0); //此时默认操作为清屏
    0153 2722      CLR	R18
    0154 E800      LDI	R16,0x80
    0155 D01E      RCALL	_LcdSend
(0179) 
(0180) for (i=0; i<504; i++)
    0156 2744      CLR	R20
    0157 2755      CLR	R21
    0158 C005      RJMP	0x015E
(0181) LcdSend(0, 1); 
    0159 E021      LDI	R18,1
    015A 2700      CLR	R16
    015B D018      RCALL	_LcdSend
    015C 5F4F      SUBI	R20,0xFF
    015D 4F5F      SBCI	R21,0xFF
    015E 3F48      CPI	R20,0xF8
    015F E0E1      LDI	R30,1
    0160 075E      CPC	R21,R30
    0161 F3B8      BCS	0x0159
    0162 940E01B7  CALL	pop_gset1
    0164 9508      RET
_LcdGotoXY:
  Y                    --> R22
  X                    --> R20
    0165 940E01B2  CALL	push_gset2
    0167 2F62      MOV	R22,R18
    0168 2F40      MOV	R20,R16
(0182) }
(0183) 
(0184) /*--------------------------------------------------------------------------------------------------
(0185)   Name         :  LcdGotoXY 设置块坐标
(0186)   Description  :  Sets cursor location to xy location corresponding to basic font size.
(0187)   Argument(s)  :  x, y -> Coordinate for new cursor position. Range: 1,1 .. 14,6
(0188)   Return value :  None.
(0189) --------------------------------------------------------------------------------------------------*/
(0190) void LcdGotoXY(unsigned char X, unsigned char Y)
(0191) {
(0192) LcdSend(0x40 | Y, 0); // column
    0169 2722      CLR	R18
    016A 2F06      MOV	R16,R22
    016B 6400      ORI	R16,0x40
    016C D007      RCALL	_LcdSend
(0193) LcdSend(0x80 | X, 0); // row
    016D 2722      CLR	R18
    016E 2F04      MOV	R16,R20
    016F 6800      ORI	R16,0x80
    0170 D003      RCALL	_LcdSend
    0171 940E01A9  CALL	pop_gset2
    0173 9508      RET
(0194) }
(0195) 
(0196) /*--------------------------------------------------------------------------------------------------
(0197)   Name         :  LcdSend
(0198)   Description  :  Sends data to display controller.
(0199)   Argument(s)  :  data -> Data to be sent
(0200)                   cd   -> Command or data (see/use enum)
(0201)   Return value :  None.
(0202) --------------------------------------------------------------------------------------------------*/
(0203) static void LcdSend (unsigned char data, unsigned char command)
(0204) {
(0205) PORTB &= ~LCD_CE_PIN ; // 使能LCD
_LcdSend:
  command              --> R18
  data                 --> R16
    0174 98C1      CBI	0x18,1
(0206) if (command == 0)
    0175 2322      TST	R18
    0176 F411      BNE	0x0179
(0207) PORTB &= ~LCD_DC_PIN ; // 传送命令
    0177 98C2      CBI	0x18,2
    0178 C001      RJMP	0x017A
(0208) else
(0209) PORTB |= LCD_DC_PIN ; // 传送数据
    0179 9AC2      SBI	0x18,2
(0210) 
(0211) SPDR = data; // 传送数据到SPI寄存器
    017A B90F      OUT	0x0F,R16
(0212) 
(0213) while ((SPSR & 0x80) == 0); // 等待数据传送完毕
    017B 9B77      SBIS	0x0E,7
    017C CFFE      RJMP	0x017B
(0214) 
(0215) PORTB |= LCD_CE_PIN ; // 关闭LCD
    017D 9AC1      SBI	0x18,1
    017E 9508      RET
(0216) }
(0217) 
(0218) /*--------------------------------------------------------------------------------------------------
(0219)   Name         :  Delay
(0220)   Description  :  Uncalibrated delay for LCD init routine.
(0221)   Argument(s)  :  None.
(0222)   Return value :  None.
(0223) --------------------------------------------------------------------------------------------------*/
(0224) static void Delay ( void )
(0225) {
(0226)     int i;
(0227)     for ( i = -12000; i < 12000; i++ );
_Delay:
  i                    --> R16
    017F E200      LDI	R16,0x20
    0180 ED11      LDI	R17,0xD1
    0181 5F0F      SUBI	R16,0xFF
    0182 4F1F      SBCI	R17,0xFF
    0183 3E00      CPI	R16,0xE0
    0184 E2EE      LDI	R30,0x2E
    0185 071E      CPC	R17,R30
    0186 F3D4      BLT	0x0181
    0187 9508      RET
(0228) }
(0229) 
(0230) /*--------------------------------------------------------------------------------------------------
(0231)   Name         :  main
(0232)   Description  :  
(0233)   Argument(s)  :  
(0234)   Return value :  None.
(0235) --------------------------------------------------------------------------------------------------*/
(0236) 
(0237) void main(void)
(0238) {
(0239)   unsigned char X=0,i=0;  //v=0,按行显示,x对应某个bank(0~83)
_main:
  i                    --> R20
  X                    --> R22
    0188 2766      CLR	R22
    0189 2744      CLR	R20
(0240)   LcdInit();
    018A DFA4      RCALL	_LcdInit
    018B C01B      RJMP	0x01A7
(0241)   
(0242)   while(1)
(0243)   {
(0244)     LcdGotoXY(X_Init,Y_Init);
    018C 2722      CLR	R18
    018D 2700      CLR	R16
    018E DFD6      RCALL	_LcdGotoXY
(0245)    // for(X=0;X<X_Length;X++)LcdSend(X_TAB[X],1);
(0246)    for(i=0;i<100;i++)
    018F 2744      CLR	R20
    0190 C014      RJMP	0x01A5
(0247)    {
(0248)     for(X=0;X<5;X++)
    0191 2766      CLR	R22
    0192 C00F      RJMP	0x01A2
(0249)     {
(0250)      LcdSend(FontLookup[i][X],1);
FILE: <library>
    0193 E021      LDI	R18,1
    0194 E085      LDI	R24,5
    0195 9F84      MUL	R24,R20
    0196 0110      MOVW	R2,R0
    0197 E584      LDI	R24,0x54
    0198 E090      LDI	R25,0
    0199 0E28      ADD	R2,R24
    019A 1E39      ADC	R3,R25
    019B 2FE6      MOV	R30,R22
    019C 27FF      CLR	R31
    019D 0DE2      ADD	R30,R2
    019E 1DF3      ADC	R31,R3
    019F 9104      LPM	R16,0(Z)
    01A0 DFD3      RCALL	_LcdSend
    01A1 9563      INC	R22
    01A2 3065      CPI	R22,5
    01A3 F378      BCS	0x0193
    01A4 9543      INC	R20
    01A5 3644      CPI	R20,0x64
    01A6 F350      BCS	0x0191
    01A7 CFE4      RJMP	0x018C
    01A8 9508      RET
pop_gset2:
    01A9 E0E2      LDI	R30,2
    01AA 940C01B8  JMP	pop
push_gset5:
    01AC 92FA      ST	R15,-Y
    01AD 92EA      ST	R14,-Y
push_gset4:
    01AE 92DA      ST	R13,-Y
    01AF 92CA      ST	R12,-Y
push_gset3:
    01B0 92BA      ST	R11,-Y
    01B1 92AA      ST	R10,-Y
push_gset2:
    01B2 937A      ST	R23,-Y
    01B3 936A      ST	R22,-Y
push_gset1:
    01B4 935A      ST	R21,-Y
    01B5 934A      ST	R20,-Y
    01B6 9508      RET
pop_gset1:
    01B7 E0E1      LDI	R30,1
pop:
    01B8 9149      LD	R20,Y+
    01B9 9159      LD	R21,Y+
    01BA FDE0      SBRC	R30,0
    01BB 9508      RET
    01BC 9169      LD	R22,Y+
    01BD 9179      LD	R23,Y+
    01BE FDE1      SBRC	R30,1
    01BF 9508      RET
    01C0 90A9      LD	R10,Y+
    01C1 90B9      LD	R11,Y+
    01C2 FDE2      SBRC	R30,2
    01C3 9508      RET
    01C4 90C9      LD	R12,Y+
    01C5 90D9      LD	R13,Y+
    01C6 FDE3      SBRC	R30,3
    01C7 9508      RET
    01C8 90E9      LD	R14,Y+
    01C9 90F9      LD	R15,Y+
    01CA 9508      RET

⌨️ 快捷键说明

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