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

📄 display.lis

📁 用ICC编写的程序包括SPI
💻 LIS
字号:
                        .module Display.c
                        .area text(rom, con, rel)
 0000                   .dbfile F:\IccAvr_Pro\Display.c
 0000                   .dbfunc e display _display fV
 0000           ;    DispContent -> R20,R21
 0000           ;              i -> R22
 0000           ;           gate -> R10
 0000           ;        content -> R12,R13
                        .even
 0000           _display::
 0000 0E940000          xcall push_gset5
 0004 A22E              mov R10,R18
 0006 6801              movw R12,R16
 0008                   .dbline -1
 0008                   .dbline 7
 0008           ; #include <iom16v.h>
 0008           ; #include <macros.h>
 0008           ; 
 0008           ; #include "Display.h"
 0008           ; 
 0008           ; void display(unsigned int content,unsigned char gate)
 0008           ; {      
 0008                   .dbline 8
 0008           ;       unsigned int DispContent=0;
 0008 4427              clr R20
 000A 5527              clr R21
 000C                   .dbline 10
 000C           ;       unsigned char i;
 000C           ;       for(i=0;i<4;i++)                                                                 //gain the BCD code of the number
 000C 6627              clr R22
 000E 1CC0              xjmp L5
 0010           L2:
 0010                   .dbline 11
 0010                   .dbline 12
 0010 1A01              movw R2,R20
 0012 3694              lsr R3
 0014 2794              ror R2
 0016 3694              lsr R3
 0018 2794              ror R2
 001A 3694              lsr R3
 001C 2794              ror R2
 001E 3694              lsr R3
 0020 2794              ror R2
 0022 A101              movw R20,R2
 0024                   .dbline 13
 0024 2AE0              ldi R18,10
 0026 30E0              ldi R19,0
 0028 8601              movw R16,R12
 002A 0E940000          xcall mod16u
 002E 2CE0              ldi R18,12
 0030 30E0              ldi R19,0
 0032 0E940000          xcall lsl16
 0036 402B              or R20,R16
 0038 512B              or R21,R17
 003A                   .dbline 14
 003A 2AE0              ldi R18,10
 003C 30E0              ldi R19,0
 003E 8601              movw R16,R12
 0040 0E940000          xcall div16u
 0044 6801              movw R12,R16
 0046                   .dbline 15
 0046           L3:
 0046                   .dbline 10
 0046 6395              inc R22
 0048           L5:
 0048                   .dbline 10
 0048 6430              cpi R22,4
 004A 10F3              brlo L2
 004C                   .dbline 17
 004C           ;               {
 004C           ;                DispContent>>=4;
 004C           ;                DispContent|=(content%10)<<12;
 004C           ;                content=content/10;
 004C           ;                }
 004C           ;       
 004C           ;        switch(gate)
 004C EA2C              mov R14,R10
 004E FF24              clr R15
 0050 EE20              tst R14
 0052 11F4              brne X0
 0054 FF20              tst R15
 0056 71F0              breq L9
 0058           X0:
 0058 C701              movw R24,R14
 005A 8130              cpi R24,1
 005C E0E0              ldi R30,0
 005E 9E07              cpc R25,R30
 0060 59F0              breq L10
 0062 8230              cpi R24,2
 0064 E0E0              ldi R30,0
 0066 9E07              cpc R25,R30
 0068 49F0              breq L11
 006A 8330              cpi R24,3
 006C E0E0              ldi R30,0
 006E 9E07              cpc R25,R30
 0070 39F0              breq L12
 0072 08C0              xjmp L6
 0074           X1:
 0074                   .dbline 18
 0074           ;               {
 0074           L9:
 0074                   .dbline 19
 0074           ;               case 0: PORTB&=~BIT(Gate0);break;                        //Open the gate 
 0074 C498              cbi 0x18,4
 0076                   .dbline 19
 0076 09C0              xjmp L7
 0078           L10:
 0078                   .dbline 20
 0078           ;               case 1: PORTB&=~BIT(Gate1);break;
 0078 C598              cbi 0x18,5
 007A                   .dbline 20
 007A 07C0              xjmp L7
 007C           L11:
 007C                   .dbline 21
 007C           ;               case 2: PORTB&=~BIT(Gate2);break;
 007C C698              cbi 0x18,6
 007E                   .dbline 21
 007E 05C0              xjmp L7
 0080           L12:
 0080                   .dbline 22
 0080           ;               case 3: PORTB&=~BIT(Gate3);break;
 0080 C798              cbi 0x18,7
 0082                   .dbline 22
 0082 03C0              xjmp L7
 0084           L6:
 0084                   .dbline 23
 0084           ;               default:  PORTB|=0xF0;break;
 0084 88B3              in R24,0x18
 0086 806F              ori R24,240
 0088 88BB              out 0x18,R24
 008A                   .dbline 23
 008A           L7:
 008A                   .dbline 25
 008A           ;               }
 008A           ;               for (i=0;i<=15;i++)                                                      //Send the number by serial
 008A 6627              clr R22
 008C 11C0              xjmp L16
 008E           L13:
 008E                   .dbline 26
 008E           ;                       {
 008E                   .dbline 27
 008E           ;                        PORTC|=BIT(DispClk);
 008E AE9A              sbi 0x15,6
 0090                   .dbline 28
 0090           ;                        NOP();
 0090 0000              nop
 0092                   .dbline 29
 0092           ;                        NOP();
 0092 0000              nop
 0094                   .dbline 30
 0094           ;                        if(DispContent&0x01)
 0094 40FF              sbrs R20,0
 0096 02C0              rjmp L17
 0098                   .dbline 31
 0098           ;                                PORTC|=BIT(DispData);
 0098 AF9A              sbi 0x15,7
 009A 01C0              xjmp L18
 009C           L17:
 009C                   .dbline 33
 009C           ;                        else
 009C           ;                                PORTC&=~BIT(DispData);
 009C AF98              cbi 0x15,7
 009E           L18:
 009E                   .dbline 34
 009E 0000              nop
 00A0                   .dbline 35
 00A0 0000              nop
 00A2                   .dbline 36
 00A2 0000              nop
 00A4                   .dbline 37
 00A4 0000              nop
 00A6                   .dbline 38
 00A6 8894              clc
 00A8                   .dbline 39
 00A8 5695              lsr R21
 00AA 4795              ror R20
 00AC                   .dbline 40
 00AC AE98              cbi 0x15,6
 00AE                   .dbline 41
 00AE           L14:
 00AE                   .dbline 25
 00AE 6395              inc R22
 00B0           L16:
 00B0                   .dbline 25
 00B0 8FE0              ldi R24,15
 00B2 8617              cp R24,R22
 00B4 60F7              brsh L13
 00B6                   .dbline 42
 00B6           ;                        NOP();
 00B6           ;                        NOP();
 00B6           ;                        NOP();
 00B6           ;                        NOP();
 00B6           ;                        asm("clc");
 00B6           ;                        DispContent>>=1;
 00B6           ;                        PORTC&=~BIT(DispClk);
 00B6           ;                        }
 00B6           ;               PORTB|=0xF0;
 00B6 88B3              in R24,0x18
 00B8 806F              ori R24,240
 00BA 88BB              out 0x18,R24
 00BC                   .dbline -2
 00BC                   .dbline 43
 00BC           ; }      
 00BC           L1:
 00BC 0E940000          xcall pop_gset5
 00C0                   .dbline 0 ; func end
 00C0 0895              ret
 00C2                   .dbsym r DispContent 20 i
 00C2                   .dbsym r i 22 c
 00C2                   .dbsym r gate 10 c
 00C2                   .dbsym r content 12 i
 00C2                   .dbend
 00C2                   .dbfunc e disp_init _disp_init fV
                        .even
 00C2           _disp_init::
 00C2                   .dbline -1
 00C2                   .dbline 46
 00C2           ; 
 00C2           ; void disp_init(void)                                                           //Set all control signal high
 00C2           ; {
 00C2                   .dbline 47
 00C2           ;        DDRB|=0xFF;
 00C2 87B3              in R24,0x17
 00C4 8F6F              ori R24,255
 00C6 87BB              out 0x17,R24
 00C8                   .dbline 48
 00C8           ;        PORTB|=0xF0;
 00C8 88B3              in R24,0x18
 00CA 806F              ori R24,240
 00CC 88BB              out 0x18,R24
 00CE                   .dbline 49
 00CE           ;        PORTC|=BIT(DispData)|BIT(DispClk);
 00CE 85B3              in R24,0x15
 00D0 806C              ori R24,192
 00D2 85BB              out 0x15,R24
 00D4                   .dbline 50
 00D4           ;        DDRC|=BIT(DispData)|BIT(DispClk);
 00D4 84B3              in R24,0x14
 00D6 806C              ori R24,192
 00D8 84BB              out 0x14,R24
 00DA                   .dbline -2
 00DA                   .dbline 51
 00DA           ; }
 00DA           L19:
 00DA                   .dbline 0 ; func end
 00DA 0895              ret
 00DC                   .dbend

⌨️ 快捷键说明

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