📄 lcm12832k.lst
字号:
__start:
__text_start:
001A E5CF LDI R28,0x5F
001B E0D4 LDI R29,4
001C BFCD OUT 0x3D,R28
001D BFDE OUT 0x3E,R29
001E 51C0 SUBI R28,0x10
001F 40D0 SBCI R29,0
0020 EA0A LDI R16,0xAA
0021 8308 STD Y+0,R16
0022 2400 CLR R0
0023 E6EE LDI R30,0x6E
0024 E0F0 LDI R31,0
0025 E010 LDI R17,0
0026 36EE CPI R30,0x6E
0027 07F1 CPC R31,R17
0028 F011 BEQ 0x002B
0029 9201 ST R0,Z+
002A CFFB RJMP 0x0026
002B 8300 STD Z+0,R16
002C E2E6 LDI R30,0x26
002D E0F0 LDI R31,0
002E E6A0 LDI R26,0x60
002F E0B0 LDI R27,0
0030 E010 LDI R17,0
0031 33E4 CPI R30,0x34
0032 07F1 CPC R31,R17
0033 F021 BEQ 0x0038
0034 95C8 LPM
0035 9631 ADIW R30,1
0036 920D ST R0,X+
0037 CFF9 RJMP 0x0031
0038 D0E7 RCALL _main
_exit:
0039 CFFF RJMP _exit
FILE: E:\programs\ICCAVR_program\LCD_lcm_12832k\main.c
(0001) /**********************************************************************
(0002) //ICC-AVR application builder : 2006-6-27 15:04:57
(0003) // Target : M8
(0004) // Crystal: 3.6864Mhz
(0005) //
(0006)
(0007) ***********************************************************************/
(0008)
(0009) #include <iom8v.h>
(0010) #include <macros.h>
(0011)
(0012) #define uchar unsigned char
(0013) #define uint unsigned int
(0014)
(0015) #define setbit(x,y) (x|=(1<<y)) //set bit y in byte x
(0016) #define clrbit(x,y) (x&=(~(1<<y))) //clear bit y in byte x
(0017)
(0018) uchar exampl[]="北京";
(0019) uchar exampl2[]="abcdefg!";
(0020)
(0021) void ledon(void)
(0022) {
(0023) DDRB = (1<<PB2);
_ledon:
003A E084 LDI R24,4
003B BB87 OUT 0x17,R24
(0024) PORTB = (0<<PB2);
003C 2422 CLR R2
003D BA28 OUT 0x18,R2
(0025) }
003E 9508 RET
(0026)
(0027) void ledoff(void)
(0028) {
(0029) DDRB = (1<<PB2);
_ledoff:
003F E084 LDI R24,4
0040 BB87 OUT 0x17,R24
(0030) PORTB = (1<<PB2);
0041 BB88 OUT 0x18,R24
(0031) }
0042 9508 RET
_delay:
i --> R20
n --> R16
0043 D12D RCALL push_gset1
(0032)
(0033) //延时
(0034) // Delay n*(5ms)
(0035) void delay(uint n)
(0036) {
0044 C009 RJMP 0x004E
(0037) while(n--)
(0038) {
(0039) uint i = 5236; //Delay 5ms
0045 E744 LDI R20,0x74
0046 E154 LDI R21,0x14
(0040) while(i--);
0047 011A MOVW R2,R20
0048 5041 SUBI R20,1
0049 4050 SBCI R21,0
004A 2022 TST R2
004B F7D9 BNE 0x0047
004C 2033 TST R3
004D F7C9 BNE 0x0047
004E 0118 MOVW R2,R16
004F 5001 SUBI R16,1
0050 4010 SBCI R17,0
0051 2022 TST R2
0052 F791 BNE 0x0045
0053 2033 TST R3
0054 F781 BNE 0x0045
(0041) };
(0042) }
0055 D11E RCALL pop_gset1
0056 9508 RET
_delayms:
j --> R20
i --> R16
0057 D119 RCALL push_gset1
(0043)
(0044)
(0045) void delayms(uint i)
(0046) {
0058 C006 RJMP 0x005F
(0047) while(i--)
(0048) {
(0049) uchar j = 125;//125;//250;
0059 E74D LDI R20,0x7D
(0050) while(j--);
005A 2E24 MOV R2,R20
005B 2433 CLR R3
005C 5041 SUBI R20,1
005D 2022 TST R2
005E F7D9 BNE 0x005A
005F 0118 MOVW R2,R16
0060 5001 SUBI R16,1
0061 4010 SBCI R17,0
0062 2022 TST R2
0063 F7A9 BNE 0x0059
0064 2033 TST R3
0065 F799 BNE 0x0059
(0051) }
(0052) }
0066 D10D RCALL pop_gset1
0067 9508 RET
(0053)
(0054) void delayus(uchar i)
(0055) {
(0056) while(i--);
_delayus:
i --> R16
0068 2E20 MOV R2,R16
0069 2433 CLR R3
006A 5001 SUBI R16,1
006B 2022 TST R2
006C F7D9 BNE 0x0068
(0057) }
006D 9508 RET
(0058)
(0059)
(0060) void wait(void)
(0061) {
(0062) DDRB = ((1<<PB0)|(1<<PB1));
_wait:
006E E083 LDI R24,3
006F BB87 OUT 0x17,R24
(0063) DDRC = 1<<PC1;
0070 E082 LDI R24,2
0071 BB84 OUT 0x14,R24
(0064) DDRD = 0;
0072 2422 CLR R2
0073 BA21 OUT 0x11,R2
(0065) //PORTD = 0xff;
(0066) PORTB = ((1<<PB0)|(0<<PB1)); //RW = 1 WRITE RS =0 INSTRUCTION
0074 E081 LDI R24,1
0075 BB88 OUT 0x18,R24
(0067) PORTC = (1<<PC1); //E = 1
0076 E082 LDI R24,2
0077 BB85 OUT 0x15,R24
(0068) DDRD = 0;
0078 BA21 OUT 0x11,R2
(0069) while(PIND&0x80);
0079 9987 SBIC 0x10,7
007A CFFE RJMP 0x0079
(0070) PORTB = ((0<<PB0)|(0<<PB1)); //RW = 0 WRITE RS =0 INSTRUCTION
007B 2422 CLR R2
007C BA28 OUT 0x18,R2
(0071) }
007D 9508 RET
_send_i:
i --> R20
007E D0F2 RCALL push_gset1
007F 2F40 MOV R20,R16
(0072)
(0073) void send_i(uchar i)
(0074) {
(0075) DDRB = ((1<<PB0)|(1<<PB1));
0080 E083 LDI R24,3
0081 BB87 OUT 0x17,R24
(0076) DDRC = 1<<PC1;
0082 E082 LDI R24,2
0083 BB84 OUT 0x14,R24
(0077)
(0078) wait();
0084 DFE9 RCALL _wait
(0079) PORTB = ((0<<PB0)|(0<<PB1)); //RW = 0 WRITE RS =0 INSTRUCTION
0085 2422 CLR R2
0086 BA28 OUT 0x18,R2
(0080) DDRD = 0xff;
0087 EF8F LDI R24,0xFF
0088 BB81 OUT 0x11,R24
(0081) PORTD = i;
0089 BB42 OUT 0x12,R20
(0082) //setbit(PORTC,PC1);
(0083) //NOP();
(0084) //clrbit(PORTC,PC1);
(0085) PORTC = (1<<PC1); //E = 1
008A E082 LDI R24,2
008B BB85 OUT 0x15,R24
(0086) NOP();
008C 0000 NOP
(0087) PORTC = (0<<PC1); //E = 0
008D BA25 OUT 0x15,R2
(0088) }
008E D0E5 RCALL pop_gset1
008F 9508 RET
_send_d:
d --> R20
0090 D0E0 RCALL push_gset1
0091 2F40 MOV R20,R16
(0089)
(0090) void send_d(uchar d)
(0091) {
(0092) DDRB = ((1<<PB0)|(1<<PB1));
0092 E083 LDI R24,3
0093 BB87 OUT 0x17,R24
(0093) DDRC = 1<<PC1;
0094 E082 LDI R24,2
0095 BB84 OUT 0x14,R24
(0094)
(0095) wait();
0096 DFD7 RCALL _wait
(0096) PORTB = ((0<<PB0)|(1<<PB1)); //RW = 0 WRITE RS =1 DATA
0097 E082 LDI R24,2
0098 BB88 OUT 0x18,R24
(0097) DDRD = 0xff;
0099 EF8F LDI R24,0xFF
009A BB81 OUT 0x11,R24
(0098) PORTD = d;
009B BB42 OUT 0x12,R20
(0099) PORTC = (1<<PC1); //E = 1
009C E082 LDI R24,2
009D BB85 OUT 0x15,R24
(0100) NOP();
009E 0000 NOP
(0101) PORTC = (0<<PC1); //E = 0
009F 2422 CLR R2
00A0 BA25 OUT 0x15,R2
(0102) //setbit(PORTC,PC1);
(0103) //NOP();
(0104) //clrbit(PORTC,PC1);
(0105) }
00A1 D0D2 RCALL pop_gset1
00A2 9508 RET
_lw:
d --> Y+4
y --> R22
x --> R20
00A3 D0E4 RCALL push_gset2
00A4 2F62 MOV R22,R18
00A5 2F40 MOV R20,R16
(0106)
(0107) void lw(uchar x,uchar y,uchar d)
(0108) {
(0109) send_i(0xB8|y);
00A6 2F06 MOV R16,R22
00A7 6B08 ORI R16,0xB8
00A8 DFD5 RCALL _send_i
(0110) send_i(0x40|x);
00A9 2F04 MOV R16,R20
00AA 6400 ORI R16,0x40
00AB DFD2 RCALL _send_i
(0111) send_d(d);
00AC 810C LDD R16,Y+4
00AD DFE2 RCALL _send_d
(0112) //PORTD = 0xff;
(0113) }
00AE D0BE RCALL pop_gset2
00AF 9508 RET
(0114)
(0115) void lcd_init(void)
(0116) {
(0117) uchar x,y;
(0118) delay(100); //>40ms 800
_lcd_init:
y --> Y+1
x --> Y+1
00B0 E604 LDI R16,0x64
00B1 E010 LDI R17,0
00B2 DF90 RCALL _delay
(0119)
(0120) send_i(0x30); //select basic instruction
00B3 E300 LDI R16,0x30
00B4 DFC9 RCALL _send_i
(0121) delay(10); //>100us
00B5 E00A LDI R16,0xA
00B6 E010 LDI R17,0
00B7 DF8B RCALL _delay
(0122) send_i(0x30); //set basic mode
00B8 E300 LDI R16,0x30
00B9 DFC4 RCALL _send_i
(0123) delay(10); //>37us
00BA E00A LDI R16,0xA
00BB E010 LDI R17,0
00BC DF86 RCALL _delay
(0124) send_i(0x0c); //turn on lcd 0c
00BD E00C LDI R16,0xC
00BE DFBF RCALL _send_i
(0125) delay(10); //>100us
00BF E00A LDI R16,0xA
00C0 E010 LDI R17,0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -