📄 demoa-16sm.lst
字号:
__start:
__text_start:
DE EFCF LDI R28,0xFF
DF E2D1 LDI R29,0x21
E0 BFCD OUT 0x3D,R28
E1 BFDE OUT 0x3E,R29
E2 51CE SUBI R28,0x1E
E3 40D0 SBCI R29,0
E4 EA0A LDI R16,0xAA
E5 8308 STD Y+0,R16
E6 2400 CLR R0
E7 E5E6 LDI R30,0x56
E8 E0F2 LDI R31,2
E9 E012 LDI R17,2
EA 36E1 CPI R30,0x61
EB 07F1 CPC R31,R17
EC F011 BEQ 0x00EF
ED 9201 ST R0,Z+
EE CFFB RJMP 0x00EA
EF 8300 STD Z+0,R16
F0 E6E6 LDI R30,0x66
F1 E0F1 LDI R31,1
F2 E0A0 LDI R26,0
F3 E0B2 LDI R27,2
F4 E011 LDI R17,1
F5 E000 LDI R16,0
F6 BF0B OUT 0x3B,R16
F7 3BEC CPI R30,0xBC
F8 07F1 CPC R31,R17
F9 F021 BEQ 0x00FE
FA 95C8 LPM
FB 9631 ADIW R30,1
FC 920D ST R0,X+
FD CFF9 RJMP 0x00F7
FE 940E 0101 CALL _main
_exit:
100 CFFF RJMP _exit
_main:
a --> Y,+1
array1 --> Y,+0
jsave --> Y,+1
j --> Y,+1
dark --> Y,+1
pfin --> Y,+1
data --> Y,+1
i --> R10
darkfg --> R20
101 972A SBIW R28,0xA
FILE: C:\+samples-16small\DEMOA-16sm\DEMOA-16sm.c
(0001) /*
(0002) Title: DEMOA-16sm.c
(0003) Connection:
(0004) Factory fixed setting:
(0005) PORTA:
(0006) PA0-PA2 LCD control
(0007) PA3-PA7 4x7-segment display control
(0008) Drive LED group2 (the right group of LED)
(0009) PORTB:
(0010) Shared by LCD and 4x7-segment displays
(0011) output 8-bit data to LCD or 8-bit data to 4x7-segment displays
(0012) PORTC:
(0013) shared by 8-bit dipswitch and 4 x touch switches + 4 buttons
(0014) receive inputs from dipswitch, touch switches and buttons
(0015) PORTD:
(0016) Drive LED group1 (the left group of LED)
(0017) Attention:
(0018) 1. J12 should be capped (connectted)
(0019) 2. J5 is the Jump for LCD back light power
(0020)
(0021) Operation:
(0022) See the User Mannual, which is included in CD
(0023) */
(0024)
(0025) #include <iom16v.h>
(0026) #include <macros.h>
(0027) #include <stdlib.h>
(0028)
(0029) // external symbols defined in LCD-avr-sm.c
(0030) extern unsigned char lcd_enable, lcd_disable;
(0031) extern unsigned char in_instr_wr, in_data_wr;
(0032) extern unsigned char in_instr_rd, in_data_rd;
(0033) extern void wr_instruction(unsigned char instr);
(0034) extern void wr_data(unsigned char data);
(0035) extern int indexhead, indextail, indexcount;
(0036) extern int cursor_index;
(0037) extern unsigned char swin, swin2;
(0038) extern const char message1[];
(0039) extern const char message2[];
(0040) extern const char message3[];
(0041) extern const char message4[];
(0042) extern const char message5[];
(0043) extern const char message6[];
(0044) extern const char message7[];
(0045) extern const char message8[];
(0046)
(0047) extern void port_init(void);
(0048) extern void WDT_off(void);
(0049) extern void lcd_delay(int count);
(0050) extern void ldelay(int ms);
(0051) extern void wr_instruction(unsigned char instr);
(0052) extern void wr_data(unsigned char data);
(0053) extern void wr_instruction2(unsigned char instr);
(0054) extern void wr_data2(unsigned char data);
(0055) extern void cursor_home(void);
(0056) extern void cursor_line1(void);
(0057) extern void cursor_line2(void);
(0058) extern void space(void);
(0059) extern void out_string(const char array[]);
(0060) extern void lcd_on(void);
(0061)
(0062) // External symboles defined in SegDisp-avr-fn.c
(0063)
(0064) extern const char dig0, dig1, dig2, dig3, dot;
(0065) extern char segconv[];
(0066) extern unsigned char BCD0, BCD1, BCD2, BCD3;
(0067) extern int count;
(0068)
(0069) //extern void port_init(void);
(0070) extern void delay(int count);
(0071) extern void BinToBCD(int data);
(0072) extern void dispseg(void);
(0073)
(0074) // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(0075)
(0076) void main(void)
(0077) {
(0078) unsigned char data, pfin, dark, darkfg=0xff;
102 EF4F LDI R20,0xFF
(0079) int i=0;
103 24AA CLR R10
104 24BB CLR R11
(0080) unsigned char j, jsave, array1[10];
(0081) int a;
(0082) CLI();
105 94F8 BCLR 7
(0083) port_init();
106 940E 018C CALL _port_init
(0084) WDT_off();
108 940E 0194 CALL _WDT_off
(0085) ldelay(200);
10A EC08 LDI R16,0xC8
10B E010 LDI R17,0
10C 940E 01A9 CALL _ldelay
(0086) lcd_on();
10E 940E 025C CALL _lcd_on
(0087) PORTD=0x50;
110 E580 LDI R24,0x50
111 BB82 OUT 0x12,R24
(0088) ldelay(50);
112 E302 LDI R16,0x32
113 E010 LDI R17,0
114 940E 01A9 CALL _ldelay
(0089) PORTD=0x05;
116 E085 LDI R24,5
117 BB82 OUT 0x12,R24
(0090) ldelay(50);
118 E302 LDI R16,0x32
119 E010 LDI R17,0
11A 940E 01A9 CALL _ldelay
(0091) out_string(message1);
11C EE04 LDI R16,0xE4
11D E010 LDI R17,0
11E 940E 0245 CALL _out_string
(0092) cursor_line2();
120 940E 0236 CALL _cursor_line2
(0093) out_string(message2);
122 EF03 LDI R16,0xF3
123 E010 LDI R17,0
124 940E 0245 CALL _out_string
(0094) PORTD=0x55;
126 E585 LDI R24,0x55
127 BB82 OUT 0x12,R24
(0095) PORTA=0xF8;
128 EF88 LDI R24,0xF8
129 BB8B OUT 0x1B,R24
(0096) PORTB=0x00;
12A 2422 CLR R2
12B BA28 OUT 0x18,R2
(0097) ldelay(100);
12C E604 LDI R16,0x64
12D E010 LDI R17,0
12E 940E 01A9 CALL _ldelay
130 C058 RJMP 0x0189
(0098)
(0099) while(1)
(0100) {
(0101) WDR();
131 95A8 WDR
(0102) swin=PINC&0x30;
132 B383 IN R24,0x13
133 7380 ANDI R24,0x30
134 9380 0257 STS swin,R24
(0103) swin=(swin>>4)&0x03;
136 9582 SWAP R24
137 708F ANDI R24,0xF
138 7083 ANDI R24,3
139 9380 0257 STS swin,R24
(0104) if(swin2!=swin)
13B 2E28 MOV R2,R24
13C 9030 0256 LDS R3,swin2
13E 1638 CP R3,R24
13F F409 BNE 0x0141
140 C03F RJMP 0x0180
(0105) {
(0106) swin2=swin;
141 9220 0256 STS swin2,R2
(0107) if(swin==0x00)
143 2388 TST R24
144 F469 BNE 0x0152
(0108) {
(0109) cursor_home();
145 940E 0219 CALL _cursor_home
(0110) out_string(message1);
147 EE04 LDI R16,0xE4
148 E010 LDI R17,0
149 940E 0245 CALL _out_string
(0111) cursor_line2();
14B 940E 0236 CALL _cursor_line2
(0112) out_string(message2);
14D EF03 LDI R16,0xF3
14E E010 LDI R17,0
14F 940E 0245 CALL _out_string
(0113) }
151 C02E RJMP 0x0180
(0114) else if(swin==0x01)
152 9180 0257 LDS R24,swin
154 3081 CPI R24,1
155 F469 BNE 0x0163
(0115) {
(0116) cursor_home();
156 940E 0219 CALL _cursor_home
(0117) out_string(message3);
158 E003 LDI R16,3
159 E011 LDI R17,1
15A 940E 0245 CALL _out_string
(0118) cursor_line2();
15C 940E 0236 CALL _cursor_line2
(0119) out_string(message4);
15E E103 LDI R16,0x13
15F E011 LDI R17,1
160 940E 0245 CALL _out_string
(0120) }
162 C01D RJMP 0x0180
(0121) else if(swin==0x02)
163 9180 0257 LDS R24,swin
165 3082 CPI R24,2
166 F469 BNE 0x0174
(0122) {
(0123) cursor_home();
167 940E 0219 CALL _cursor_home
(0124) out_string(message5);
169 E203 LDI R16,0x23
16A E011 LDI R17,1
16B 940E 0245 CALL _out_string
(0125) cursor_line2();
16D 940E 0236 CALL _cursor_line2
(0126) out_string(message6);
16F E302 LDI R16,0x32
170 E011 LDI R17,1
171 940E 0245 CALL _out_string
(0127) }
173 C00C RJMP 0x0180
(0128) else
(0129) {
(0130) cursor_home();
174 940E 0219 CALL _cursor_home
(0131) out_string(message7);
176 E402 LDI R16,0x42
177 E011 LDI R17,1
178 940E 0245 CALL _out_string
(0132) cursor_line2();
17A 940E 0236 CALL _cursor_line2
(0133) out_string(message8);
17C E500 LDI R16,0x50
17D E011 LDI R17,1
17E 940E 0245 CALL _out_string
(0134) }
(0135) }
(0136) swin=PINC;
180 B223 IN R2,0x13
181 9220 0257 STS swin,R2
(0137) BinToBCD(swin);
183 2D02 MOV R16,R2
184 2711 CLR R17
185 940E 0318 CALL _BinToBCD
(0138) dispseg();
187 940E 0362 CALL _dispseg
189 CFA7 RJMP 0x0131
18A 962A ADIW R28,0xA
18B 9508 RET
FILE: C:\+samples-16small\DEMOA-16sm\LCD-16sn.c
(0001) // Title: LCD-16sn.c
(0002) // Functon program for DEMOA-16sm utilizing LCD
(0003)
(0004) #include <iom16v.h>
(0005) #include <macros.h>
(0006) #include <stdlib.h>
(0007)
(0008) unsigned char lcd_enable = 0b00000001, lcd_disable = 0b11111110;
(0009) unsigned char in_instr_wr = 0b00000000, in_data_wr = 0b00000100;
(0010) unsigned char in_instr_rd = 0b00000010, in_data_rd = 0b00000110;
(0011)
(0012) void wr_instruction(unsigned char instr);
(0013) void wr_data(unsigned char data);
(0014)
(0015) int indexhead=0, indextail=0, indexcount;
(0016) int cursor_index=0;
(0017)
(0018)
(0019) const char message1[]= {" Hello World!"};
(0020) const char message2[]= {"www.inovacs.com"};
(0021) const char message3[]= {" Happy New Year"};
(0022) const char message4[]= {" 2008 is coming"};
(0023) const char message5[]= {" Greeting From"};
(0024) const char message6[]= {"www.inovacs.com"};
(0025) const char message7[]= {"Contact Inova"};
(0026) const char message8[]= {"Tel:0592 5563570"};
(0027)
(0028) void cursor_home(void);
(0029) void cursor_line1(void);
(0030) void cursor_line2(void);
(0031) void lcd_delay(int);
(0032)
(0033) unsigned char swin, swin2;
(0034) //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
(0035) // Initilization file
(0036)
(0037) void port_init(void)
(0038) {
(0039) DDRA = 0xff; //PA0-PA2 for LCD control
_port_init:
18C EF8F LDI R24,0xFF
18D BB8A OUT 0x1A,R24
(0040) DDRB = 0xff; //PB0-PB7 for LCD data
18E BB87 OUT 0x17,R24
(0041)
(0042) DDRD = 0xff; //Control LEDs on left group
18F BB81 OUT 0x11,R24
(0043) DDRC = 0x00; //Receive from dip-switch and button
190 2422 CLR R2
191 BA24 OUT 0x14,R2
(0044) PORTC=0xff;
192 BB85 OUT 0x15,R24
193 9508 RET
(0045) }
(0046)
(0047) void WDT_off(void)
(0048) {
(0049) WDR();
_WDT_off:
194 95A8 WDR
(0050) WDTCR=0b00010111;
195 E187 LDI R24,0x17
196 BD81 OUT 0x21,R24
(0051) WDTCR=0b00000111;
197 E087 LDI R24,7
198 BD81 OUT 0x21,R24
199 9508 RET
_lcd_delay:
b --> R10
a --> R20
count --> R16
19A 940E 03FC CALL push_xgset300C
(0052) }
(0053)
(0054) void lcd_delay(int count)
(0055) {
(0056) int a,b;
(0057) b=2*count;
19C 0158 MOVW R10,R16
19D 0CAA LSL R10
19E 1CBB ROL R11
(0058) for(a=0; a<b; a++)
19F 2744 CLR R20
1A0 2755 CLR R21
1A1 C002 RJMP 0x01A4
1A2 5F4F SUBI R20,0xFF
1A3 4F5F SBCI R21,0xFF
1A4 154A CP R20,R10
1A5 055B CPC R21,R11
1A6 F3DC BLT 0x01A2
1A7 940C 0401 JMP pop_xgset300C
_ldelay:
i --> R20
ms --> R10
1A9 940E 03FC CALL push_xgset300C
1AB 0158 MOVW R10,R16
(0059) ;
(0060) }
(0061)
(0062) void ldelay(int ms)
(0063) {
(0064) int i;
(0065) for(i=0; i<=ms; i++)
1AC 2744 CLR R20
1AD 2755 CLR R21
1AE C005 RJMP 0x01B4
(0066) lcd_delay(0x2000); //2000-->4000
1AF E000 LDI R16,0
1B0 E210 LDI R17,0x20
1B1 DFE8 RCALL _lcd_delay
1B2 5F4F SUBI R20,0xFF
1B3 4F5F SBCI R21,0xFF
1B4 16A4 CP R10,R20
1B5 06B5 CPC R11,R21
1B6 F7C4 BGE 0x01AF
1B7 940C 0401 JMP pop_xgset300C
_wr_instruction:
instr --> R10
1B9 92AA ST R10,-Y
1BA 2EA0 MOV R10,R16
(0067) }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -