📄 ac14-1.lis
字号:
.module ac14-1.c
.area lit(rom, con, rel)
0000 _str0::
0000 2D546869732069732061204C43442D21 .byte 45,'T,'h,'i,'s,32,'i,'s,32,'a,32,'L,'C,'D,45,33
0010 00 .byte 0
0011 .dbfile d:\MYDOCU~1\ac14-1\ac14-1.c
0011 .dbsym e str0 _str0 A[17:17]kc
0011 _str1::
0011 2D44657369676E206279205A58482D21 .byte 45,'D,'e,'s,'i,'g,'n,32,'b,'y,32,'Z,'X,'H,45,33
0021 00 .byte 0
0022 .dbsym e str1 _str1 A[17:17]kc
.area text(rom, con, rel)
0000 .dbfile d:\MYDOCU~1\ac14-1\ac14-1.c
0000 .dbfunc e main _main fV
.even
0000 _main::
0000 2297 sbiw R28,2
0002 .dbline -1
0002 .dbline 32
0002 ; #include <iom16v.h>
0002 ; #include <macros.h>
0002 ; //-----------------------------------------------
0002 ; #define uchar unsigned char
0002 ; #define uint unsigned int
0002 ; //-------------------引脚电平的宏定义---------
0002 ; #define LCM_RS_1 PORTB|=BIT(PB0)
0002 ; #define LCM_RS_0 PORTB&=~BIT(PB0)
0002 ; #define LCM_RW_1 PORTB|=BIT(PB1)
0002 ; #define LCM_RW_0 PORTB&=~BIT(PB1)
0002 ; #define LCM_EN_1 PORTB|=BIT(PB2)
0002 ; #define LCM_EN_0 PORTB&=~BIT(PB2)
0002 ; //======================================
0002 ; #define DataPort PORTA
0002 ; #define Busy 0x80
0002 ; #define xtal 8
0002 ; //======================================
0002 ; const uchar str0[]={"-This is a LCD-!"};
0002 ; const uchar str1[]={"-Design by ZXH-!"};
0002 ; //========函数声明=========
0002 ; void Delay_1ms(void);
0002 ; void Delay_nms(uint n);
0002 ; void WaitForEnable(void);
0002 ; void LcdWriteData(uchar W);
0002 ; void LcdWriteCommand(uchar CMD,uchar Attribc);
0002 ; void InitLcd(void);
0002 ; void Display(uchar dd);
0002 ; void DisplayOneChar(uchar x,uchar y,uchar Wdata);
0002 ; void ePutstr(uchar x,uchar y,uchar const *ptr);
0002 ; //******************************************
0002 ; void main(void)
0002 ; {
0002 .dbline 33
0002 ; Delay_nms(400);
0002 00E9 ldi R16,400
0004 11E0 ldi R17,1
0006 E2D0 xcall _Delay_nms
0008 .dbline 34
0008 ; DDRA=0xff;PORTA=0x00;
0008 8FEF ldi R24,255
000A 8ABB out 0x1a,R24
000C .dbline 34
000C 2224 clr R2
000E 2BBA out 0x1b,R2
0010 .dbline 35
0010 ; DDRB=0xff;PORTB=0x00;
0010 87BB out 0x17,R24
0012 .dbline 35
0012 28BA out 0x18,R2
0014 .dbline 36
0014 ; InitLcd();
0014 79D0 xcall _InitLcd
0016 2AC0 xjmp L3
0018 L2:
0018 .dbline 39
0018 .dbline 40
0018 21E0 ldi R18,1
001A 01E0 ldi R16,1
001C 97D0 xcall _LcdWriteCommand
001E .dbline 41
001E 21E0 ldi R18,1
0020 0CE0 ldi R16,12
0022 94D0 xcall _LcdWriteCommand
0024 .dbline 42
0024 81E4 ldi R24,65
0026 8883 std y+0,R24
0028 21E0 ldi R18,1
002A 0027 clr R16
002C 61D0 xcall _DisplayOneChar
002E .dbline 43
002E 80E0 ldi R24,<_str0
0030 90E0 ldi R25,>_str0
0032 9983 std y+1,R25
0034 8883 std y+0,R24
0036 2227 clr R18
0038 0027 clr R16
003A 1BD0 xcall _ePutstr
003C .dbline 44
003C 00ED ldi R16,2000
003E 17E0 ldi R17,7
0040 C5D0 xcall _Delay_nms
0042 .dbline 45
0042 21E0 ldi R18,1
0044 01E0 ldi R16,1
0046 82D0 xcall _LcdWriteCommand
0048 .dbline 46
0048 21E0 ldi R18,1
004A 0CE0 ldi R16,12
004C 7FD0 xcall _LcdWriteCommand
004E .dbline 47
004E 82E4 ldi R24,66
0050 8883 std y+0,R24
0052 2227 clr R18
0054 08E0 ldi R16,8
0056 4CD0 xcall _DisplayOneChar
0058 .dbline 48
0058 80E0 ldi R24,<_str1
005A 90E0 ldi R25,>_str1
005C 9983 std y+1,R25
005E 8883 std y+0,R24
0060 21E0 ldi R18,1
0062 0027 clr R16
0064 06D0 xcall _ePutstr
0066 .dbline 49
0066 00ED ldi R16,2000
0068 17E0 ldi R17,7
006A B0D0 xcall _Delay_nms
006C .dbline 50
006C L3:
006C .dbline 38
006C D5CF xjmp L2
006E X0:
006E .dbline -2
006E L1:
006E 2296 adiw R28,2
0070 .dbline 0 ; func end
0070 0895 ret
0072 .dbend
0072 .dbfunc e ePutstr _ePutstr fV
0072 ; l -> R20
0072 ; i -> R22
0072 ; ptr -> R10,R11
0072 ; y -> R12
0072 ; x -> R14
.even
0072 _ePutstr::
0072 0E940000 xcall push_gset5
0076 C22E mov R12,R18
0078 E02E mov R14,R16
007A 2197 sbiw R28,1
007C AB84 ldd R10,y+11
007E BC84 ldd R11,y+12
0080 .dbline -1
0080 .dbline 54
0080 ; /********************************************/
0080 ; while(1)
0080 ; {
0080 ; LcdWriteCommand(0x01,1);
0080 ; LcdWriteCommand(0x0c,1);
0080 ; DisplayOneChar(0,1,0x41);
0080 ; ePutstr(0,0,str0);
0080 ; Delay_nms(2000);
0080 ; LcdWriteCommand(0x01,1);
0080 ; LcdWriteCommand(0x0c,1);
0080 ; DisplayOneChar(8,0,0x42);
0080 ; ePutstr(0,1,str1);
0080 ; Delay_nms(2000);
0080 ; }
0080 ; }
0080 ; //**********************显示指定座标的一串字符子函数**************
0080 ; void ePutstr(uchar x,uchar y,uchar const *ptr)
0080 ; {
0080 .dbline 55
0080 ; uchar i,l=0;
0080 4427 clr R20
0082 01C0 xjmp L7
0084 L6:
0084 .dbline 56
0084 .dbline 56
0084 4395 inc R20
0086 .dbline 56
0086 L7:
0086 .dbline 56
0086 ; while(ptr[l]>31){l++;}
0086 E42F mov R30,R20
0088 FF27 clr R31
008A EA0D add R30,R10
008C FB1D adc R31,R11
008E E491 lpm R30,Z
0090 8FE1 ldi R24,31
0092 8E17 cp R24,R30
0094 B8F3 brlo L6
0096 .dbline 57
0096 6627 clr R22
0098 14C0 xjmp L12
009A L9:
009A .dbline 57
009A ; for(i=0;i<l;i++){
009A .dbline 58
009A ; DisplayOneChar(x++,y,ptr[i]);
009A E62F mov R30,R22
009C FF27 clr R31
009E EA0D add R30,R10
00A0 FB1D adc R31,R11
00A2 E491 lpm R30,Z
00A4 E883 std y+0,R30
00A6 2C2D mov R18,R12
00A8 2E2C mov R2,R14
00AA 822D mov R24,R2
00AC 8F5F subi R24,255 ; addi 1
00AE E82E mov R14,R24
00B0 022D mov R16,R2
00B2 1ED0 xcall _DisplayOneChar
00B4 .dbline 59
00B4 ; if(x==16){
00B4 8E2D mov R24,R14
00B6 8031 cpi R24,16
00B8 19F4 brne L13
00BA .dbline 59
00BA .dbline 60
00BA ; x=0;y^=1;
00BA EE24 clr R14
00BC .dbline 60
00BC 81E0 ldi R24,1
00BE C826 eor R12,R24
00C0 .dbline 61
00C0 ; }
00C0 L13:
00C0 .dbline 62
00C0 L10:
00C0 .dbline 57
00C0 6395 inc R22
00C2 L12:
00C2 .dbline 57
00C2 6417 cp R22,R20
00C4 50F3 brlo L9
00C6 .dbline -2
00C6 L5:
00C6 2196 adiw R28,1
00C8 0E940000 xcall pop_gset5
00CC .dbline 0 ; func end
00CC 0895 ret
00CE .dbsym r l 20 c
00CE .dbsym r i 22 c
00CE .dbsym r ptr 10 pkc
00CE .dbsym r y 12 c
00CE .dbsym r x 14 c
00CE .dbend
00CE .dbfunc e LocateXY _LocateXY fV
00CE ; temp -> R20
00CE ; posy -> R22
00CE ; posx -> R10
.even
00CE _LocateXY::
00CE 0E940000 xcall push_gset3
00D2 622F mov R22,R18
00D4 A02E mov R10,R16
00D6 .dbline -1
00D6 .dbline 66
00D6 ; }
00D6 ; }
00D6 ; //*******************显示光标定位子函数******************
00D6 ; void LocateXY(char posx,char posy)
00D6 ; {
00D6 .dbline 68
00D6 ; uchar temp;
00D6 ; temp&=0x7f;
00D6 4F77 andi R20,127
00D8 .dbline 69
00D8 ; temp=posx&0x0f;
00D8 4A2D mov R20,R10
00DA 4F70 andi R20,15
00DC .dbline 70
00DC ; posy&=0x01;
00DC 6170 andi R22,1
00DE .dbline 71
00DE ; if(posy)temp|=0x40;
00DE 09F0 breq L16
00E0 .dbline 71
00E0 4064 ori R20,64
00E2 L16:
00E2 .dbline 72
00E2 ; temp|=0x80;
00E2 4068 ori R20,128
00E4 .dbline 73
00E4 ; LcdWriteCommand(temp,0);
00E4 2227 clr R18
00E6 042F mov R16,R20
00E8 31D0 xcall _LcdWriteCommand
00EA .dbline -2
00EA L15:
00EA 0E940000 xcall pop_gset3
00EE .dbline 0 ; func end
00EE 0895 ret
00F0 .dbsym r temp 20 c
00F0 .dbsym r posy 22 c
00F0 .dbsym r posx 10 c
00F0 .dbend
00F0 .dbfunc e DisplayOneChar _DisplayOneChar fV
00F0 ; Wdata -> y+4
00F0 ; y -> R22
00F0 ; x -> R20
.even
00F0 _DisplayOneChar::
00F0 0E940000 xcall push_gset2
00F4 622F mov R22,R18
00F6 402F mov R20,R16
00F8 .dbline -1
00F8 .dbline 77
00F8 ; }
00F8 ; //*******************显示指定座标的一个字符子函数*******************
00F8 ; void DisplayOneChar(uchar x,uchar y,uchar Wdata)
00F8 ; {
00F8 .dbline 78
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -