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

📄 lcd.lst

📁 本程序是基于avr单片机的atmega48的控制16*4点阵型液晶。其中main文件调用LCD.c和LCD.h文件。用户可以直接把工程中的LCD.c和LCD.h文件放到自己的程序目录下即可。
💻 LST
📖 第 1 页 / 共 2 页
字号:
(0153)   }
(0154) 
(0155) void delay_nus(unsigned int n)       //N us延时函数
(0156)   {
(0157)    unsigned int i=0;
    0118 2744      CLR	R20
    0119 2755      CLR	R21
(0158)    for (i=0;i<n;i++)
    011A C003      RJMP	0x011E
(0159)    delay_1us();
    011B DFF8      RCALL	_delay_1us
    011C 5F4F      SUBI	R20,0xFF
    011D 4F5F      SBCI	R21,0xFF
    011E 1746      CP	R20,R22
    011F 0757      CPC	R21,R23
    0120 F3D0      BCS	0x011B
    0121 D0F3      RCALL	pop_gset2
    0122 9508      RET
(0160)   }
(0161)   
(0162) void delay_1ms(void)                 //1ms延时函数
(0163)   {
(0164)    unsigned int i;
(0165)    for (i=0;i<114;i++);
_delay_1ms:
  i                    --> R16
    0123 2700      CLR	R16
    0124 2711      CLR	R17
    0125 C002      RJMP	0x0128
    0126 5F0F      SUBI	R16,0xFF
    0127 4F1F      SBCI	R17,0xFF
    0128 3702      CPI	R16,0x72
    0129 E0E0      LDI	R30,0
    012A 071E      CPC	R17,R30
    012B F3D0      BCS	0x0126
    012C 9508      RET
_delay_nms:
  i                    --> R20
  n                    --> R22
    012D D0F1      RCALL	push_gset2
    012E 01B8      MOVW	R22,R16
(0166)   }
(0167)   
(0168) void delay_nms(unsigned int n)       //N ms延时函数
(0169)   {
(0170)    unsigned int i=0;
    012F 2744      CLR	R20
    0130 2755      CLR	R21
(0171)    for (i=0;i<n;i++)
    0131 C003      RJMP	0x0135
(0172)    delay_1ms();
    0132 DFF0      RCALL	_delay_1ms
    0133 5F4F      SUBI	R20,0xFF
    0134 4F5F      SBCI	R21,0xFF
    0135 1746      CP	R20,R22
    0136 0757      CPC	R21,R23
    0137 F3D0      BCS	0x0132
    0138 D0DC      RCALL	pop_gset2
    0139 9508      RET
_delay:
  i                    --> Y+0
    013A D0E4      RCALL	push_gset2
    013B 9724      SBIW	R28,4
FILE: F:\avrprojs\lcd_block\uart.h
(0001) #include <iom48v.h>
(0002) 
(0003) void delay(void);
(0004) void uart0_init(void);
(0005) 
(0006) void uart_send(unsigned char c);
(0007) unsigned char uart_rec(void);
(0008) 
(0009) void delay(void)
(0010) {
(0011)   unsigned long i;
(0012)   for(i=0;i<11142;i++);
    013C E040      LDI	R20,0
    013D E050      LDI	R21,0
    013E E060      LDI	R22,0
    013F E070      LDI	R23,0
    0140 01FE      MOVW	R30,R28
    0141 8340      STD	Z+0,R20
    0142 8351      STD	Z+1,R21
    0143 8362      STD	Z+2,R22
    0144 8373      STD	Z+3,R23
    0145 C012      RJMP	0x0158
    0146 E041      LDI	R20,1
    0147 E050      LDI	R21,0
    0148 E060      LDI	R22,0
    0149 E070      LDI	R23,0
    014A 01FE      MOVW	R30,R28
    014B 8020      LDD	R2,Z+0
    014C 8031      LDD	R3,Z+1
    014D 8042      LDD	R4,Z+2
    014E 8053      LDD	R5,Z+3
    014F 0E24      ADD	R2,R20
    0150 1E35      ADC	R3,R21
    0151 1E46      ADC	R4,R22
    0152 1E57      ADC	R5,R23
    0153 01FE      MOVW	R30,R28
    0154 8220      STD	Z+0,R2
    0155 8231      STD	Z+1,R3
    0156 8242      STD	Z+2,R4
    0157 8253      STD	Z+3,R5
    0158 E846      LDI	R20,0x86
    0159 E25B      LDI	R21,0x2B
    015A E060      LDI	R22,0
    015B E070      LDI	R23,0
    015C 01FE      MOVW	R30,R28
    015D 8020      LDD	R2,Z+0
    015E 8031      LDD	R3,Z+1
    015F 8042      LDD	R4,Z+2
    0160 8053      LDD	R5,Z+3
    0161 1624      CP	R2,R20
    0162 0635      CPC	R3,R21
    0163 0646      CPC	R4,R22
    0164 0657      CPC	R5,R23
    0165 F300      BCS	0x0146
    0166 9624      ADIW	R28,4
    0167 D0AD      RCALL	pop_gset2
    0168 9508      RET
(0013) }
(0014) 
(0015) //UART0 initialize
(0016) // desired baud rate: 9600
(0017) // actual: baud rate:8929 (7.5%)
(0018) void uart0_init(void)
(0019) {
(0020)  UCSR0B = 0x00; //disable while setting baud rate
_uart0_init:
    0169 2422      CLR	R2
    016A 922000C1  STS	0xC1,R2
(0021)  UCSR0A = 0x00;
    016C 922000C0  STS	0xC0,R2
(0022)  UCSR0C = 0x06;
    016E E086      LDI	R24,6
    016F 938000C2  STS	0xC2,R24
(0023)  UBRR0L = 51; //set baud rate lo
    0171 E383      LDI	R24,0x33
    0172 938000C4  STS	0xC4,R24
(0024)  UBRR0H = 0x00; //set baud rate hi
    0174 922000C5  STS	0xC5,R2
(0025)  UCSR0B = 0x98;
    0176 E988      LDI	R24,0x98
    0177 938000C1  STS	0xC1,R24
    0179 9508      RET
(0026) }
(0027) 
(0028) void uart_send(unsigned char c)
(0029) {
(0030)   // while(!(UCSR0A&0x40));
(0031)       UDR0=c;
_uart_send:
  c                    --> R16
    017A 930000C6  STS	0xC6,R16
(0032) 	  while(!(UCSR0A&0x40));
    017C 902000C0  LDS	R2,0xC0
    017E FE26      SBRS	R2,6
    017F CFFC      RJMP	0x017C
    0180 9508      RET
(0033) }
(0034) 
(0035) unsigned char uart_rec(void)
(0036) {
(0037)    while(!(UCSR0A&(1<<RXC0)));
_uart_rec:
    0181 902000C0  LDS	R2,0xC0
    0183 FE27      SBRS	R2,7
    0184 CFFC      RJMP	_uart_rec
(0038)    return UDR0;
    0185 910000C6  LDS	R16,0xC6
    0187 9508      RET
_main:
  c                    --> Y+3
  c_temp               --> R20
    0188 9722      SBIW	R28,2
FILE: F:\avrprojs\lcd_block\main.c
(0001) #include "lcd.h"
(0002) #include "uart.h"
(0003) void uart0_rx_isr();
(0004) int i,j;
(0005) /*
(0006) #pragma interrupt_handler uart0_rx_isr:19
(0007) void uart0_rx_isr(void)
(0008) {
(0009)  
(0010)  unsigned char c;
(0011)  c=UDR0;
(0012)  LCD_display_char(0,0,c);
(0013)  if(i>=15)
(0014)  {
(0015)   i=0;
(0016)   j=j+1;
(0017)   if(j>=4)
(0018)    {
(0019)    j=0;
(0020)    LCD_write_char(0x01,0);
(0021)    } 
(0022)  }
(0023) 
(0024)  //uart has received a character in UDR
(0025) }
(0026) */
(0027) void main(void)
(0028) {
(0029)    unsigned char c,c_temp;
(0030)       init_devices();
    0189 DF88      RCALL	_init_devices
(0031)       LCD_init();
    018A DECC      RCALL	_LCD_init
(0032) 	  uart0_init();
    018B DFDD      RCALL	_uart0_init
(0033) 	  j=3;
    018C E083      LDI	R24,3
    018D E090      LDI	R25,0
    018E 9390013B  STS	j+1,R25
    0190 9380013A  STS	j,R24
(0034) 	  i=12;
    0192 E08C      LDI	R24,0xC
    0193 9390013D  STS	i+1,R25
    0195 9380013C  STS	i,R24
(0035) 	  	 LCD_write_char(0x01,0);
    0197 2722      CLR	R18
    0198 2733      CLR	R19
    0199 E001      LDI	R16,1
    019A E010      LDI	R17,0
    019B DF4E      RCALL	_LCD_write_char
(0036) 		// LCD_display_char(5,2,'8');
(0037) 	
(0038)          LCD_write_string(4,0,"Wellcome");
    019C E381      LDI	R24,0x31
    019D E091      LDI	R25,1
    019E 8399      STD	Y+1,R25
    019F 8388      STD	Y+0,R24
    01A0 2722      CLR	R18
    01A1 2733      CLR	R19
    01A2 E004      LDI	R16,4
    01A3 E010      LDI	R17,0
    01A4 DEF5      RCALL	_LCD_write_string
(0039)          LCD_write_string(0,1,"www.OURAVR.com!");
    01A5 E281      LDI	R24,0x21
    01A6 E091      LDI	R25,1
    01A7 8399      STD	Y+1,R25
    01A8 8388      STD	Y+0,R24
    01A9 E021      LDI	R18,1
    01AA E030      LDI	R19,0
    01AB 2700      CLR	R16
    01AC 2711      CLR	R17
    01AD DEEC      RCALL	_LCD_write_string
(0040)          LCD_write_string(0,2,"happy new year!");
    01AE E181      LDI	R24,0x11
    01AF E091      LDI	R25,1
    01B0 8399      STD	Y+1,R25
    01B1 8388      STD	Y+0,R24
    01B2 E022      LDI	R18,2
    01B3 E030      LDI	R19,0
    01B4 2700      CLR	R16
    01B5 2711      CLR	R17
    01B6 DEE3      RCALL	_LCD_write_string
(0041)          LCD_write_string(0,3,"amork:everfriend");
    01B7 E080      LDI	R24,0
    01B8 E091      LDI	R25,1
    01B9 8399      STD	Y+1,R25
    01BA 8388      STD	Y+0,R24
    01BB E023      LDI	R18,3
    01BC E030      LDI	R19,0
    01BD 2700      CLR	R16
    01BE 2711      CLR	R17
    01BF DEDA      RCALL	_LCD_write_string
(0042) 		 delay_nms(5000);
    01C0 E808      LDI	R16,0x88
    01C1 E113      LDI	R17,0x13
    01C2 DF6A      RCALL	_delay_nms
(0043) 		  LCD_write_char(0x01,0);
    01C3 2722      CLR	R18
    01C4 2733      CLR	R19
    01C5 E001      LDI	R16,1
    01C6 E010      LDI	R17,0
    01C7 DF22      RCALL	_LCD_write_char
    01C8 C049      RJMP	0x0212
(0044)      while(1)    //for循环
(0045)      {
(0046) 	     LCD_write_string(4,0,"Wellcome");
    01C9 E381      LDI	R24,0x31
    01CA E091      LDI	R25,1
    01CB 8399      STD	Y+1,R25
    01CC 8388      STD	Y+0,R24
    01CD 2722      CLR	R18
    01CE 2733      CLR	R19
    01CF E004      LDI	R16,4
    01D0 E010      LDI	R17,0
    01D1 DEC8      RCALL	_LCD_write_string
(0047)          //LCD_write_string(0,1,"www.OURAVR.com!");
(0048)          LCD_write_string(0,1,"happy new year!");
    01D2 E181      LDI	R24,0x11
    01D3 E091      LDI	R25,1
    01D4 8399      STD	Y+1,R25
    01D5 8388      STD	Y+0,R24
    01D6 E021      LDI	R18,1
    01D7 E030      LDI	R19,0
    01D8 2700      CLR	R16
    01D9 2711      CLR	R17
    01DA DEBF      RCALL	_LCD_write_string
(0049) 	   
(0050) 	   c_temp=uart_rec();
    01DB DFA5      RCALL	_uart_rec
    01DC 2F40      MOV	R20,R16
(0051)        LCD_display_char(i,j,c_temp);
    01DD 8348      STD	Y+0,R20
    01DE 9120013A  LDS	R18,j
    01E0 9130013B  LDS	R19,j+1
    01E2 9100013C  LDS	R16,i
    01E4 9110013D  LDS	R17,i+1
    01E6 DEF6      RCALL	_LCD_display_char
(0052) 	     i=i+1;
    01E7 9180013C  LDS	R24,i
    01E9 9190013D  LDS	R25,i+1
    01EB 9601      ADIW	R24,1
    01EC 9390013D  STS	i+1,R25
    01EE 9380013C  STS	i,R24
(0053)        if(i>=16)
    01F0 3180      CPI	R24,0x10
    01F1 E0E0      LDI	R30,0
    01F2 079E      CPC	R25,R30
    01F3 F0F4      BLT	0x0212
(0054)          {
(0055)              i=0;
    01F4 2422      CLR	R2
    01F5 2433      CLR	R3
    01F6 9230013D  STS	i+1,R3
    01F8 9220013C  STS	i,R2
(0056)              j=j+1;
    01FA 9180013A  LDS	R24,j
    01FC 9190013B  LDS	R25,j+1
    01FE 9601      ADIW	R24,1
    01FF 9390013B  STS	j+1,R25
    0201 9380013A  STS	j,R24
(0057)               if(j>=4)
    0203 3084      CPI	R24,4
    0204 E0E0      LDI	R30,0
    0205 079E      CPC	R25,R30
    0206 F05C      BLT	0x0212
(0058)               {
(0059)                 j=2;
    0207 E082      LDI	R24,2
    0208 E090      LDI	R25,0
    0209 9390013B  STS	j+1,R25
    020B 9380013A  STS	j,R24
(0060)                 LCD_write_char(0x01,0);
FILE: <library>
    020D 2722      CLR	R18
    020E 2733      CLR	R19
    020F E001      LDI	R16,1
    0210 E010      LDI	R17,0
    0211 DED8      RCALL	_LCD_write_char
    0212 CFB6      RJMP	0x01C9
    0213 9622      ADIW	R28,2
    0214 9508      RET
pop_gset2:
    0215 E0E2      LDI	R30,2
    0216 C00E      RJMP	pop
pop_gset3:
    0217 E0E4      LDI	R30,4
    0218 C00C      RJMP	pop
push_gset5:
    0219 92FA      ST	R15,-Y
    021A 92EA      ST	R14,-Y
push_gset4:
    021B 92DA      ST	R13,-Y
    021C 92CA      ST	R12,-Y
push_gset3:
    021D 92BA      ST	R11,-Y
    021E 92AA      ST	R10,-Y
push_gset2:
    021F 937A      ST	R23,-Y
    0220 936A      ST	R22,-Y
push_gset1:
    0221 935A      ST	R21,-Y
    0222 934A      ST	R20,-Y
    0223 9508      RET
pop_gset1:
    0224 E0E1      LDI	R30,1
pop:
    0225 9149      LD	R20,Y+
    0226 9159      LD	R21,Y+
    0227 FDE0      SBRC	R30,0
    0228 9508      RET
    0229 9169      LD	R22,Y+
    022A 9179      LD	R23,Y+
    022B FDE1      SBRC	R30,1
    022C 9508      RET
    022D 90A9      LD	R10,Y+
    022E 90B9      LD	R11,Y+
    022F FDE2      SBRC	R30,2
    0230 9508      RET
    0231 90C9      LD	R12,Y+
    0232 90D9      LD	R13,Y+
    0233 FDE3      SBRC	R30,3
    0234 9508      RET
    0235 90E9      LD	R14,Y+
    0236 90F9      LD	R15,Y+
    0237 9508      RET

⌨️ 快捷键说明

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