📄 lcd.lst
字号:
(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 + -