📄 lcd-m8.lst
字号:
__text_start:
__start:
00E6 EFCF LDI R28,0xFF
00E7 E0D2 LDI R29,2
00E8 BFCD OUT 0x3D,R28
00E9 BFDE OUT 0x3E,R29
00EA 51C0 SUBI R28,0x10
00EB 40D0 SBCI R29,0
00EC EA0A LDI R16,0xAA
00ED 8308 STD Y+0,R16
00EE 2400 CLR R0
00EF E1E6 LDI R30,0x16
00F0 E0F1 LDI R31,1
00F1 E011 LDI R17,1
00F2 31E8 CPI R30,0x18
00F3 07F1 CPC R31,R17
00F4 F011 BEQ 0x00F7
00F5 9201 ST R0,Z+
00F6 CFFB RJMP 0x00F2
00F7 8300 STD Z+0,R16
00F8 EBE6 LDI R30,0xB6
00F9 E0F1 LDI R31,1
00FA E0A0 LDI R26,0
00FB E0B1 LDI R27,1
00FC E011 LDI R17,1
00FD 3CEC CPI R30,0xCC
00FE 07F1 CPC R31,R17
00FF F021 BEQ 0x0104
0100 95C8 LPM
0101 9631 ADIW R30,1
0102 920D ST R0,X+
0103 CFF9 RJMP 0x00FD
0104 D388 RCALL _main
_exit:
0105 CFFF RJMP _exit
FILE: D:\ele\AVR\ICC\LCD\lcd-M8\head.h
(0001) #define uchar unsigned char
(0002) #define unit unsigned int
(0003) #define ulong unsigned long
(0004) #define xtal 24
(0005)
(0006) #define fosc 18432000 //晶振8MHZ
(0007) #define baud 9600 //波特率
(0008)
(0009) uchar flash A_Z[]={
(0010) 0xF8,0x24,0x22,0x24,0xF8, //A
(0011) 0x82,0xFE,0x92,0x92,0x6C, //B
(0012) 0x7C,0x82,0x82,0x82,0x44, //C
(0013) 0x82,0xFE,0x82,0x82,0x7C, //D
(0014) 0x82,0xFE,0x92,0x92,0xC6, //E
(0015) 0x82,0xFE,0x92,0x3A,0x06, //F
(0016) 0x38,0x44,0x82,0xA2,0x66, //G
(0017) 0xFE,0x10,0x10,0xFE,0x00, //H
(0018) 0x82,0xFE,0x82,0x00,0x00, //I
(0019) 0x40,0x82,0x82,0x7E,0x02, //J
(0020) 0xFE,0x10,0x2C,0xC2,0x00, //K
(0021) 0xFE,0x80,0x80,0x80,0x00, //L
(0022) 0xFE,0x0E,0xF0,0x0E,0xFE, //M
(0023) 0xFE,0x18,0x60,0xFE,0x00, //N
(0024) 0x7C,0x82,0x82,0x82,0x7C, //O
(0025) 0x82,0xFE,0x92,0x12,0x0C, //P
(0026) 0x7C,0xA2,0xA2,0xC2,0x7C, //Q
(0027) 0xFE,0x12,0x72,0x92,0x8C, //R
(0028) 0xCC,0x92,0x92,0x92,0x66, //S
(0029) 0x06,0x82,0xFE,0x82,0x06, //T
(0030) 0x7E,0x80,0x80,0x7E,0x00, //U
(0031) 0x0E,0x70,0xC0,0x70,0x0E, //V
(0032) 0x0E,0xF0,0x1E,0xF0,0x0E, //W
(0033) 0x82,0xCE,0x30,0xCE,0x82, //X
(0034) 0x02,0x8E,0xF0,0x8E,0x02, //Y
(0035) 0x82,0xE2,0x92,0x8E,0x82 //Z
(0036) };
(0037)
(0038)
(0039)
(0040)
(0041) uchar flash a_z[]={
(0042) 0x40,0xA8,0xA8,0xF0,0x00, //a
(0043) 0xFE,0x90,0x90,0x60,0x00, //b
(0044) 0x70,0x88,0x88,0x88,0x00, //c
(0045) 0x60,0x90,0x90,0xFE,0x00, //d
(0046) 0x70,0xA8,0xA8,0x30,0x00, //e
(0047) 0x90,0xFC,0x92,0x12,0x00, //f
(0048) 0x74,0xAA,0xAA,0xA6,0x42, //g
(0049) 0xFE,0x10,0x10,0xE0,0x00, //h
(0050) 0x10,0x7A,0x80,0x40,0x00, //i
(0051) 0x40,0x88,0x7A,0x00,0x00, //j
(0052) 0xFE,0x20,0xF0,0x88,0x00, //k
(0053) 0xFE,0x80,0x40,0x00,0x00, //l
(0054) 0xF8,0x08,0xF8,0x08,0xF0, //m
(0055) 0x08,0xF0,0x08,0x08,0xF0, //n
(0056) 0x70,0x88,0x88,0x70,0x00, //o
(0057) 0xFC,0x24,0x24,0x18,0x00, //p
(0058) 0x18,0x24,0x24,0xFC,0x00, //q
(0059) 0x88,0xF8,0x90,0x08,0x08, //r
(0060) 0x98,0xA8,0xA8,0xC8,0x00, //s
(0061) 0x08,0x7E,0x88,0x40,0x00, //t
(0062) 0x78,0x80,0x80,0x78,0x80, //u
(0063) 0x08,0x38,0xC0,0x38,0x08, //v
(0064) 0x18,0xE0,0x38,0xE0,0x18, //w
(0065) 0x88,0xD8,0x20,0xD8,0x88, //x
(0066) 0x9C,0xA0,0x7C,0x00,0x00, //y
(0067) 0xC8,0xA8,0x98,0x88,0x00 //z
(0068) };
(0069)
(0070) uchar flash num0_9[]={
(0071) 0x3e,0x51,0x49,0x45,0x3e, //0
(0072) 0x42,0x7f,0x40,0x00,0x00, //1
(0073) 0x42,0x61,0x51,0x49,0x46, //2
(0074) 0x21,0x41,0x45,0x4b,0x31, //3
(0075) 0x18,0x14,0x12,0x7f,0x10, //4
(0076) 0x27,0x45,0x45,0x45,0x39, //5
(0077) 0x3c,0x4a,0x49,0x49,0x30, //6
(0078) 0x01,0x01,0x79,0x05,0x03, //7
(0079) 0x36,0x49,0x49,0x49,0x36, //8
(0080) 0x06,0x49,0x49,0x29,0x1e, //9
(0081) 0x00,0x00,0x00,0x00,0x00, //空格
(0082) };
(0083)
(0084)
(0085)
(0086) //空格
(0087) uchar flash space[]={0x00,0x00,0x00,0x00,0x00};
(0088) //: /
(0089) uchar flash x_xg[]={0x00,0xE0,0x3C,0x06,0x00};
(0090) //下画线
(0091) uchar flash x_ds[]={0x80,0x80,0x80,0x00,0x00};
(0092) //冒号
(0093) uchar flash x_mh[]={0x00,0xc6,0xc6,0x00,0x00};
(0094) //小数点
(0095) uchar flash x_p[]={0x00,0xc0,0x00,0x00,0x00};
(0096) //下箭头
(0097) uchar flash x_xia[]={0x06,0x1E,0x7E,0x1E,0x06};
(0098) //上箭头
(0099) uchar flash x_shang[]={0x60,0x78,0x7E,0x78,0x60};
(0100)
(0101) uchar flash x_up[] ={0x00,0x02,0x06,0x0E,0x1E,0x3E,0x7E,0x3E,0x1E,0x0E,0x06,0x02,0x00};
(0102) uchar flash x_down[]={0x00,0x40,0x60,0x70,0x78,0x7C,0x7E,0x7C,0x78,0x70,0x60,0x40,0x00};
(0103)
(0104)
(0105) /* 微秒级延时程序 */
(0106) void del(int time)
(0107) {
(0108) do
(0109) {
(0110) time--;
_del:
time --> R16
0106 5001 SUBI R16,1
0107 4010 SBCI R17,0
(0111) }
(0112) while (time>1);
0108 E081 LDI R24,1
0109 E090 LDI R25,0
010A 1780 CP R24,R16
010B 0791 CPC R25,R17
010C F3CC BLT 0x0106
010D 9508 RET
(0113) }
(0114)
(0115) /* 毫秒级延时程序 */
(0116) void delay_1ms(void)
(0117) { unsigned int i1;
(0118) for(i1=1;i1<(unsigned int)(xtal*143-2);i1++)
_delay_1ms:
i1 --> R16
010E E001 LDI R16,1
010F E010 LDI R17,0
0110 C002 RJMP 0x0113
0111 5F0F SUBI R16,0xFF
0112 4F1F SBCI R17,0xFF
0113 3606 CPI R16,0x66
0114 E0ED LDI R30,0xD
0115 071E CPC R17,R30
0116 F3D0 BCS 0x0111
0117 9508 RET
_delay:
i2 --> R20
n --> R22
0118 D3E5 RCALL push_gset2
0119 01B8 MOVW R22,R16
(0119) ;
(0120) }
(0121)
(0122) void delay(unsigned int n)
(0123) {
(0124) unsigned int i2=0;
011A 2744 CLR R20
011B 2755 CLR R21
011C C004 RJMP 0x0121
(0125) while(i2<n)
(0126) {delay_1ms();
011D DFF0 RCALL _delay_1ms
(0127) i2++; WDR();
011E 5F4F SUBI R20,0xFF
011F 4F5F SBCI R21,0xFF
0120 95A8 WDR
0121 1746 CP R20,R22
0122 0757 CPC R21,R23
0123 F3C8 BCS 0x011D
0124 D3CB RCALL pop_gset2
0125 9508 RET
_writelcd:
dat --> R20
0126 D3D9 RCALL push_gset1
0127 2F40 MOV R20,R16
FILE: D:\ele\AVR\ICC\LCD\lcd-M8\lcd.h
(0001)
(0002) #define uchar unsigned char
(0003) #define unit unsigned int
(0004) #define ulong unsigned long
(0005)
(0006) #define IN_DBUS() {DDRB=0x00;PORTB=0xff;}
(0007) #define OUT_DBUS() DDRB=0xff
(0008) #define LCDDAT PORTB
(0009) #define LCDDATIN PINB
(0010) #define DI1 PORTD|=0x04
(0011) #define DI0 PORTD&=~0x04
(0012) #define RW1 PORTD|=0x08
(0013) #define RW0 PORTD&=~0x08
(0014) #define E1 PORTD|=0x10
(0015) #define E0 PORTD&=~0x10
(0016) #define CS1_1 PORTD|=0x20
(0017) #define CS1_0 PORTD&=~0x20
(0018) #define CS2_1 PORTD|=0x40
(0019) #define CS2_0 PORTD&=~0x40
(0020) #define REST1 PORTD|=0x80
(0021) #define REST0 PORTD&=~0x80
(0022)
(0023)
(0024)
(0025) uchar LCD_X,LCD_Y;
(0026)
(0027)
(0028)
(0029) uchar LCD_X,LCD_Y;
(0030)
(0031)
(0032)
(0033) /*************LCD***************/
(0034)
(0035)
(0036) void writelcd(uchar dat)
(0037) {
(0038) E0; del(1);
0128 985C CBI 0x0B,4
0129 E001 LDI R16,1
012A E010 LDI R17,0
012B DFDA RCALL _del
(0039) RW0; del(1);
012C 985B CBI 0x0B,3
012D E001 LDI R16,1
012E E010 LDI R17,0
012F DFD6 RCALL _del
(0040) E1; del(1);
0130 9A5C SBI 0x0B,4
0131 E001 LDI R16,1
0132 E010 LDI R17,0
0133 DFD2 RCALL _del
(0041) OUT_DBUS(); del(3);
0134 EF8F LDI R24,0xFF
0135 B984 OUT 0x04,R24
0136 E003 LDI R16,3
0137 E010 LDI R17,0
0138 DFCD RCALL _del
(0042) LCDDAT=dat; del(3);//PORTD&=~0xc0; PORTD|=(0xc0&dat);
0139 B945 OUT 0x05,R20
013A E003 LDI R16,3
013B E010 LDI R17,0
013C DFC9 RCALL _del
(0043) E0; del(3);
013D 985C CBI 0x0B,4
013E E003 LDI R16,3
013F E010 LDI R17,0
0140 DFC5 RCALL _del
(0044) RW1; E1;
0141 9A5B SBI 0x0B,3
0142 9A5C SBI 0x0B,4
(0045) WDR();
0143 95A8 WDR
0144 D3BE RCALL pop_gset1
0145 9508 RET
_writelcdcon:
dat --> R20
0146 D3B9 RCALL push_gset1
0147 2F40 MOV R20,R16
(0046) }
(0047)
(0048) void writelcdcon(uchar dat)
(0049) {
(0050) DI0;
0148 985A CBI 0x0B,2
(0051) CS1_1;CS2_1;
0149 9A5D SBI 0x0B,5
014A 9A5E SBI 0x0B,6
(0052) writelcd(dat);
014B 2F04 MOV R16,R20
014C DFD9 RCALL _writelcd
014D D3B5 RCALL pop_gset1
014E 9508 RET
_writelcddat:
dat --> R20
014F D3B0 RCALL push_gset1
0150 2F40 MOV R20,R16
(0053) }
(0054)
(0055) void writelcddat(uchar dat)
(0056) {
(0057) DI1;
0151 9A5A SBI 0x0B,2
(0058) writelcd(dat);
0152 2F04 MOV R16,R20
0153 DFD2 RCALL _writelcd
0154 D3AE RCALL pop_gset1
0155 9508 RET
(0059) }
(0060)
(0061) void restlcd(void)
(0062) {
(0063) REST1;
_restlcd:
0156 9A5F SBI 0x0B,7
(0064) delay(1);
0157 E001 LDI R16,1
0158 E010 LDI R17,0
0159 DFBE RCALL _delay
(0065) REST0;
015A 985F CBI 0x0B,7
(0066) delay(1);
015B E001 LDI R16,1
015C E010 LDI R17,0
015D DFBA RCALL _delay
(0067) REST1;
015E 9A5F SBI 0x0B,7
015F 9508 RET
(0068) }
(0069)
(0070) void lcdon(void)
(0071) {
(0072) DI0;
_lcdon:
0160 985A CBI 0x0B,2
(0073) CS1_1;CS2_1;
0161 9A5D SBI 0x0B,5
0162 9A5E SBI 0x0B,6
(0074) writelcd(0x3f);
0163 E30F LDI R16,0x3F
0164 DFC1 RCALL _writelcd
0165 9508 RET
(0075) }
(0076)
(0077) void lcdoff(void)
(0078) {
(0079) DI0;
_lcdoff:
0166 985A CBI 0x0B,2
(0080) CS1_1;CS2_1;
0167 9A5D SBI 0x0B,5
0168 9A5E SBI 0x0B,6
(0081) writelcd(0x3E);
0169 E30E LDI R16,0x3E
016A DFBB RCALL _writelcd
016B 9508 RET
_fromx:
dat --> R20
016C D393 RCALL push_gset1
016D 2F40 MOV R20,R16
(0082) }
(0083)
(0084) void fromx(uchar dat)
(0085) {
(0086) DI0;
016E 985A CBI 0x0B,2
(0087) CS1_1;CS2_1;
016F 9A5D SBI 0x0B,5
0170 9A5E SBI 0x0B,6
(0088) writelcd(dat|0xC0);
0171 2F04 MOV R16,R20
0172 6C00 ORI R16,0xC0
0173 DFB2 RCALL _writelcd
0174 D38E RCALL pop_gset1
0175 9508 RET
_sety:
dat --> R20
0176 D389 RCALL push_gset1
0177 2F40 MOV R20,R16
(0089) }
(0090)
(0091) void sety(uchar dat)
(0092) {
(0093) DI0;
0178 985A CBI 0x0B,2
(0094) writelcd(0xB8|dat);
0179 2F04 MOV R16,R20
017A 6B08 ORI R16,0xB8
017B DFAA RCALL _writelcd
017C D386 RCALL pop_gset1
017D 9508 RET
_setx:
dat --> R20
017E D381 RCALL push_gset1
017F 2F40 MOV R20,R16
(0095) }
(0096)
(0097) void setx(uchar dat)
(0098) {
(0099) if(dat<64)
0180 3440 CPI R20,0x40
0181 F418 BCC 0x0185
(0100) {CS1_1;CS2_0;}
0182 9A5D SBI 0x0B,5
0183 985E CBI 0x0B,6
0184 C003 RJMP 0x0188
(0101) else
(0102) {CS1_0;CS2_1;dat-=64;}
0185 985D CBI 0x0B,5
0186 9A5E SBI 0x0B,6
0187 5440 SUBI R20,0x40
(0103) DI0;
0188 985A CBI 0x0B,2
(0104) writelcd(0x40|dat);
0189 2F04 MOV R16,R20
018A 6400 ORI R16,0x40
018B DF9A RCALL _writelcd
018C D376 RCALL pop_gset1
018D 9508 RET
_w8:
dat --> Y+4
y --> R20
x --> R22
018E D36F RCALL push_gset2
018F 2F42 MOV R20,R18
0190 2F60 MOV R22,R16
(0105) }
(0106)
(0107) void w8(uchar x,uchar y,uchar dat)
(0108) {
(0109) setx(x);
0191 2F06 MOV R16,R22
0192 DFEB RCALL _setx
(0110) sety(y);
0193 2F04 MOV R16,R20
0194 DFE1 RCALL _sety
(0111) writelcddat(dat);
0195 810C LDD R16,Y+4
0196 DFB8 RCALL _writelcddat
(0112) WDR();
0197 95A8 WDR
0198 D357 RCALL pop_gset2
0199 9508 RET
_clrlcd:
j --> R20
i --> R22
019A D363 RCALL push_gset2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -