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

📄 led_8.lis

📁 16个单片机c语言实验程序
💻 LIS
字号:
                        .module led_8.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\16实验程序\数码管显示1\led_8.c
 0000                   .dbfile E:\16实验程序\数码管显示1\encoder.h
 0000                   .dbfunc e encoder _encoder fc
 0000           ;           code -> R20
 0000           ;            num -> R16
                        .even
 0000           _encoder::
 0000 0E940000          xcall push_xgsetF000
 0004                   .dbline -1
 0004                   .dbline 3
 0004           ; //数码管显示程序
 0004           ; #define uchar unsigned char 
 0004           ; #define uint unsigned int 
 0004                   .dbline 5
 0004           ; #include<iom16v.h>
 0004           ; //7段译码
 0004 602F              mov R22,R16
 0006 7727              clr R23
 0008 6030              cpi R22,0
 000A 6707              cpc R22,R23
 000C 29F1              breq L5
 000E           X0:
 000E 6130              cpi R22,1
 0010 E0E0              ldi R30,0
 0012 7E07              cpc R23,R30
 0014 19F1              breq L6
 0016           X1:
 0016 6230              cpi R22,2
 0018 E0E0              ldi R30,0
 001A 7E07              cpc R23,R30
 001C 09F1              breq L7
 001E           X2:
 001E 6330              cpi R22,3
 0020 E0E0              ldi R30,0
 0022 7E07              cpc R23,R30
 0024 F9F0              breq L8
 0026           X3:
 0026 6430              cpi R22,4
 0028 E0E0              ldi R30,0
 002A 7E07              cpc R23,R30
 002C E9F0              breq L9
 002E           X4:
 002E 6530              cpi R22,5
 0030 E0E0              ldi R30,0
 0032 7E07              cpc R23,R30
 0034 D9F0              breq L10
 0036           X5:
 0036 6630              cpi R22,6
 0038 E0E0              ldi R30,0
 003A 7E07              cpc R23,R30
 003C C9F0              breq L11
 003E           X6:
 003E 6730              cpi R22,7
 0040 E0E0              ldi R30,0
 0042 7E07              cpc R23,R30
 0044 B9F0              breq L12
 0046           X7:
 0046 6830              cpi R22,8
 0048 E0E0              ldi R30,0
 004A 7E07              cpc R23,R30
 004C A9F0              breq L13
 004E           X8:
 004E 6930              cpi R22,9
 0050 E0E0              ldi R30,0
 0052 7E07              cpc R23,R30
 0054 99F0              breq L14
 0056           X9:
 0056 13C0              xjmp L2
 0058           L5:
 0058                   .dbline 8
 0058           ; #include"encoder.h"    
 0058           ; //写74hc595
 0058           ; #include"ch595.h"
 0058 40EC              ldi R20,192
 005A                   .dbline 8
 005A 11C0              xjmp L3
 005C           L6:
 005C                   .dbline 10
 005C           ; 
 005C           ; 
 005C 49EF              ldi R20,249
 005E                   .dbline 10
 005E 0FC0              xjmp L3
 0060           L7:
 0060                   .dbline 12
 0060           ; 
 0060           ; //主函数
 0060 44EA              ldi R20,164
 0062                   .dbline 12
 0062 0DC0              xjmp L3
 0064           L8:
 0064                   .dbline 14
 0064           ; main()
 0064           ; {
 0064 40EB              ldi R20,176
 0066                   .dbline 14
 0066 0BC0              xjmp L3
 0068           L9:
 0068                   .dbline 16
 0068           ; uchar aa,cc=0x0;
 0068           ; uint bb;
 0068 49E9              ldi R20,153
 006A                   .dbline 16
 006A 09C0              xjmp L3
 006C           L10:
 006C                   .dbline 18
 006C           ; DDRA=0xff;      //初始化端口A
 006C           ; PORTA=0xef;
 006C 42E9              ldi R20,146
 006E                   .dbline 18
 006E 07C0              xjmp L3
 0070           L11:
 0070                   .dbline 20
 0070           ; while(1)
 0070           ;      {
 0070 42E8              ldi R20,130
 0072                   .dbline 20
 0072 05C0              xjmp L3
 0074           L12:
 0074                   .dbline 22
 0074           ;        PORTA|=(1<<4);               //74ls138使能
 0074           ;        for(aa=0;aa<=9;aa++)         //循环发送0-9的数字
 0074 48EF              ldi R20,248
 0076                   .dbline 22
 0076 03C0              xjmp L3
 0078           L13:
 0078                   .dbline 24
 0078           ;           {
 0078           ;            sendbyte(aa);            //向74hc595写入数据
 0078 40E8              ldi R20,128
 007A                   .dbline 24
 007A 01C0              xjmp L3
 007C           L14:
 007C                   .dbline 26
 007C           ;                for(bb=0;bb<1600;bb++)   //每个数字扫描2000次,每个数码管200次
 007C           ;                    {
 007C 40E9              ldi R20,144
 007E                   .dbline 26
 007E           L2:
 007E           L3:
 007E                   .dbline 28
 007E           ;                        PORTA&=~cc;          //74hc138依次输出
 007E           ;                        cc=cc+0x20;          //这里可能不好理解,138的ABC在A口的567位,每加0x20就是进一位,加到溢出就回到000;
 007E 042F              mov R16,R20
 0080                   .dbline -2
 0080           L1:
 0080                   .dbline 0 ; func end
 0080 0C940000          xjmp pop_xgsetF000
 0084                   .dbsym r code 20 c
 0084                   .dbsym r num 16 c
 0084                   .dbend
 0084                   .dbfile E:\16实验程序\数码管显示1\ch595.h
 0084                   .dbfunc e s_ms _s_ms fV
 0084           ;              t -> R16,R17
                        .even
 0084           _s_ms::
 0084                   .dbline -1
 0084                   .dbline 8
 0084           ; //ch595的数据输入
 0084           ; #define srclk  1
 0084           ; #define rclk 2
 0084           ; #define ser  3  
 0084           ; 
 0084           ; //延时函数
 0084           ; void s_ms(unsigned int t)
 0084           ; {
 0084                   .dbline 9
 0084           ;     for(;t>1;t--)
 0084 02C0              xjmp L19
 0086           L16:
 0086                   .dbline 10
 0086           ;     {
 0086                   .dbline 11
 0086           ;     }
 0086           L17:
 0086                   .dbline 9
 0086 0150              subi R16,1
 0088 1040              sbci R17,0
 008A           L19:
 008A                   .dbline 9
 008A 81E0              ldi R24,1
 008C 90E0              ldi R25,0
 008E 8017              cp R24,R16
 0090 9107              cpc R25,R17
 0092 C8F3              brlo L16
 0094           X10:
 0094                   .dbline -2
 0094           L15:
 0094                   .dbline 0 ; func end
 0094 0895              ret
 0096                   .dbsym r t 16 i
 0096                   .dbend
 0096                   .dbfunc e sendbyte _sendbyte fV
 0096           ;            tem -> R10
 0096           ;              i -> R22
 0096           ;           byte -> R20
                        .even
 0096           _sendbyte::
 0096 0E940000          xcall push_xgsetF00C
 009A 402F              mov R20,R16
 009C                   .dbline -1
 009C                   .dbline 15
 009C           ; }
 009C           ; //写74hc595函数
 009C           ; void sendbyte(uchar byte)
 009C           ; {    
 009C                   .dbline 17
 009C           ;    uchar i,tem; 
 009C           ;    byte=encoder(byte);       //译码
 009C 042F              mov R16,R20
 009E B0DF              xcall _encoder
 00A0 402F              mov R20,R16
 00A2                   .dbline 18
 00A2           ;    for(i=0;i<8;i++)          
 00A2 6627              clr R22
 00A4 0CC0              xjmp L24
 00A6           L21:
 00A6                   .dbline 19
 00A6           ;         {
 00A6                   .dbline 20
 00A6           ;          PORTA&=~(1<<srclk);    //srclk 清零
 00A6 D998              cbi 0x1b,1
 00A8                   .dbline 21
 00A8           ;          tem=(byte&0x80);       //最高位是1
 00A8 842F              mov R24,R20
 00AA 8078              andi R24,128
 00AC A82E              mov R10,R24
 00AE                   .dbline 22
 00AE           ;                if(tem==0)
 00AE 8823              tst R24
 00B0 11F4              brne L25
 00B2           X11:
 00B2                   .dbline 23
 00B2           ;                  {
 00B2                   .dbline 24
 00B2           ;                  PORTA&=~(1<<ser);   //ser 清零
 00B2 DB98              cbi 0x1b,3
 00B4                   .dbline 25
 00B4           ;                  }
 00B4 01C0              xjmp L26
 00B6           L25:
 00B6                   .dbline 27
 00B6           ;                  else
 00B6           ;                  {
 00B6                   .dbline 28
 00B6           ;                  PORTA|=(1<<ser);    //ser 置1   ser为高电平时工作
 00B6 DB9A              sbi 0x1b,3
 00B8                   .dbline 29
 00B8           ;                  }
 00B8           L26:
 00B8                   .dbline 30
 00B8           ;          byte=byte<<1;         //数据左移1位
 00B8 440F              lsl R20
 00BA                   .dbline 31
 00BA           ;          PORTA|=(1<<srclk);      //srclk=1
 00BA D99A              sbi 0x1b,1
 00BC                   .dbline 32
 00BC           ;          }
 00BC           L22:
 00BC                   .dbline 18
 00BC 6395              inc R22
 00BE           L24:
 00BE                   .dbline 18
 00BE 6830              cpi R22,8
 00C0 90F3              brlo L21
 00C2           X12:
 00C2                   .dbline 33
 00C2           ;          PORTA&=~(1<<rclk);   //rclk=0
 00C2 DA98              cbi 0x1b,2
 00C4                   .dbline 34
 00C4           ;          PORTA|=(1<<rclk);     //rclk=1    
 00C4 DA9A              sbi 0x1b,2
 00C6                   .dbline -2
 00C6           L20:
 00C6                   .dbline 0 ; func end
 00C6 0C940000          xjmp pop_xgsetF00C
 00CA                   .dbsym r tem 10 c
 00CA                   .dbsym r i 22 c
 00CA                   .dbsym r byte 20 c
 00CA                   .dbend
 00CA                   .dbfile E:\16实验程序\数码管显示1\led_8.c
 00CA                   .dbfunc e main _main fI
 00CA           ;             aa -> R10
 00CA           ;             bb -> R22,R23
 00CA           ;             cc -> R20
                        .even
 00CA           _main::
 00CA                   .dbline -1
 00CA                   .dbline 14
 00CA                   .dbline 15
 00CA 4427              clr R20
 00CC                   .dbline 17
 00CC 8FEF              ldi R24,255
 00CE 8ABB              out 0x1a,R24
 00D0                   .dbline 18
 00D0 8FEE              ldi R24,239
 00D2 8BBB              out 0x1b,R24
 00D4 1EC0              xjmp L29
 00D6           L28:
 00D6                   .dbline 20
 00D6                   .dbline 21
 00D6 DC9A              sbi 0x1b,4
 00D8                   .dbline 22
 00D8 AA24              clr R10
 00DA 18C0              xjmp L34
 00DC           L31:
 00DC                   .dbline 23
 00DC                   .dbline 24
 00DC 0A2D              mov R16,R10
 00DE DBDF              xcall _sendbyte
 00E0                   .dbline 25
 00E0 6627              clr R22
 00E2 7727              clr R23
 00E4 0EC0              xjmp L38
 00E6           L35:
 00E6                   .dbline 26
 00E6                   .dbline 27
 00E6 242E              mov R2,R20
 00E8 2094              com R2
 00EA 3BB2              in R3,0x1b
 00EC 3220              and R3,R2
 00EE 3BBA              out 0x1b,R3
 00F0                   .dbline 28
 00F0 405E              subi R20,224    ; addi 32
 00F2                   .dbline 29
 00F2           ;                        s_ms(700);
 00F2 0CEB              ldi R16,700
 00F4 12E0              ldi R17,2
 00F6 C6DF              xcall _s_ms
 00F8                   .dbline 30
 00F8           ;                        PORTA|=0xF0;         
 00F8 8BB3              in R24,0x1b
 00FA 806F              ori R24,240
 00FC 8BBB              out 0x1b,R24
 00FE                   .dbline 31
 00FE           ;                        }
 00FE           L36:
 00FE                   .dbline 25
 00FE 6F5F              subi R22,255  ; offset = 1
 0100 7F4F              sbci R23,255
 0102           L38:
 0102                   .dbline 25
 0102 6034              cpi R22,64
 0104 E6E0              ldi R30,6
 0106 7E07              cpc R23,R30
 0108 70F3              brlo L35
 010A           X13:
 010A                   .dbline 32
 010A           ;                }
 010A           L32:
 010A                   .dbline 22
 010A A394              inc R10
 010C           L34:
 010C                   .dbline 22
 010C 89E0              ldi R24,9
 010E 8A15              cp R24,R10
 0110 28F7              brsh L31
 0112           X14:
 0112                   .dbline 33
 0112           ;        }
 0112           L29:
 0112                   .dbline 19
 0112 E1CF              xjmp L28
 0114           X15:
 0114                   .dbline -2
 0114           L27:
 0114                   .dbline 0 ; func end
 0114 0895              ret
 0116                   .dbsym r aa 10 c
 0116                   .dbsym r bb 22 i
 0116                   .dbsym r cc 20 c
 0116                   .dbend
 0116           ; }

⌨️ 快捷键说明

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