📄 led_8.s
字号:
.module led_8.c
.area text(rom, con, rel)
.dbfile E:\16实验程序\数码管显示1\led_8.c
.dbfile E:\16实验程序\数码管显示1\encoder.h
.dbfunc e encoder _encoder fc
; code -> R20
; num -> R16
.even
_encoder::
xcall push_xgsetF000
.dbline -1
.dbline 3
; //数码管显示程序
; #define uchar unsigned char
; #define uint unsigned int
.dbline 5
; #include<iom16v.h>
; //7段译码
mov R22,R16
clr R23
cpi R22,0
cpc R22,R23
breq L5
X0:
cpi R22,1
ldi R30,0
cpc R23,R30
breq L6
X1:
cpi R22,2
ldi R30,0
cpc R23,R30
breq L7
X2:
cpi R22,3
ldi R30,0
cpc R23,R30
breq L8
X3:
cpi R22,4
ldi R30,0
cpc R23,R30
breq L9
X4:
cpi R22,5
ldi R30,0
cpc R23,R30
breq L10
X5:
cpi R22,6
ldi R30,0
cpc R23,R30
breq L11
X6:
cpi R22,7
ldi R30,0
cpc R23,R30
breq L12
X7:
cpi R22,8
ldi R30,0
cpc R23,R30
breq L13
X8:
cpi R22,9
ldi R30,0
cpc R23,R30
breq L14
X9:
xjmp L2
L5:
.dbline 8
; #include"encoder.h"
; //写74hc595
; #include"ch595.h"
ldi R20,192
.dbline 8
xjmp L3
L6:
.dbline 10
;
;
ldi R20,249
.dbline 10
xjmp L3
L7:
.dbline 12
;
; //主函数
ldi R20,164
.dbline 12
xjmp L3
L8:
.dbline 14
; main()
; {
ldi R20,176
.dbline 14
xjmp L3
L9:
.dbline 16
; uchar aa,cc=0x0;
; uint bb;
ldi R20,153
.dbline 16
xjmp L3
L10:
.dbline 18
; DDRA=0xff; //初始化端口A
; PORTA=0xef;
ldi R20,146
.dbline 18
xjmp L3
L11:
.dbline 20
; while(1)
; {
ldi R20,130
.dbline 20
xjmp L3
L12:
.dbline 22
; PORTA|=(1<<4); //74ls138使能
; for(aa=0;aa<=9;aa++) //循环发送0-9的数字
ldi R20,248
.dbline 22
xjmp L3
L13:
.dbline 24
; {
; sendbyte(aa); //向74hc595写入数据
ldi R20,128
.dbline 24
xjmp L3
L14:
.dbline 26
; for(bb=0;bb<1600;bb++) //每个数字扫描2000次,每个数码管200次
; {
ldi R20,144
.dbline 26
L2:
L3:
.dbline 28
; PORTA&=~cc; //74hc138依次输出
; cc=cc+0x20; //这里可能不好理解,138的ABC在A口的567位,每加0x20就是进一位,加到溢出就回到000;
mov R16,R20
.dbline -2
L1:
.dbline 0 ; func end
xjmp pop_xgsetF000
.dbsym r code 20 c
.dbsym r num 16 c
.dbend
.dbfile E:\16实验程序\数码管显示1\ch595.h
.dbfunc e s_ms _s_ms fV
; t -> R16,R17
.even
_s_ms::
.dbline -1
.dbline 8
; //ch595的数据输入
; #define srclk 1
; #define rclk 2
; #define ser 3
;
; //延时函数
; void s_ms(unsigned int t)
; {
.dbline 9
; for(;t>1;t--)
xjmp L19
L16:
.dbline 10
; {
.dbline 11
; }
L17:
.dbline 9
subi R16,1
sbci R17,0
L19:
.dbline 9
ldi R24,1
ldi R25,0
cp R24,R16
cpc R25,R17
brlo L16
X10:
.dbline -2
L15:
.dbline 0 ; func end
ret
.dbsym r t 16 i
.dbend
.dbfunc e sendbyte _sendbyte fV
; tem -> R10
; i -> R22
; byte -> R20
.even
_sendbyte::
xcall push_xgsetF00C
mov R20,R16
.dbline -1
.dbline 15
; }
; //写74hc595函数
; void sendbyte(uchar byte)
; {
.dbline 17
; uchar i,tem;
; byte=encoder(byte); //译码
mov R16,R20
xcall _encoder
mov R20,R16
.dbline 18
; for(i=0;i<8;i++)
clr R22
xjmp L24
L21:
.dbline 19
; {
.dbline 20
; PORTA&=~(1<<srclk); //srclk 清零
cbi 0x1b,1
.dbline 21
; tem=(byte&0x80); //最高位是1
mov R24,R20
andi R24,128
mov R10,R24
.dbline 22
; if(tem==0)
tst R24
brne L25
X11:
.dbline 23
; {
.dbline 24
; PORTA&=~(1<<ser); //ser 清零
cbi 0x1b,3
.dbline 25
; }
xjmp L26
L25:
.dbline 27
; else
; {
.dbline 28
; PORTA|=(1<<ser); //ser 置1 ser为高电平时工作
sbi 0x1b,3
.dbline 29
; }
L26:
.dbline 30
; byte=byte<<1; //数据左移1位
lsl R20
.dbline 31
; PORTA|=(1<<srclk); //srclk=1
sbi 0x1b,1
.dbline 32
; }
L22:
.dbline 18
inc R22
L24:
.dbline 18
cpi R22,8
brlo L21
X12:
.dbline 33
; PORTA&=~(1<<rclk); //rclk=0
cbi 0x1b,2
.dbline 34
; PORTA|=(1<<rclk); //rclk=1
sbi 0x1b,2
.dbline -2
L20:
.dbline 0 ; func end
xjmp pop_xgsetF00C
.dbsym r tem 10 c
.dbsym r i 22 c
.dbsym r byte 20 c
.dbend
.dbfile E:\16实验程序\数码管显示1\led_8.c
.dbfunc e main _main fI
; aa -> R10
; bb -> R22,R23
; cc -> R20
.even
_main::
.dbline -1
.dbline 14
.dbline 15
clr R20
.dbline 17
ldi R24,255
out 0x1a,R24
.dbline 18
ldi R24,239
out 0x1b,R24
xjmp L29
L28:
.dbline 20
.dbline 21
sbi 0x1b,4
.dbline 22
clr R10
xjmp L34
L31:
.dbline 23
.dbline 24
mov R16,R10
xcall _sendbyte
.dbline 25
clr R22
clr R23
xjmp L38
L35:
.dbline 26
.dbline 27
mov R2,R20
com R2
in R3,0x1b
and R3,R2
out 0x1b,R3
.dbline 28
subi R20,224 ; addi 32
.dbline 29
; s_ms(700);
ldi R16,700
ldi R17,2
xcall _s_ms
.dbline 30
; PORTA|=0xF0;
in R24,0x1b
ori R24,240
out 0x1b,R24
.dbline 31
; }
L36:
.dbline 25
subi R22,255 ; offset = 1
sbci R23,255
L38:
.dbline 25
cpi R22,64
ldi R30,6
cpc R23,R30
brlo L35
X13:
.dbline 32
; }
L32:
.dbline 22
inc R10
L34:
.dbline 22
ldi R24,9
cp R24,R10
brsh L31
X14:
.dbline 33
; }
L29:
.dbline 19
xjmp L28
X15:
.dbline -2
L27:
.dbline 0 ; func end
ret
.dbsym r aa 10 c
.dbsym r bb 22 i
.dbsym r cc 20 c
.dbend
; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -