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

📄 计算器.s

📁 八位整数的+-*/
💻 S
📖 第 1 页 / 共 2 页
字号:
	.dbline 99
	inc R10
L46:
	.dbline 99
	mov R24,R10
	cpi R24,8
	brlo L43
X12:
	.dbline 104
; 			 
; 	 		for(wei=7-t;wei+1>0;wei--)//小数部分显示
	ldi R24,7
	mov R10,R24
	sub R10,R12
	xjmp L50
L47:
	.dbline 105
; 			{						
	.dbline 106
; 				n*=10;	
	ldi R16,<L51
	ldi R17,>L51
	xcall lpm32
	movw R24,R28
	adiw R24,4
	st -y,R25
	st -y,R24
	xcall fpmule1
	std y+4,R16
	std y+5,R17
	std y+6,R18
	std y+7,R19
	.dbline 107
; 				show(wei,(long)n%10);
	ldi R20,10
	ldi R21,0
	ldi R22,0
	ldi R23,0
	ldd R16,y+4
	ldd R17,y+5
	ldd R18,y+6
	ldd R19,y+7
	xcall fpint
	st -y,R23
	st -y,R22
	st -y,R21
	st -y,R20
	xcall mod32s
	mov R18,R16
	mov R16,R10
	xcall _show
	.dbline 108
; 			}
L48:
	.dbline 104
	dec R10
L50:
	.dbline 104
	ldi R24,0
	mov R25,R10
	subi R25,255    ; addi 1
	cp R24,R25
	brlo L47
X13:
	.dbline 109
; 	}
L36:
	.dbline -2
L34:
	.dbline 0 ; func end
	adiw R28,12
	xcall pop_xgsetF0FC
	adiw R28,4
	ret
	.dbsym r t 12 c
	.dbsym l j 8 L
	.dbsym r x 10 c
	.dbsym r wei 10 c
	.dbsym l n 4 D
	.dbsym l i 0 L
	.dbsym l a 22 D
	.dbend
	.dbfunc e keyscan _keyscan fi
;              j -> R22,R23
;              i -> R20,R21
	.even
_keyscan::
	xcall push_xgsetF000
	.dbline -1
	.dbline 117
; }
; 
; 
; 
;       
; 
; uint keyscan()
; {		 
	.dbline 119
; 	uint i,j;
;  	InitC_0();
	xcall _InitC_0
	.dbline 121
; 	//delay(10);
; 	i=PINC;
	in R20,0x13
	clr R21
	.dbline 122
; 	if(i==0x0f)return 0xff;
	cpi R20,15
	ldi R30,0
	cpc R21,R30
	brne L53
X14:
	.dbline 122
	ldi R16,255
	ldi R17,0
	xjmp L52
L53:
	.dbline 123
; 	i&=0x0f;
	andi R20,15
	andi R21,0
	.dbline 124
; 	InitC_1();
	xcall _InitC_1
	.dbline 125
; 	j=PINC;
	in R22,0x13
	clr R23
	.dbline 126
; 	j&=0xf0;
	andi R22,240
	andi R23,0
	.dbline 127
; 	i|=j;
	or R20,R22
	or R21,R23
	.dbline 128
; 	if(i==0xD7)return 0;      //0   11010111
	cpi R20,215
	ldi R30,0
	cpc R21,R30
	brne L55
X15:
	.dbline 128
	clr R16
	clr R17
	xjmp L52
L55:
	.dbline 129
; 	if(i==0xEB)return 1;      //1   11101011
	cpi R20,235
	ldi R30,0
	cpc R21,R30
	brne L57
X16:
	.dbline 129
	ldi R16,1
	ldi R17,0
	xjmp L52
L57:
	.dbline 130
; 	if(i==0xDB)return 2;      //2   11011011
	cpi R20,219
	ldi R30,0
	cpc R21,R30
	brne L59
X17:
	.dbline 130
	ldi R16,2
	ldi R17,0
	xjmp L52
L59:
	.dbline 131
; 	if(i==0xBB)return 3;      //3   10111011
	cpi R20,187
	ldi R30,0
	cpc R21,R30
	brne L61
X18:
	.dbline 131
	ldi R16,3
	ldi R17,0
	xjmp L52
L61:
	.dbline 132
; 	if(i==0xED)return 4;      //4   11101101
	cpi R20,237
	ldi R30,0
	cpc R21,R30
	brne L63
X19:
	.dbline 132
	ldi R16,4
	ldi R17,0
	xjmp L52
L63:
	.dbline 133
; 	if(i==0xDD)return 5;      //5   11011101
	cpi R20,221
	ldi R30,0
	cpc R21,R30
	brne L65
X20:
	.dbline 133
	ldi R16,5
	ldi R17,0
	xjmp L52
L65:
	.dbline 134
; 	if(i==0xBD)return 6;      //6   10111101
	cpi R20,189
	ldi R30,0
	cpc R21,R30
	brne L67
X21:
	.dbline 134
	ldi R16,6
	ldi R17,0
	xjmp L52
L67:
	.dbline 135
; 	if(i==0xEE)return 7;      //7   11101110
	cpi R20,238
	ldi R30,0
	cpc R21,R30
	brne L69
X22:
	.dbline 135
	ldi R16,7
	ldi R17,0
	xjmp L52
L69:
	.dbline 136
; 	if(i==0xDE)return 8;      //8   11011110
	cpi R20,222
	ldi R30,0
	cpc R21,R30
	brne L71
X23:
	.dbline 136
	ldi R16,8
	ldi R17,0
	xjmp L52
L71:
	.dbline 137
; 	if(i==0xBE)return 9;      //9   10111110
	cpi R20,190
	ldi R30,0
	cpc R21,R30
	brne L73
X24:
	.dbline 137
	ldi R16,9
	ldi R17,0
	xjmp L52
L73:
	.dbline 138
; 	if(i==0xB7)return '=';    //=   10110111
	cpi R20,183
	ldi R30,0
	cpc R21,R30
	brne L75
X25:
	.dbline 138
	ldi R16,61
	ldi R17,0
	xjmp L52
L75:
	.dbline 139
; 	if(i==0x77)return '+';    //+   01110111
	cpi R20,119
	ldi R30,0
	cpc R21,R30
	brne L77
X26:
	.dbline 139
	ldi R16,43
	ldi R17,0
	xjmp L52
L77:
	.dbline 140
; 	if(i==0x7B)return '-';    //-   01111011
	cpi R20,123
	ldi R30,0
	cpc R21,R30
	brne L79
X27:
	.dbline 140
	ldi R16,45
	ldi R17,0
	xjmp L52
L79:
	.dbline 141
; 	if(i==0x7D)return '*';    //*   01111101
	cpi R20,125
	ldi R30,0
	cpc R21,R30
	brne L81
X28:
	.dbline 141
	ldi R16,42
	ldi R17,0
	xjmp L52
L81:
	.dbline 142
; 	if(i==0x7E)return '/';    ///   01111110
	cpi R20,126
	ldi R30,0
	cpc R21,R30
	brne L83
X29:
	.dbline 142
	ldi R16,47
	ldi R17,0
	xjmp L52
L83:
	.dbline 143
; 	if(i==0xe7)return 'C';
	cpi R20,231
	ldi R30,0
	cpc R21,R30
	brne L85
X30:
	.dbline 143
	ldi R16,67
	ldi R17,0
	xjmp L52
L85:
	.dbline 144
; 	else return 0xff;
	ldi R16,255
	ldi R17,0
	.dbline -2
L52:
	.dbline 0 ; func end
	xjmp pop_xgsetF000
	.dbsym r j 22 i
	.dbsym r i 20 i
	.dbend
	.dbfunc e main _main fV
;            key -> <dead>
;              n -> R22,R23
;              b -> y+4
;              t -> R20
;              a -> y+0
	.even
_main::
	sbiw R28,8
	.dbline -1
	.dbline 152
; }
; 
; 
; 
; 	
; 
; void main(void)
; {
	.dbline 154
;  	 float a,b;
;  	 uchar t=0xff;
	ldi R20,255
	.dbline 155
;  	 uint n=5821;
	ldi R22,5821
	ldi R23,22
	.dbline 157
; 	 uint key;
;   	 DDRA=0XFF;
	ldi R24,255
	out 0x1a,R24
	.dbline 158
; 	 PORTA=0Xff;
	out 0x1b,R24
	.dbline 159
; 	 DDRB=0X03;
	ldi R24,3
	out 0x17,R24
	.dbline 160
; 	 InitC_0();
	xcall _InitC_0
	.dbline 161
; 	 MCUCR=2;        //设置INT0为下降沿触发中断
	ldi R24,2
	out 0x35,R24
	.dbline 162
; 	 GICR|=BIT(6);
	in R24,0x3b
	ori R24,64
	out 0x3b,R24
	.dbline 163
; 	 SREG|=BIT(7);
	bset 7
	xjmp L89
L88:
	.dbline 166
; 	 
; 	 while(1)
; 	 {	
	.dbline 167
; 	 	if(i!=0xff)
	lds R24,_i
	cpi R24,255
	brne X45
	xjmp L91
X45:
X31:
	.dbline 168
; 		{	 
	.dbline 169
; 	 	   if(i<10){ a=10*a+i;i=0xff;}
	cpi R24,10
	brsh L93
X32:
	.dbline 169
	.dbline 169
	ldi R16,<L51
	ldi R17,>L51
	xcall lpm32
	movw R24,R28
	st -y,R25
	st -y,R24
	xcall fpmule1
	movw R2,R16
	movw R4,R18
	lds R16,_i
	clr R17
	xcall int2fp
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	movw R16,R2
	movw R18,R4
	xcall fpadd2
	std y+0,R16
	std y+1,R17
	std y+2,R18
	std y+3,R19
	.dbline 169
	ldi R24,255
	sts _i,R24
	.dbline 169
	xjmp L94
L93:
	.dbline 171
; 		   else
; 		   {
	.dbline 172
; 		   		if(i=='+'){ sign=1;b=a;a=0;}
	lds R24,_i
	cpi R24,43
	brne L95
X33:
	.dbline 172
	.dbline 172
	ldi R24,1
	sts _sign,R24
	.dbline 172
	ldd R2,y+0
	ldd R3,y+1
	ldd R4,y+2
	ldd R5,y+3
	std y+4,R2
	std y+5,R3
	std y+6,R4
	std y+7,R5
	.dbline 172
	ldi R16,<L37
	ldi R17,>L37
	xcall lpm32
	std y+0,R16
	std y+1,R17
	std y+2,R18
	std y+3,R19
	.dbline 172
L95:
	.dbline 173
; 		  		if(i=='-'){ sign=2;b=a;a=0;}
	lds R24,_i
	cpi R24,45
	brne L97
X34:
	.dbline 173
	.dbline 173
	ldi R24,2
	sts _sign,R24
	.dbline 173
	ldd R2,y+0
	ldd R3,y+1
	ldd R4,y+2
	ldd R5,y+3
	std y+4,R2
	std y+5,R3
	std y+6,R4
	std y+7,R5
	.dbline 173
	ldi R16,<L37
	ldi R17,>L37
	xcall lpm32
	std y+0,R16
	std y+1,R17
	std y+2,R18
	std y+3,R19
	.dbline 173
L97:
	.dbline 174
; 		   		if(i=='*'){ sign=3;b=a;a=0;}
	lds R24,_i
	cpi R24,42
	brne L99
X35:
	.dbline 174
	.dbline 174
	ldi R24,3
	sts _sign,R24
	.dbline 174
	ldd R2,y+0
	ldd R3,y+1
	ldd R4,y+2
	ldd R5,y+3
	std y+4,R2
	std y+5,R3
	std y+6,R4
	std y+7,R5
	.dbline 174
	ldi R16,<L37
	ldi R17,>L37
	xcall lpm32
	std y+0,R16
	std y+1,R17
	std y+2,R18
	std y+3,R19
	.dbline 174
L99:
	.dbline 175
; 		   		if(i=='/'){ sign=4;b=a;a=0;}
	lds R24,_i
	cpi R24,47
	brne L101
X36:
	.dbline 175
	.dbline 175
	ldi R24,4
	sts _sign,R24
	.dbline 175
	ldd R2,y+0
	ldd R3,y+1
	ldd R4,y+2
	ldd R5,y+3
	std y+4,R2
	std y+5,R3
	std y+6,R4
	std y+7,R5
	.dbline 175
	ldi R16,<L37
	ldi R17,>L37
	xcall lpm32
	std y+0,R16
	std y+1,R17
	std y+2,R18
	std y+3,R19
	.dbline 175
L101:
	.dbline 176
; 		   		if(i=='C'){ sign=0;a=0;b=0;}
	lds R24,_i
	cpi R24,67
	brne L103
X37:
	.dbline 176
	.dbline 176
	clr R2
	sts _sign,R2
	.dbline 176
	ldi R16,<L37
	ldi R17,>L37
	xcall lpm32
	std y+0,R16
	std y+1,R17
	std y+2,R18
	std y+3,R19
	.dbline 176
	ldi R16,<L37
	ldi R17,>L37
	xcall lpm32
	std y+4,R16
	std y+5,R17
	std y+6,R18
	std y+7,R19
	.dbline 176
L103:
	.dbline 177
; 		   		if(i=='=')
	lds R24,_i
	cpi R24,61
	breq X46
	xjmp L105
X46:
X38:
	.dbline 178
; 		   		{ switch(sign)
	.dbline 178
	lds R22,_sign
	clr R23
	cpi R22,1
	ldi R30,0
	cpc R23,R30
	breq L110
X39:
	cpi R22,2
	ldi R30,0
	cpc R23,R30
	breq L111
X40:
	cpi R22,3
	ldi R30,0
	cpc R23,R30
	breq L112
X41:
	cpi R22,4
	ldi R30,0
	cpc R23,R30
	breq L113
X42:
	xjmp L108
L110:
	.dbline 180
; 				  {
; 				  	case 1:a=a+b;break;
	ldd R16,y+0
	ldd R17,y+1
	ldd R18,y+2
	ldd R19,y+3
	movw R24,R28
	adiw R24,4
	st -y,R25
	st -y,R24
	xcall fpadd1
	std y+0,R16
	std y+1,R17
	std y+2,R18
	std y+3,R19
	.dbline 180
	xjmp L108
L111:
	.dbline 181
; 					case 2:a=b-a;break;
	ldd R16,y+4
	ldd R17,y+5
	ldd R18,y+6
	ldd R19,y+7
	movw R24,R28
	st -y,R25
	st -y,R24
	xcall fpsub1
	std y+0,R16
	std y+1,R17
	std y+2,R18
	std y+3,R19
	.dbline 181
	xjmp L108
L112:
	.dbline 182
; 					case 3:a=a*b;break;
	ldd R16,y+0
	ldd R17,y+1
	ldd R18,y+2
	ldd R19,y+3
	movw R24,R28
	adiw R24,4
	st -y,R25
	st -y,R24
	xcall fpmule1
	std y+0,R16
	std y+1,R17
	std y+2,R18
	std y+3,R19
	.dbline 182
	xjmp L108
L113:
	.dbline 183
; 					case 4:a=b/a;break;
	ldd R16,y+4
	ldd R17,y+5
	ldd R18,y+6
	ldd R19,y+7
	movw R24,R28
	st -y,R25
	st -y,R24
	xcall fpdiv1
	std y+0,R16
	std y+1,R17
	std y+2,R18
	std y+3,R19
	.dbline 183
	.dbline 184
; 					default: break;
L108:
	.dbline 186
; 				  }
; 		  		  sign=0;
	clr R2
	sts _sign,R2
	.dbline 187
; 		   	   }
L105:
	.dbline 188
; 		    i=0xff;    
	ldi R24,255
	sts _i,R24
	.dbline 189
; 		   }
L94:
	.dbline 190
; 		}
L91:
	.dbline 191
; 	t=0x0f;
	ldi R20,15
	xjmp L115
L114:
	.dbline 192
; 	while(t--)display(a);
	ldd R16,y+0
	ldd R17,y+1
	ldd R18,y+2
	ldd R19,y+3
	xcall _display
L115:
	.dbline 192
	mov R2,R20
	clr R3
	subi R20,1
	tst R2
	brne L114
X43:
	.dbline 193
; 	}
L89:
	.dbline 165
	xjmp L88
X44:
	.dbline -2
L87:
	.dbline 0 ; func end
	adiw R28,8
	ret
	.dbsym l key 1 i
	.dbsym r n 22 i
	.dbsym l b 4 D
	.dbsym r t 20 c
	.dbsym l a 0 D
	.dbend
	.area bss(ram, con, rel)
	.dbfile E:\avr工程\计算器\计算器\程序\计算器.c
_sign::
	.blkb 1
	.dbsym e sign _sign c
	.area lit(rom, con, rel)
L51:
	.word 0x0,0x4120
L37:
	.word 0x0,0x0
; }
; 	 
; 	 

⌨️ 快捷键说明

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