📄 test.lst
字号:
00F4 B22B IN R2,0x1B
00F5 2A28 OR R2,R24
00F6 BA2B OUT 0x1B,R2
(0092) LCD16xx_en_write();
00F7 DFDD RCALL _LCD16xx_en_write
(0093)
(0094) LCD_DATA_PORT &= 0x0F;
00F8 B38B IN R24,0x1B
00F9 708F ANDI R24,0xF
00FA BB8B OUT 0x1B,R24
(0095) LCD_DATA_PORT |= datal&0xf0; //send low 4bit
00FB 2F84 MOV R24,R20
00FC 7F80 ANDI R24,0xF0
00FD B22B IN R2,0x1B
00FE 2A28 OR R2,R24
00FF BA2B OUT 0x1B,R2
(0096) LCD16xx_en_write();
0100 DFD4 RCALL _LCD16xx_en_write
0101 940E0174 CALL pop_gset3
0103 9508 RET
(0097) }
(0098)
(0099) void LCD16xx_wait_Ready(void) //等待LCD空闲
(0100) {
(0101) LCD_DATA_DDR &= ~0x80; //PD7 I/O口方向设置为输入
_LCD16xx_wait_Ready:
0104 98D7 CBI 0x1A,7
(0102) RW_H; //RW=1
0105 9AD9 SBI 0x1B,1
(0103) RS_L; //RS=0
0106 98D8 CBI 0x1B,0
(0104) E_H; //EN=1
0107 9ADA SBI 0x1B,2
(0105) while (!( LCD_DATA_PIN&0x80 ) == 0); //RW=1,读PD7,为0表示空闲;
0108 99CF SBIC 0x19,7
0109 C003 RJMP 0x010D
010A E001 LDI R16,1
010B E010 LDI R17,0
010C C002 RJMP 0x010F
010D 2700 CLR R16
010E 2711 CLR R17
010F 3000 CPI R16,0
0110 0701 CPC R16,R17
0111 F3B1 BEQ 0x0108
(0106) E_L; //EN=0
0112 98DA CBI 0x1B,2
(0107) LCD_DATA_DDR |= LCD_DATA;
0113 B38A IN R24,0x1A
0114 6F80 ORI R24,0xF0
0115 BB8A OUT 0x1A,R24
0116 9508 RET
_LCD16xx_set_xy:
address --> R20
y --> R10
x --> R22
0117 940E017B CALL push_gset3
0119 2EA2 MOV R10,R18
011A 2F60 MOV R22,R16
(0108) }
(0109)
(0110) /*-----------------------------------------------------------------------
(0111) LCD_set_xy : 设置LCD显示的起始位置
(0112)
(0113) 输入参数:x、y : 显示字符串的位置,X:0-15,Y:0-1
(0114) LCD第一行显示寄存器地址:0x80-0x8F
(0115) LCD第一行显示寄存器地址:0xC0-0xCF
(0116) 编写日期 :2006年08月30日
(0117) 最后修改日期 :2006年08月30日
(0118) -----------------------------------------------------------------------*/
(0119) void LCD16xx_set_xy( unsigned char x, unsigned char y )
(0120) {
(0121) unsigned char address;
(0122) if (y == 0)
011B 20AA TST R10
011C F419 BNE 0x0120
(0123) address = 0x80 + x;
011D 2F46 MOV R20,R22
011E 5840 SUBI R20,0x80
011F C00E RJMP 0x012E
(0124) else if(y == 1)
0120 2D8A MOV R24,R10
0121 3081 CPI R24,1
0122 F419 BNE 0x0126
(0125) address = 0xc0 + x;
0123 2F46 MOV R20,R22
0124 5440 SUBI R20,0x40
0125 C008 RJMP 0x012E
(0126) else if(y == 2)
0126 2D8A MOV R24,R10
0127 3082 CPI R24,2
0128 F419 BNE 0x012C
(0127) address = 0x90 + x;
0129 2F46 MOV R20,R22
012A 5740 SUBI R20,0x70
012B C002 RJMP 0x012E
(0128) else
(0129) address = 0xd0 + x;
012C 2F46 MOV R20,R22
012D 5340 SUBI R20,0x30
(0130) LCD16xx_write_char( 1,address );
012E 2F24 MOV R18,R20
012F E001 LDI R16,1
0130 DFAF RCALL _LCD16xx_write_char
0131 940E0174 CALL pop_gset3
0133 9508 RET
_LCD16xx_write_string:
s --> R20
Y --> R10
X --> R22
0134 940E017B CALL push_gset3
0136 2EA2 MOV R10,R18
0137 2F60 MOV R22,R16
0138 814E LDD R20,Y+6
0139 815F LDD R21,Y+7
(0131) }
(0132) /*-----------------------------------------------------------------------
(0133) LCD16xx_write_string : 英文字符串显示函数
(0134)
(0135) 输入参数:*s :英文字符串指针;
(0136) X、Y : 显示字符串的位置
(0137) 编写日期 :2006年08月30日
(0138) 最后修改日期 :2006年08月30日
(0139) -----------------------------------------------------------------------*/
(0140) void LCD16xx_write_string(unsigned char X,unsigned char Y,unsigned char *s)
(0141) {
(0142) LCD16xx_set_xy( X, Y );
013A 2D2A MOV R18,R10
013B 2F06 MOV R16,R22
013C DFDA RCALL _LCD16xx_set_xy
013D C00A RJMP 0x0148
(0143) while (*s)
(0144) {
(0145) delay_nus(5);
013E E005 LDI R16,5
013F E010 LDI R17,0
0140 940E0152 CALL _delay_nus
(0146) LCD16xx_write_char( 0, *s );
0142 01FA MOVW R30,R20
0143 8120 LDD R18,Z+0
0144 2700 CLR R16
0145 DF9A RCALL _LCD16xx_write_char
(0147) s++;
0146 5F4F SUBI R20,0xFF
0147 4F5F SBCI R21,0xFF
0148 01FA MOVW R30,R20
0149 8020 LDD R2,Z+0
014A 2022 TST R2
014B F791 BNE 0x013E
014C 940E0174 CALL pop_gset3
014E 9508 RET
FILE: E:\2007年电子竞赛\LCD1602\delay.c
(0001) /*--------------------------------------------------*/
(0002) /* AVR-ARM开发网论坛 */
(0003) /* http://www.avrarm.com */
(0004) /* AVR生成代码测试程序 */
(0005) /*--------------------------------------------------*/
(0006) /* 程序由AVR辅助开发工具V2.1.1自动生成 */
(0007) /* AVR系统的处理器为: ATMega128 */
(0008) /* AVR系统的晶振频率: 1.0000 Mhz */
(0009) /*--------------------------------------------------*/
(0010)
(0011) #include <iom128v.h>
(0012) #include "delay.h"
(0013)
(0014) /*-----------------------------------------------------------------------
(0015) delay_us :1us延时函数
(0016) -----------------------------------------------------------------------*/
(0017) void delay_us(void)
(0018) {
(0019) unsigned char t=2;
_delay_us:
t --> R16
014F E002 LDI R16,2
(0020) t--;
0150 950A DEC R16
0151 9508 RET
_delay_nus:
t --> R20
0152 940E017F CALL push_gset1
0154 01A8 MOVW R20,R16
(0021) }
(0022)
(0023) /*-----------------------------------------------------------------------
(0024) delay_nus :长延时函数
(0025)
(0026) 输入参数: t :延时时间 us
(0027) -----------------------------------------------------------------------*/
(0028) void delay_nus(unsigned int t)
(0029) {
0155 C001 RJMP 0x0157
(0030) while (t--)
(0031) delay_us();
0156 DFF8 RCALL _delay_us
0157 011A MOVW R2,R20
0158 5041 SUBI R20,1
0159 4050 SBCI R21,0
015A 2022 TST R2
015B F7D1 BNE 0x0156
015C 2033 TST R3
015D F7C1 BNE 0x0156
015E 940E0182 CALL pop_gset1
0160 9508 RET
(0032) }
(0033)
(0034) /*-----------------------------------------------------------------------
(0035) delay_ms :1ms延时函数
(0036) -----------------------------------------------------------------------*/
(0037) void delay_ms(void)
(0038) {
(0039) delay_nus(1000);
_delay_ms:
0161 EE08 LDI R16,0xE8
0162 E013 LDI R17,3
0163 DFEE RCALL _delay_nus
0164 9508 RET
_delay_nms:
t --> R20
0165 940E017F CALL push_gset1
0167 01A8 MOVW R20,R16
(0040) }
(0041)
(0042) /*-----------------------------------------------------------------------
(0043) delay_nms :长延时函数
(0044)
(0045) 输入参数: t :延时时间 ms
(0046) -----------------------------------------------------------------------*/
(0047) void delay_nms(unsigned int t)
(0048) {
0168 C001 RJMP 0x016A
(0049) while (t--)
(0050) delay_ms();
FILE: <library>
0169 DFF7 RCALL _delay_ms
016A 011A MOVW R2,R20
016B 5041 SUBI R20,1
016C 4050 SBCI R21,0
016D 2022 TST R2
016E F7D1 BNE 0x0169
016F 2033 TST R3
0170 F7C1 BNE 0x0169
0171 940E0182 CALL pop_gset1
0173 9508 RET
pop_gset3:
0174 E0E4 LDI R30,4
0175 940C0183 JMP pop
push_gset5:
0177 92FA ST R15,-Y
0178 92EA ST R14,-Y
push_gset4:
0179 92DA ST R13,-Y
017A 92CA ST R12,-Y
push_gset3:
017B 92BA ST R11,-Y
017C 92AA ST R10,-Y
push_gset2:
017D 937A ST R23,-Y
017E 936A ST R22,-Y
push_gset1:
017F 935A ST R21,-Y
0180 934A ST R20,-Y
0181 9508 RET
pop_gset1:
0182 E0E1 LDI R30,1
pop:
0183 9149 LD R20,Y+
0184 9159 LD R21,Y+
0185 FDE0 SBRC R30,0
0186 9508 RET
0187 9169 LD R22,Y+
0188 9179 LD R23,Y+
0189 FDE1 SBRC R30,1
018A 9508 RET
018B 90A9 LD R10,Y+
018C 90B9 LD R11,Y+
018D FDE2 SBRC R30,2
018E 9508 RET
018F 90C9 LD R12,Y+
0190 90D9 LD R13,Y+
0191 FDE3 SBRC R30,3
0192 9508 RET
0193 90E9 LD R14,Y+
0194 90F9 LD R15,Y+
0195 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -