📄 ac15-1.lis
字号:
.module ac15-1.c
.area lit(rom, con, rel)
0000 _str0::
0000 5772697465203A2000 .byte 'W,'r,'i,'t,'e,32,58,32,0
0009 .dbfile d:\MYDOCU~1\ac15-1\ac15-1.c
0009 .dbsym e str0 _str0 A[9:9]kc
0009 _str1::
0009 52656164203A2000 .byte 'R,'e,'a,'d,32,58,32,0
0011 .dbsym e str1 _str1 A[8:8]kc
.area text(rom, con, rel)
0000 .dbfile d:\MYDOCU~1\ac15-1\ac15-1.c
0000 .dbfunc e ePutstr _ePutstr fV
0000 ; l -> R20
0000 ; i -> R22
0000 ; ptr -> R10,R11
0000 ; y -> R12
0000 ; x -> R14
.even
0000 _ePutstr::
0000 0E940000 xcall push_gset5
0004 C22E mov R12,R18
0006 E02E mov R14,R16
0008 2197 sbiw R28,1
000A AB84 ldd R10,y+11
000C BC84 ldd R11,y+12
000E .dbline -1
000E .dbline 39
000E ; #include <iom16v.h>
000E ; #include <macros.h>
000E ; //-----------------------------------------------
000E ; #define uchar unsigned char
000E ; #define uint unsigned int
000E ; //-------------------引脚电平的宏定义---------
000E ; #define LCM_RS_1 PORTB|=BIT(PB0)
000E ; #define LCM_RS_0 PORTB&=~BIT(PB0)
000E ; #define LCM_RW_1 PORTB|=BIT(PB1)
000E ; #define LCM_RW_0 PORTB&=~BIT(PB1)
000E ; #define LCM_EN_1 PORTB|=BIT(PB2)
000E ; #define LCM_EN_0 PORTB&=~BIT(PB2)
000E ; #define SCL_1 PORTC|=BIT(PC0)
000E ; #define SCL_0 PORTC&=~BIT(PC0)
000E ; #define SDA_1 PORTC|=BIT(PC1)
000E ; #define SDA_0 PORTC&=~BIT(PC1)
000E ; //======================================
000E ; #define PIN_SDA (PINC&0x02)
000E ; #define DataPort PORTA
000E ; #define Busy 0x80
000E ; #define xtal 8
000E ; #define Some_NOP(); _NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();_NOP();
000E ; //=====================================
000E ; const uchar str0[]={"Write : "};//待显字符串
000E ; const uchar str1[]={"Read : "};//待显字符串
000E ; //========函数声明=========
000E ; void Delay_1ms(void);
000E ; void Delay_nms(uint n);
000E ; void WaitForEnable(void);
000E ; void LcdWriteData(uchar W);
000E ; void LcdWriteCommand(uchar CMD,uchar Attribc);
000E ; void InitLcd(void);
000E ; void Display(uchar dd);
000E ; void DisplayOneChar(uchar x,uchar y,uchar Wdata);
000E ; void ePutstr(uchar x,uchar y,uchar const *ptr);
000E ; void port_init(void);
000E ; //**********************显示指定座标的一串字符子函数**************
000E ; void ePutstr(uchar x,uchar y,uchar const *ptr)
000E ; {
000E .dbline 40
000E ; uchar i,l=0;
000E 4427 clr R20
0010 01C0 xjmp L3
0012 L2:
0012 .dbline 41
0012 .dbline 41
0012 4395 inc R20
0014 .dbline 41
0014 L3:
0014 .dbline 41
0014 ; while(ptr[l]>31){l++;}
0014 E42F mov R30,R20
0016 FF27 clr R31
0018 EA0D add R30,R10
001A FB1D adc R31,R11
001C E491 lpm R30,Z
001E 8FE1 ldi R24,31
0020 8E17 cp R24,R30
0022 B8F3 brlo L2
0024 .dbline 42
0024 6627 clr R22
0026 14C0 xjmp L8
0028 L5:
0028 .dbline 42
0028 ; for(i=0;i<l;i++){
0028 .dbline 43
0028 ; DisplayOneChar(x++,y,ptr[i]);
0028 E62F mov R30,R22
002A FF27 clr R31
002C EA0D add R30,R10
002E FB1D adc R31,R11
0030 E491 lpm R30,Z
0032 E883 std y+0,R30
0034 2C2D mov R18,R12
0036 2E2C mov R2,R14
0038 822D mov R24,R2
003A 8F5F subi R24,255 ; addi 1
003C E82E mov R14,R24
003E 022D mov R16,R2
0040 1ED0 xcall _DisplayOneChar
0042 .dbline 44
0042 ; if(x==16){
0042 8E2D mov R24,R14
0044 8031 cpi R24,16
0046 19F4 brne L9
0048 .dbline 44
0048 .dbline 45
0048 ; x=0;y^=1;
0048 EE24 clr R14
004A .dbline 45
004A 81E0 ldi R24,1
004C C826 eor R12,R24
004E .dbline 46
004E ; }
004E L9:
004E .dbline 47
004E L6:
004E .dbline 42
004E 6395 inc R22
0050 L8:
0050 .dbline 42
0050 6417 cp R22,R20
0052 50F3 brlo L5
0054 .dbline -2
0054 L1:
0054 2196 adiw R28,1
0056 0E940000 xcall pop_gset5
005A .dbline 0 ; func end
005A 0895 ret
005C .dbsym r l 20 c
005C .dbsym r i 22 c
005C .dbsym r ptr 10 pkc
005C .dbsym r y 12 c
005C .dbsym r x 14 c
005C .dbend
005C .dbfunc e LocateXY _LocateXY fV
005C ; temp -> R20
005C ; posy -> R22
005C ; posx -> R10
.even
005C _LocateXY::
005C 0E940000 xcall push_gset3
0060 622F mov R22,R18
0062 A02E mov R10,R16
0064 .dbline -1
0064 .dbline 51
0064 ; }
0064 ; }
0064 ; //*******************显示光标定位子函数******************
0064 ; void LocateXY(char posx,char posy)
0064 ; {
0064 .dbline 53
0064 ; uchar temp;
0064 ; temp&=0x7f;
0064 4F77 andi R20,127
0066 .dbline 54
0066 ; temp=posx&0x0f;
0066 4A2D mov R20,R10
0068 4F70 andi R20,15
006A .dbline 55
006A ; posy&=0x01;
006A 6170 andi R22,1
006C .dbline 56
006C ; if(posy)temp|=0x40;
006C 09F0 breq L12
006E .dbline 56
006E 4064 ori R20,64
0070 L12:
0070 .dbline 57
0070 ; temp|=0x80;
0070 4068 ori R20,128
0072 .dbline 58
0072 ; LcdWriteCommand(temp,0);
0072 2227 clr R18
0074 042F mov R16,R20
0076 31D0 xcall _LcdWriteCommand
0078 .dbline -2
0078 L11:
0078 0E940000 xcall pop_gset3
007C .dbline 0 ; func end
007C 0895 ret
007E .dbsym r temp 20 c
007E .dbsym r posy 22 c
007E .dbsym r posx 10 c
007E .dbend
007E .dbfunc e DisplayOneChar _DisplayOneChar fV
007E ; Wdata -> y+4
007E ; y -> R22
007E ; x -> R20
.even
007E _DisplayOneChar::
007E 0E940000 xcall push_gset2
0082 622F mov R22,R18
0084 402F mov R20,R16
0086 .dbline -1
0086 .dbline 62
0086 ; }
0086 ; //*******************显示指定座标的一个字符子函数*******************
0086 ; void DisplayOneChar(uchar x,uchar y,uchar Wdata)
0086 ; {
0086 .dbline 63
0086 ; LocateXY(x,y);
0086 262F mov R18,R22
0088 042F mov R16,R20
008A E8DF xcall _LocateXY
008C .dbline 64
008C ; LcdWriteData(Wdata);
008C 0C81 ldd R16,y+4
008E 38D0 xcall _LcdWriteData
0090 .dbline -2
0090 L14:
0090 0E940000 xcall pop_gset2
0094 .dbline 0 ; func end
0094 0895 ret
0096 .dbsym l Wdata 4 c
0096 .dbsym r y 22 c
0096 .dbsym r x 20 c
0096 .dbend
0096 .dbfunc e InitLcd _InitLcd fV
.even
0096 _InitLcd::
0096 .dbline -1
0096 .dbline 68
0096 ; }
0096 ; //*******************LCD初始化子函数*********************
0096 ; void InitLcd(void)
0096 ; {
0096 .dbline 69
0096 ; LcdWriteCommand(0x38,0);
0096 2227 clr R18
0098 08E3 ldi R16,56
009A 1FD0 xcall _LcdWriteCommand
009C .dbline 70
009C ; Delay_nms(5);
009C 05E0 ldi R16,5
009E 10E0 ldi R17,0
00A0 5CD0 xcall _Delay_nms
00A2 .dbline 71
00A2 ; LcdWriteCommand(0x38,0);
00A2 2227 clr R18
00A4 08E3 ldi R16,56
00A6 19D0 xcall _LcdWriteCommand
00A8 .dbline 72
00A8 ; Delay_nms(5);
00A8 05E0 ldi R16,5
00AA 10E0 ldi R17,0
00AC 56D0 xcall _Delay_nms
00AE .dbline 73
00AE ; LcdWriteCommand(0x38,0);
00AE 2227 clr R18
00B0 08E3 ldi R16,56
00B2 13D0 xcall _LcdWriteCommand
00B4 .dbline 74
00B4 ; Delay_nms(5);
00B4 05E0 ldi R16,5
00B6 10E0 ldi R17,0
00B8 50D0 xcall _Delay_nms
00BA .dbline 75
00BA ; LcdWriteCommand(0x38,1);
00BA 21E0 ldi R18,1
00BC 08E3 ldi R16,56
00BE 0DD0 xcall _LcdWriteCommand
00C0 .dbline 76
00C0 ; LcdWriteCommand(0x08,1);
00C0 21E0 ldi R18,1
00C2 08E0 ldi R16,8
00C4 0AD0 xcall _LcdWriteCommand
00C6 .dbline 77
00C6 ; LcdWriteCommand(0x01,1);
00C6 21E0 ldi R18,1
00C8 01E0 ldi R16,1
00CA 07D0 xcall _LcdWriteCommand
00CC .dbline 78
00CC ; LcdWriteCommand(0x06,1);
00CC 21E0 ldi R18,1
00CE 06E0 ldi R16,6
00D0 04D0 xcall _LcdWriteCommand
00D2 .dbline 79
00D2 ; LcdWriteCommand(0x0c,1);
00D2 21E0 ldi R18,1
00D4 0CE0 ldi R16,12
00D6 01D0 xcall _LcdWriteCommand
00D8 .dbline -2
00D8 L15:
00D8 .dbline 0 ; func end
00D8 0895 ret
00DA .dbend
00DA .dbfunc e LcdWriteCommand _LcdWriteCommand fV
00DA ; Attribc -> R22
00DA ; CMD -> R20
.even
00DA _LcdWriteCommand::
00DA 0E940000 xcall push_gset2
00DE 622F mov R22,R18
00E0 402F mov R20,R16
00E2 .dbline -1
00E2 .dbline 83
00E2 ; }
00E2 ; //********************写命令到LCM子函数********************
00E2 ; void LcdWriteCommand(uchar CMD,uchar Attribc)
00E2 ; {
00E2 .dbline 84
00E2 ; if(Attribc)WaitForEnable();
00E2 6623 tst R22
00E4 09F0 breq L17
00E6 .dbline 84
00E6 1CD0 xcall _WaitForEnable
00E8 L17:
00E8 .dbline 85
00E8 ; LCM_RS_0;LCM_RW_0;_NOP();
00E8 C098 cbi 0x18,0
00EA .dbline 85
00EA C198 cbi 0x18,1
00EC .dbline 85
00EC 0000 nop
00EE .dbline 86
00EE ; DataPort=CMD;_NOP();
00EE 4BBB out 0x1b,R20
00F0 .dbline 86
00F0 0000 nop
00F2 .dbline 87
00F2 ; LCM_EN_1;_NOP();_NOP();LCM_EN_0;
00F2 C29A sbi 0x18,2
00F4 .dbline 87
00F4 0000 nop
00F6 .dbline 87
00F6 0000 nop
00F8 .dbline 87
00F8 C298 cbi 0x18,2
00FA .dbline -2
00FA L16:
00FA 0E940000 xcall pop_gset2
00FE .dbline 0 ; func end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -