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

📄 main.lis

📁 ATmega128的GPS例子
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 01A2           ;       #define LCD_CS  PC3
 01A2           ; 
 01A2           ; #define LCD_CS_H LCD_PORT2 |= BIT(LCD_CS)
 01A2           ; #define LCD_CS_L LCD_PORT2 &=~ BIT(LCD_CS)
 01A2           ; #define LCD_STD_H LCD_PORT1 |= BIT(LCD_STD)
 01A2           ; #define LCD_STD_L LCD_PORT1 &=~ BIT(LCD_STD)
 01A2           ; #define LCD_SCLK_H LCD_PORT1 |= BIT(LCD_SCLK)
 01A2           ; #define LCD_SCLK_L LCD_PORT1 &=~ BIT(LCD_SCLK)
 01A2           ; 
 01A2           ; 
 01A2           ; 
 01A2           ; void Send_8bit(Word x);//串行发送8位数据
 01A2           ; void Lcd_Write(Byte start,Byte data);//模块写入子程序
 01A2           ; void Lcd_Reset(void);//模块复位子程序
 01A2           ; void Hzk_Dis_Words(Byte ypos,Byte xpos,char *lcd_pointer);//xpos为列数,ypos为行数,num字符串长度
 01A2           ; void Hzk_Dis_Data(Byte ypos,Byte xpos,Long data,Byte num);//xpos为列数,ypos为行数,num字符串长度               
 01A2           ; void Hzk_Dis_Char(Byte ypos,Byte xpos,char *lcd_pointer,Byte num);//xpos为列数,ypos为行数,num字符串长度                                                                       
 01A2           ; void Hzk_Dis_Clr(void);//汉字显示清屏
 01A2           ; 
 01A2           ; Long lcd_data1;
 01A2           ; Long lcd_data2;
 01A2           ; 
 01A2           ; /****************发送汉字子程序******************
 01A2           ; ** xpos为列数,ypos为行数
 01A2           ; **lcd_pointer为字符串首地址
 01A2           ; *********************************************************/
 01A2           ; void Hzk_Dis_Words(Byte ypos,Byte xpos,char *lcd_pointer)//xpos为列数,ypos为行数,num字符串长度                                                                        
 01A2           ; {
 01A2                   .dbline 46
 01A2           ;       Byte i=0,ram_address;//ram_address:首地址
 01A2 4427              clr R20
 01A4 01C0              xjmp L44
 01A6           L43:
 01A6                   .dbline 49
 01A6           ;       //首先判断字符串得长度
 01A6           ;       while(*(lcd_pointer+i) != '\0')//字符串长度
 01A6           ;       {
 01A6                   .dbline 50
 01A6           ;               i++;
 01A6 4395              inc R20
 01A8                   .dbline 51
 01A8           ;       }//i=字符串长度 
 01A8           L44:
 01A8                   .dbline 48
 01A8 E42F              mov R30,R20
 01AA FF27              clr R31
 01AC E60F              add R30,R22
 01AE F71F              adc R31,R23
 01B0 2080              ldd R2,z+0
 01B2 2220              tst R2
 01B4 C1F7              brne L43
 01B6           X10:
 01B6                   .dbline 52
 01B6           ;       if(i>15)
 01B6 8FE0              ldi R24,15
 01B8 8417              cp R24,R20
 01BA 08F4              brsh L46
 01BC           X11:
 01BC                   .dbline 53
 01BC           ;       {
 01BC                   .dbline 54
 01BC           ;               i=15;
 01BC 4FE0              ldi R20,15
 01BE                   .dbline 55
 01BE           ;       }
 01BE           L46:
 01BE                   .dbline 56
 01BE           ;       if(ypos==1)
 01BE 8E2D              mov R24,R14
 01C0 8130              cpi R24,1
 01C2 29F4              brne L48
 01C4           X12:
 01C4                   .dbline 57
 01C4           ;       {
 01C4                   .dbline 58
 01C4           ;               ram_address = 0x80+xpos-1;
 01C4 8C2D              mov R24,R12
 01C6 8058              subi R24,128    ; addi 128
 01C8 8150              subi R24,1
 01CA A82E              mov R10,R24
 01CC                   .dbline 59
 01CC           ;       }
 01CC 07C0              xjmp L49
 01CE           L48:
 01CE                   .dbline 60
 01CE           ;       else if(ypos==2)
 01CE 8E2D              mov R24,R14
 01D0 8230              cpi R24,2
 01D2 21F4              brne L50
 01D4           X13:
 01D4                   .dbline 61
 01D4           ;       {
 01D4                   .dbline 62
 01D4           ;               ram_address = 0x90+xpos-1;
 01D4 8C2D              mov R24,R12
 01D6 8057              subi R24,112    ; addi 144
 01D8 8150              subi R24,1
 01DA A82E              mov R10,R24
 01DC                   .dbline 63
 01DC           ;       }
 01DC           L50:
 01DC           L49:
 01DC                   .dbline 64
 01DC           ;       Lcd_Write(0xf8,ram_address);
 01DC 2A2D              mov R18,R10
 01DE 08EF              ldi R16,248
 01E0 A9D0              xcall _Lcd_Write
 01E2                   .dbline 65
 01E2           ;       for(;i>0;i--)
 01E2 07C0              xjmp L55
 01E4           L52:
 01E4                   .dbline 66
 01E4           ;       {
 01E4                   .dbline 67
 01E4           ;               Lcd_Write(0xfa,*lcd_pointer);   
 01E4 FB01              movw R30,R22
 01E6 2081              ldd R18,z+0
 01E8 0AEF              ldi R16,250
 01EA A4D0              xcall _Lcd_Write
 01EC                   .dbline 68
 01EC           ;               lcd_pointer++;
 01EC 6F5F              subi R22,255  ; offset = 1
 01EE 7F4F              sbci R23,255
 01F0                   .dbline 69
 01F0           ;       }       
 01F0           L53:
 01F0                   .dbline 65
 01F0 4A95              dec R20
 01F2           L55:
 01F2                   .dbline 65
 01F2 80E0              ldi R24,0
 01F4 8417              cp R24,R20
 01F6 B0F3              brlo L52
 01F8           X14:
 01F8                   .dbline -2
 01F8           L42:
 01F8                   .dbline 0 ; func end
 01F8 0C940000          xjmp pop_xgsetF0FC
 01FC                   .dbsym r ram_address 10 c
 01FC                   .dbsym r i 20 c
 01FC                   .dbsym r lcd_pointer 22 pc
 01FC                   .dbsym r xpos 12 c
 01FC                   .dbsym r ypos 14 c
 01FC                   .dbend
 01FC                   .dbfunc e Hzk_Dis_Char _Hzk_Dis_Char fV
 01FC           ;    ram_address -> R22
 01FC           ;              i -> R10
 01FC           ;            num -> y+12
 01FC           ;    lcd_pointer -> R20,R21
 01FC           ;           xpos -> R12
 01FC           ;           ypos -> R14
                        .even
 01FC           _Hzk_Dis_Char::
 01FC 0E940000          xcall push_xgsetF0FC
 0200 C22E              mov R12,R18
 0202 E02E              mov R14,R16
 0204 4A85              ldd R20,y+10
 0206 5B85              ldd R21,y+11
 0208                   .dbline -1
 0208                   .dbline 74
 0208           ;       
 0208           ; }
 0208           ; 
 0208           ; void Hzk_Dis_Char(Byte ypos,Byte xpos,char *lcd_pointer,Byte num)//xpos为列数,ypos为行数,num字符串长度                                                                        
 0208           ; {
 0208                   .dbline 75
 0208           ;       Byte i=0,ram_address;//ram_address:首地址
 0208 AA24              clr R10
 020A                   .dbline 76
 020A           ;       if(ypos==1)
 020A 8E2D              mov R24,R14
 020C 8130              cpi R24,1
 020E 21F4              brne L57
 0210           X15:
 0210                   .dbline 77
 0210           ;       {
 0210                   .dbline 78
 0210           ;               ram_address = 0x80+xpos-1;
 0210 6C2D              mov R22,R12
 0212 6058              subi R22,128    ; addi 128
 0214 6150              subi R22,1
 0216                   .dbline 79
 0216           ;       }
 0216 06C0              xjmp L58
 0218           L57:
 0218                   .dbline 80
 0218           ;       else if(ypos==2)
 0218 8E2D              mov R24,R14
 021A 8230              cpi R24,2
 021C 19F4              brne L59
 021E           X16:
 021E                   .dbline 81
 021E           ;       {
 021E                   .dbline 82
 021E           ;               ram_address = 0x90+xpos-1;
 021E 6C2D              mov R22,R12
 0220 6057              subi R22,112    ; addi 144
 0222 6150              subi R22,1
 0224                   .dbline 83
 0224           ;       }
 0224           L59:
 0224           L58:
 0224                   .dbline 84
 0224           ;       Lcd_Write(0xf8,ram_address);
 0224 262F              mov R18,R22
 0226 08EF              ldi R16,248
 0228 85D0              xcall _Lcd_Write
 022A                   .dbline 85
 022A           ;       for(i=0;i<num;i++)
 022A AA24              clr R10
 022C 07C0              xjmp L64
 022E           L61:
 022E                   .dbline 86
 022E           ;       {
 022E                   .dbline 87
 022E           ;               Lcd_Write(0xfa,*lcd_pointer);   
 022E FA01              movw R30,R20
 0230 2081              ldd R18,z+0
 0232 0AEF              ldi R16,250
 0234 7FD0              xcall _Lcd_Write
 0236                   .dbline 88
 0236           ;               lcd_pointer++;
 0236 4F5F              subi R20,255  ; offset = 1
 0238 5F4F              sbci R21,255
 023A                   .dbline 89
 023A           ;       }       
 023A           L62:
 023A                   .dbline 85
 023A A394              inc R10
 023C           L64:
 023C                   .dbline 85
 023C 0C84              ldd R0,y+12
 023E A014              cp R10,R0
 0240 B0F3              brlo L61
 0242           X17:
 0242                   .dbline -2
 0242           L56:
 0242                   .dbline 0 ; func end
 0242 0C940000          xjmp pop_xgsetF0FC
 0246                   .dbsym r ram_address 22 c
 0246                   .dbsym r i 10 c
 0246                   .dbsym l num 12 c
 0246                   .dbsym r lcd_pointer 20 pc
 0246                   .dbsym r xpos 12 c
 0246                   .dbsym r ypos 14 c
 0246                   .dbend
 0246                   .dbfunc e Hzk_Dis_Data _Hzk_Dis_Data fV
 0246           ;    ram_address -> R22
 0246           ;        lcd_buf -> y+0
 0246           ;    lcd_pointer -> R22,R23
 0246           ;              i -> R10
 0246           ;            num -> R20
 0246           ;           data -> y+25
 0246           ;           xpos -> R12
 0246           ;           ypos -> R14
                        .even
 0246           _Hzk_Dis_Data::
 0246 0E940000          xcall push_xgsetF0FC
 024A C22E              mov R12,R18
 024C E02E              mov R14,R16
 024E 2F97              sbiw R28,15
 0250 4D8D              ldd R20,y+29
 0252                   .dbline -1
 0252                   .dbline 99
 0252           ; 
 0252           ; }
 0252           ; 
 0252           ; /****************发送数据子程序******************
 0252           ; ** xpos为列数,ypos为行数
 0252           ; **data为数据
 0252           ; **num数据占用得位数
 0252           ; *********************************************************/
 0252           ; void Hzk_Dis_Data(Byte ypos,Byte xpos,Long data,Byte num)                                                             
 0252           ; {
 0252                   .dbline 100
 0252           ;       Byte i=0,ram_address;//ram_address:首地址
 0252 AA24              clr R10
 0254                   .dbline 103
 0254           ;       Byte lcd_buf[15];
 0254           ;       Byte *lcd_pointer;
 0254           ;       if(num<16)
 0254 4031              cpi R20,16
 0256 08F0              brlo X23
 0258 55C0              xjmp L66
 025A           X23:
 025A           X18:
 025A                   .dbline 104
 025A           ;       {
 025A                   .dbline 105
 025A           ;               for(i=0;i<num;i++)
 025A 36C0              xjmp L71
 025C           L68:
 025C                   .dbline 106
 025C           ;               {
 025C                   .dbline 107
 025C           ;                       lcd_buf[num-i-1]= data%10+0x30;
 025C 8AE0              ldi R24,10
 025E 90E0              ldi R25,0
 0260 A0E0              ldi R26,0
 0262 B0E0              ldi R27,0
 0264 098D              ldd R16,y+25
 0266 1A8D              ldd R17,y+26
 0268 2B8D              ldd R18,y+27
 026A 3C8D              ldd R19,y+28
 026C BA93              st -y,R27
 026E AA93              st -y,R26
 0270 9A93              st -y,R25
 0272 8A93              st -y,R24
 0274 0E940000          xcall mod32u
 0278 1801              movw R2,R16
 027A 2901              movw R4,R18
 027C 80E3              ldi R24,48
 027E 90E0              ldi R25,0
 0280 A0E0              ldi R26,0
 0282 B0E0              ldi R27,0
 0284 280E              add R2,R24
 0286 391E              adc R3,R25
 0288 4A1E              adc R4,R26
 028A 5B1E              adc R5,R27
 028C 3A2C              mov R3,R10
 028E 4424              clr R4
 0290 E42F              mov R30,R20
 0292 FF27              clr R31
 0294 E319              sub R30,R3
 0296 F409              sbc R31,R4
 0298 CE01              movw R24,R28
 029A 0197              sbiw R24,1
 029C E80F              add R30,R24
 029E F91F              adc R31,R25
 02A0 2082              std z+0,R2
 02A2                   .dbline 108
 02A2           ;                       data /= 10;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -