📄 usart_icc.lst
字号:
EA 98C2 CBI 0x18,2
(0125) LCD_OP_PORT =(CMD<<4)|temp; // Load low-data to port
EB 2F86 MOV R24,R22
EC 708F ANDI R24,0xF
ED 9582 SWAP R24
EE 2B84 OR R24,R20
EF BB88 OUT 0x18,R24
(0126) lcd_clear_rw(); // Set LCD to write
F0 98C1 CBI 0x18,1
(0127) lcd_clear_rs(); // Set LCD to command
F1 98C0 CBI 0x18,0
(0128) lcd_set_e(); // Write data to LCD
F2 9AC2 SBI 0x18,2
(0129) asm("nop");
F3 0000 NOP
(0130) asm("nop");
F4 0000 NOP
(0131) lcd_clear_e(); // Disable LCD
F5 98C2 CBI 0x18,2
F6 9169 LD R22,Y+
F7 9149 LD R20,Y+
F8 9508 RET
_LCD_WriteData:
temp --> R20
Data --> R22
F9 934A ST R20,-Y
FA 936A ST R22,-Y
FB 2F60 MOV R22,R16
(0132) }
(0133) // ***************************************** //
(0134) // *** Write one byte of data to the LCD *** //
(0135) // ***************************************** //
(0136) void LCD_WriteData (unsigned char Data)
(0137) {
(0138) char temp;
(0139) LCD_Busy(); // Test if LCD Busy
FC DFBF RCALL _LCD_Busy
(0140) LCD_DIR_PORT = 0xFF; // LCD port output
FD EF8F LDI R24,0xFF
FE BB87 OUT 0x17,R24
(0141) temp=LCD_OP_PORT;
FF B348 IN R20,0x18
(0142) temp=temp&BIT3;
100 7048 ANDI R20,0x8
(0143) LCD_OP_PORT =(Data & 0xf0)|temp; // Load high-data to port
101 2F86 MOV R24,R22
102 7F80 ANDI R24,0xF0
103 2B84 OR R24,R20
104 BB88 OUT 0x18,R24
(0144) lcd_clear_rw() ; // Set LCD to write
105 98C1 CBI 0x18,1
(0145) lcd_set_rs(); // Set LCD to data
106 9AC0 SBI 0x18,0
(0146) lcd_set_e(); // Write data to LCD
107 9AC2 SBI 0x18,2
(0147) asm("nop");
108 0000 NOP
(0148) asm("nop");
109 0000 NOP
(0149) lcd_clear_e(); // Disable LCD
10A 98C2 CBI 0x18,2
(0150) LCD_OP_PORT = (Data << 4)|temp; // Load low-data to port
10B 2F86 MOV R24,R22
10C 708F ANDI R24,0xF
10D 9582 SWAP R24
10E 2B84 OR R24,R20
10F BB88 OUT 0x18,R24
(0151) lcd_clear_rw() ; // Set LCD to write
110 98C1 CBI 0x18,1
(0152) lcd_set_rs(); // Set LCD to data
111 9AC0 SBI 0x18,0
(0153) lcd_set_e(); // Write data to LCD
112 9AC2 SBI 0x18,2
(0154) asm("nop");
113 0000 NOP
(0155) asm("nop");
114 0000 NOP
(0156) lcd_clear_e(); // Disable LCD
115 98C2 CBI 0x18,2
116 9169 LD R22,Y+
117 9149 LD R20,Y+
118 9508 RET
(0157) }
(0158) // ********************************* //
(0159) // *** Initialize the LCD driver *** //
(0160) // ********************************* //
(0161) void Init_LCD(void)
(0162) {
(0163) LCD_INIT();
_Init_LCD:
119 DF77 RCALL _LCD_INIT
(0164) LCD_WriteControl (LCD_FUNCTION_SET);
11A E208 LDI R16,0x28
11B DFBD RCALL _LCD_WriteControl
(0165) LCD_WriteControl (LCD_OFF);
11C E008 LDI R16,0x8
11D DFBB RCALL _LCD_WriteControl
(0166) LCD_WriteControl (LCD_CLEAR);
11E E001 LDI R16,1
11F DFB9 RCALL _LCD_WriteControl
(0167) LCD_WriteControl (LCD_MODE_SET);
120 E006 LDI R16,6
121 DFB7 RCALL _LCD_WriteControl
(0168) LCD_WriteControl (LCD_ON);
122 E00C LDI R16,0xC
123 DFB5 RCALL _LCD_WriteControl
(0169) LCD_WriteControl (LCD_HOME);
124 E002 LDI R16,2
125 DFB3 RCALL _LCD_WriteControl
126 9508 RET
(0170) }
(0171) // ************************************************ //
(0172) // *** Clear the LCD screen (also homes cursor) *** //
(0173) // ************************************************ //
(0174) void LCD_Clear(void)
(0175) {
(0176) LCD_WriteControl(0x01);
_LCD_Clear:
127 E001 LDI R16,1
128 DFB0 RCALL _LCD_WriteControl
129 9508 RET
(0177) }
(0178) // *********************************************** //
(0179) // *** Position the LCD cursor at row 1, col 1 *** //
(0180) // *********************************************** //
(0181) void LCD_Home(void)
(0182) {
(0183) LCD_WriteControl(0x02);
_LCD_Home:
12A E002 LDI R16,2
12B DFAD RCALL _LCD_WriteControl
12C 9508 RET
_LCD_DisplayCharacter:
Char --> R10
12D 92AA ST R10,-Y
12E 2EA0 MOV R10,R16
(0184) }
(0185) // ****************************************************************** //
(0186) // *** Display a single character, at the current cursor location *** //
(0187) // ****************************************************************** //
(0188) void LCD_DisplayCharacter (char Char)
(0189) {
(0190) LCD_WriteData (Char);
12F 2D0A MOV R16,R10
130 DFC8 RCALL _LCD_WriteData
131 90A9 LD R10,Y+
132 9508 RET
_LCD_DisplayString_F:
string --> R20
column --> R12
row --> R10
133 940E 026E CALL push_xgset303C
135 2EC2 MOV R12,R18
136 2EA0 MOV R10,R16
137 814E LDD R20,Y+6
138 815F LDD R21,Y+7
(0191) }
(0192) // ********************************************************************* //
(0193) // *** Display a string at the specified row and column, using FLASH *** //
(0194) // ********************************************************************* //
(0195) void LCD_DisplayString_F (char row, char column , unsigned char __flash *string)
(0196) {
(0197) LCD_Cursor (row, column);
139 2D2C MOV R18,R12
13A 2D0A MOV R16,R10
13B D021 RCALL _LCD_Cursor
13C C006 RJMP 0x0143
(0198) while (*string)
(0199) {
(0200) LCD_DisplayCharacter (*string++);
13D 011A MOVW R2,R20
13E 5F4F SUBI R20,0xFF
13F 4F5F SBCI R21,0xFF
140 01F1 MOVW R30,R2
141 9104 LPM R16,255(Z)
142 DFEA RCALL _LCD_DisplayCharacter
143 01FA MOVW R30,R20
144 9024 LPM R2,-22(Z)
145 2022 TST R2
146 F7B1 BNE 0x013D
147 940C 0275 JMP pop_xgset303C
_LCD_DisplayString:
string --> R10
column --> R14
row --> R12
149 940E 024F CALL push_xgset00FC
14B 2EE2 MOV R14,R18
14C 2EC0 MOV R12,R16
14D 80AE LDD R10,Y+6
14E 80BF LDD R11,Y+7
(0201) }
(0202) }
(0203) // ******************************************************************* //
(0204) // *** Display a string at the specified row and column, using RAM *** //
(0205) // ******************************************************************* //
(0206) void LCD_DisplayString (char row, char column ,unsigned char *string)
(0207) {
(0208) LCD_Cursor (row, column);
14F 2D2E MOV R18,R14
150 2D0C MOV R16,R12
151 D00B RCALL _LCD_Cursor
152 C004 RJMP 0x0157
(0209) while (*string)
(0210) LCD_DisplayCharacter (*string++);
153 01F5 MOVW R30,R10
154 9101 LD R16,Z+
155 015F MOVW R10,R30
156 DFD6 RCALL _LCD_DisplayCharacter
157 01F5 MOVW R30,R10
158 8020 LDD R2,Z+0
159 2022 TST R2
15A F7C1 BNE 0x0153
15B 940C 0244 JMP pop_xgset00FC
_LCD_Cursor:
column --> R20
row --> R10
15D 940E 0260 CALL push_xgsetF00C
15F 2F42 MOV R20,R18
160 2EA0 MOV R10,R16
(0211) }
(0212) // *************************************************** //
(0213) // *** Position the LCD cursor at "row", "column". *** //
(0214) // *************************************************** //
(0215) void LCD_Cursor (char row, char column)
(0216) {
(0217) switch (row) {
161 2D6A MOV R22,R10
162 2777 CLR R23
163 3061 CPI R22,1
164 E0E0 LDI R30,0
165 077E CPC R23,R30
166 F069 BEQ 0x0174
167 3062 CPI R22,2
168 E0E0 LDI R30,0
169 077E CPC R23,R30
16A F071 BEQ 0x0179
16B 3063 CPI R22,3
16C E0E0 LDI R30,0
16D 077E CPC R23,R30
16E F079 BEQ 0x017E
16F 3064 CPI R22,4
170 E0E0 LDI R30,0
171 077E CPC R23,R30
172 F081 BEQ 0x0183
173 C013 RJMP 0x0187
(0218) case 1: LCD_WriteControl (0x80 + column - 1); break;
174 2F04 MOV R16,R20
175 5800 SUBI R16,0x80
176 5001 SUBI R16,1
177 DF61 RCALL _LCD_WriteControl
178 C00E RJMP 0x0187
(0219) case 2: LCD_WriteControl (0xc0 + column - 1); break;
179 2F04 MOV R16,R20
17A 5400 SUBI R16,0x40
17B 5001 SUBI R16,1
17C DF5C RCALL _LCD_WriteControl
17D C009 RJMP 0x0187
(0220) case 3: LCD_WriteControl (0x94 + column - 1); break;
17E 2F04 MOV R16,R20
17F 560C SUBI R16,0x6C
180 5001 SUBI R16,1
181 DF57 RCALL _LCD_WriteControl
182 C004 RJMP 0x0187
(0221) case 4: LCD_WriteControl (0xd4 + column - 1); break;
183 2F04 MOV R16,R20
184 520C SUBI R16,0x2C
185 5001 SUBI R16,1
186 DF52 RCALL _LCD_WriteControl
(0222) default: break;
187 940C 0267 JMP pop_xgsetF00C
(0223) }
(0224) }
(0225) // ************************** //
(0226) // *** Turn the cursor on *** //
(0227) // ************************** //
(0228) void LCD_Cursor_On (void)
(0229) {
(0230) LCD_WriteControl (LCD_CURS_ON);
_LCD_Cursor_On:
189 E00D LDI R16,0xD
18A DF4E RCALL _LCD_WriteControl
18B 9508 RET
(0231) }
(0232) // *************************** //
(0233) // *** Turn the cursor off *** //
(0234) // *************************** //
(0235) void LCD_Cursor_Off (void)
(0236) {
(0237) LCD_WriteControl (LCD_ON);
_LCD_Cursor_Off:
18C E00C LDI R16,0xC
18D DF4B RCALL _LCD_WriteControl
18E 9508 RET
(0238) }
(0239) // ******************** //
(0240) // *** Turn Off LCD *** //
(0241) // ******************** //
(0242) void LCD_Display_Off (void)
(0243) {
(0244) LCD_WriteControl(LCD_OFF);
_LCD_Display_Off:
18F E008 LDI R16,0x8
190 DF48 RCALL _LCD_WriteControl
191 9508 RET
(0245) }
(0246) // ******************* //
(0247) // *** Turn On LCD *** //
(0248) // ******************* //
(0249) void LCD_Display_On (void)
(0250) {
(0251) LCD_WriteControl(LCD_ON);
_LCD_Display_On:
192 E00C LDI R16,0xC
193 DF45 RCALL _LCD_WriteControl
194 9508 RET
_main:
msg --> R20
195 9722 SBIW R28,2
FILE: E:\新建文件夹\usart_icc\cfile\main.c
(0001) #define MAIN_C
(0002) #include "includes.h"
(0003) /***************************/
(0004) /*串口通信*/
(0005) /*晶振为4MHz*/
(0006) /*波特率为9600bps*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -