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

📄 led_8.s

📁 16个单片机c语言实验程序
💻 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 + -