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

📄 display.s

📁 iccavr的一个实例
💻 S
字号:
	.module Display.c
	.area lit(rom, con, rel)
_DisTab::
	.byte 63,6
	.byte 91,'O
	.byte 'f,'m
	.byte 125,7
	.byte 127,'o
	.byte 'y,64
	.byte 0
	.dbfile F:\应用\拷贝应用\icc-avr-lcd\Display.c
	.dbsym e DisTab _DisTab A[13:13]kc
	.area text(rom, con, rel)
	.dbfile F:\应用\拷贝应用\icc-avr-lcd\Display.c
	.dbfunc e Display _Display fV
;           Disi -> R20
;         DisTem -> R22
;         DisNum -> R10
	.even
_Display::
	rcall push_gset3
	mov R10,R16
	.dbline -1
	.dbline 29
; #include<io8515.h> 
; //***************************************************
; //显示子程序,用于显示一个数字,小数点在最高位。
; //传递一个0-9的数字  
; //DisPort——显示的端口。DisPortD——端口方向。
; //DisTab[10]——显示码(const unsigned char)
; //74ls4093三个输入口 str,dada,clock  
; //and3=str+data+clock. 
; //**************************************************
; //P0  data
; //P1  clock
; //P2   TRO
; //STR-PB0   CLOCK-PB1   DATA-PB2
; #define  DisPort   PORTB
; #define  DisDdr    DDRB
; #define  str       0b00000100
; #define  data      0b00000001
; #define  clock     0b00000010
; #define  and3      0b00000111
; 
; //===============================================================
; unsigned char num[4];
; //最后三条为"E""-""全灭"
; const unsigned char DisTab[13]={ 0x3f,0x6,0x5b,0x4f,0x66,
;                                   0x6d,0x7d,0x7,0x7f,0x6f,0x79,0x40,0x00};
;                                    
; //=============================================================== 
; void Display(unsigned char DisNum)
; {  unsigned char DisTem;
	.dbline 30
;    unsigned char Disi=8;
	ldi R20,8
	.dbline 31
;    DisTem= DisNum;
	mov R22,R10
	.dbline 32
;    DisTem=DisTem&0b01111111;
	andi R22,127
	.dbline 33
;    DisTem=DisTab[DisTem];
	ldi R24,<_DisTab
	ldi R25,>_DisTab
	mov R30,R22
	clr R31
	add R30,R24
	adc R31,R25
	lpm R22,Z
	.dbline 34
;    DisNum=DisNum&0b10000000;
	mov R24,R10
	andi R24,128
	mov R10,R24
	.dbline 35
;    DisNum=DisNum|DisTem;
	or R10,R22
	.dbline 36
;    DisNum=~DisNum;
	com R10
	.dbline 37
;    DisDdr=and3;
	ldi R24,7
	out 0x17,R24
	.dbline 38
;    DisPort=DisPort|str;//set str=1  	
	sbi 0x18,2
	rjmp L3
L2:
	.dbline 40
; 	while(Disi)
; 	   {DisTem=DisNum;
	.dbline 40
	mov R22,R10
	.dbline 41
; 	    DisPort=DisPort&~clock;//clock=0
	cbi 0x18,1
	.dbline 42
; 	    DisTem=DisTem>>(Disi-1);
	mov R17,R20
	subi R17,1
	mov R16,R22
	rcall lsr8
	mov R22,R16
	.dbline 43
; 	    DisTem=DisTem&0b00000001;
	andi R22,1
	.dbline 44
; 	    if(DisTem==1)
	cpi R22,1
	brne L5
	.dbline 45
; 		      {DisPort=DisPort|data;
	.dbline 45
	sbi 0x18,0
	.dbline 46
; 			   DisPort=DisPort|clock;}
	sbi 0x18,1
	.dbline 46
	rjmp L6
L5:
	.dbline 48
; 		else
; 		      {DisPort=DisPort&~data;
	.dbline 48
	cbi 0x18,0
	.dbline 49
; 			   DisPort=DisPort|clock;}      	  
	sbi 0x18,1
	.dbline 49
L6:
	.dbline 50
	dec R20
	.dbline 51
L3:
	.dbline 39
	tst R20
	brne L2
	.dbline -2
L1:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r Disi 20 c
	.dbsym r DisTem 22 c
	.dbsym r DisNum 10 c
	.dbend
	.area lit(rom, con, rel)
L8:
	.byte 0,0
	.byte 0
	.area text(rom, con, rel)
	.dbfile F:\应用\拷贝应用\icc-avr-lcd\Display.c
	.dbfunc e Cacu_Display _Cacu_Display fV
;            num -> y+0
;           temp -> R20
	.even
_Cacu_Display::
	rcall push_gset1
	mov R20,R16
	sbiw R28,3
	.dbline -1
	.dbline 57
; 	    Disi--;
; 	    }	
; }	
; //=============================================================
; //***************************************************************
; //计算显示一个不带小数点的四位数
; void Cacu_Display(unsigned char temp)
; {  unsigned char num[3]={0,0,0};
	.dbline 57
	ldi R24,<L8
	ldi R25,>L8
	movw R30,R28
	ldi R16,3
	ldi R17,0
	st -y,R31
	st -y,R30
	st -y,R25
	st -y,R24
	rcall asgncblk
	rjmp L10
L9:
	.dbline 60
	.dbline 61
	subi R20,232
	.dbline 62
	ldd R24,y+2
	subi R24,255    ; addi 1
	std y+2,R24
	.dbline 63
L10:
	.dbline 59
;    
;     while(temp>=1000)
	cpi R20,232
	brge L9
	rjmp L15
L14:
	.dbline 65
	.dbline 66
	subi R20,100
	.dbline 67
	ldd R24,y+1
	subi R24,255    ; addi 1
	std y+1,R24
	.dbline 68
L15:
	.dbline 64
; 			 {
; 			   temp=temp-1000;								 
; 			   num[2]=num[2]+1;
; 			 }
;    while(temp>=100)
	cpi R20,100
	brsh L14
	rjmp L20
L19:
	.dbline 70
	.dbline 71
	subi R20,10
	.dbline 72
	ldd R24,y+0
	subi R24,255    ; addi 1
	std y+0,R24
	.dbline 73
L20:
	.dbline 69
; 		     {
; 			  temp=temp-100;
; 			  num[1]=num[1]+1;
; 		     }
;    while(temp>=10)
	cpi R20,10
	brsh L19
	.dbline 74
; 			 {
; 			   temp=temp-10;
; 		       num[0]=num[0]+1;
; 			 } 
;    Display(temp); 
	mov R16,R20
	rcall _Display
	.dbline 75
;    Display(num[0]);
	ldd R16,y+0
	rcall _Display
	.dbline 76
;    Display(num[1]); 			  
	ldd R16,y+1
	rcall _Display
	.dbline 77
;    Display(num[2]);
	ldd R16,y+2
	rcall _Display
	.dbline -2
L7:
	adiw R28,3
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym l num 0 A[3:3]c
	.dbsym r temp 20 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile F:\应用\拷贝应用\icc-avr-lcd\Display.c
_num::
	.blkb 4
	.dbsym e num _num A[4:4]c

⌨️ 快捷键说明

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