📄 led_8.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 + -