⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ac15-1.lis

📁 AVR学习资料
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .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 + -