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

📄 lcd.s

📁 基于m16的寻迹寻光小车程序
💻 S
📖 第 1 页 / 共 2 页
字号:
	ldd R3,y+36
	ldd R4,y+37
	ldd R5,y+38
	std y+1,R2
	std y+2,R3
	std y+3,R4
	std y+4,R5
	xjmp L33
L32:
	.dbline 184
; 	
;     while( datainttmp != 0 )
;     {
	.dbline 185
;         datachar1[n++] = ( datainttmp % 10 ) + 0x30;  //转换为字符
	mov R2,R10
	clr R3
	movw R6,R2
	mov R24,R2
	subi R24,255    ; addi 1
	mov R10,R24
	ldi R24,10
	ldi R25,0
	ldi R26,0
	ldi R27,0
	ldd R16,y+1
	ldd R17,y+2
	ldd R18,y+3
	ldd R19,y+4
	st -y,R27
	st -y,R26
	st -y,R25
	st -y,R24
	xcall mod32s
	movw R2,R16
	movw R4,R18
	ldi R24,48
	ldi R25,0
	ldi R26,0
	ldi R27,0
	add R2,R24
	adc R3,R25
	adc R4,R26
	adc R5,R27
	movw R24,R28
	adiw R24,5
	mov R30,R6
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R2
	.dbline 186
;         datainttmp /= 10;
	ldi R24,10
	ldi R25,0
	ldi R26,0
	ldi R27,0
	ldd R16,y+1
	ldd R17,y+2
	ldd R18,y+3
	ldd R19,y+4
	st -y,R27
	st -y,R26
	st -y,R25
	st -y,R24
	xcall div32s
	std y+1,R16
	std y+2,R17
	std y+3,R18
	std y+4,R19
	.dbline 187
;     }
L33:
	.dbline 183
	ldd R2,y+1
	ldd R3,y+2
	ldd R4,y+3
	ldd R5,y+4
	clc
	tst R2
	cpc R3,R2
	cpc R4,R2
	cpc R5,R2
	breq X14
	xjmp L32
X14:
X10:
	.dbline 189
; 
;     if( dataint != 0 )                   //*/*//*/
	ldd R2,y+35
	ldd R3,y+36
	ldd R4,y+37
	ldd R5,y+38
	clc
	tst R2
	cpc R3,R2
	cpc R4,R2
	cpc R5,R2
	brne X15
	xjmp L35
X15:
X11:
	.dbline 190
;     {
	.dbline 191
;         k = n - 1;
	mov R22,R10
	subi R22,1
	.dbline 192
;         kk = n;
	mov R14,R10
	.dbline 194
; 
;         for( i = 0; i < kk; i++, k-- )
	clr R12
	xjmp L40
L37:
	.dbline 195
;         {
	.dbline 196
;             datachar2[k] = datachar1[i];               //将数字符串倒过来
	movw R24,R28
	adiw R24,5
	mov R30,R12
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	movw R24,R28
	adiw R24,13
	mov R30,R22
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R2
	.dbline 197
;         }
L38:
	.dbline 194
	inc R12
	dec R22
L40:
	.dbline 194
	cp R12,R14
	brlo L37
X12:
	.dbline 199
; 
; 	    LCD_set_rc( r, c );
	mov R18,R20
	ldd R16,y+31
	xcall _LCD_set_rc
	.dbline 200
;         for( i = 0; i < kk; i++ )
	clr R12
	xjmp L44
L41:
	.dbline 201
;         {
	.dbline 202
;             LCD_write_char( r, c++, datachar2[i] );
	movw R24,R28
	adiw R24,13
	mov R30,R12
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	std y+0,R2
	mov R2,R20
	subi R20,255    ; addi 1
	mov R18,R2
	ldd R16,y+31
	xcall _LCD_write_char
	.dbline 203
;         }
L42:
	.dbline 200
	inc R12
L44:
	.dbline 200
	cp R12,R14
	brlo L41
X13:
	.dbline 204
;     }
	xjmp L36
L35:
	.dbline 207
;     
;     else
;     LCD_write_char( r, c, '0' );
	ldi R24,48
	std y+0,R24
	mov R18,R20
	ldd R16,y+31
	xcall _LCD_write_char
L36:
	.dbline -2
L31:
	.dbline 0 ; func end
	adiw R28,21
	xcall pop_xgsetF0FC
	adiw R28,4
	ret
	.dbsym l datachar2 13 A[8:8]c
	.dbsym r kk 14 c
	.dbsym r k 22 c
	.dbsym r n 10 c
	.dbsym l datachar1 5 A[8:8]c
	.dbsym l datainttmp 1 L
	.dbsym r i 12 c
	.dbsym l dataint 35 L
	.dbsym r c 20 c
	.dbsym l r 31 c
	.dbend
	.dbfunc e LCD_write_datafloat _LCD_write_datafloat fV
;   datawholetmp -> y+34
;        xiaoxhu -> <dead>
;    datatemp2_f -> y+30
;      xiaoshu_n -> R10
;   whole_fact_n -> R10
;    zhengshu_no -> R10
;    datawhole_n -> R10
;    datatemp1_f -> y+26
;     zhengshu_n -> R20
;       zhengshu -> R12,R13
;         ling_n -> R22
;  xiaoshu_act_n -> R10
;              n -> y+41
;      datachar2 -> y+17
;      datachar1 -> y+8
;             kk -> y+40
;              k -> y+39
;      datawhole -> y+4
;              i -> y+38
;             mm -> R14,R15
;              p -> y+60
;      datafloat -> y+56
;              c -> y+54
;              r -> y+52
	.even
_LCD_write_datafloat::
	xcall push_arg4
	xcall push_xgsetF0FC
	sbiw R28,42
	ldd R14,y+62
	ldd R15,y+63
	.dbline -1
	.dbline 218
; }
; 
; //==========================================
; //函数名称:显示一个实型数据
; //函数作用: 在指定位置显示实型数据
; //入口参数: 行位置r, 列位置c, 浮点型数据datafloat, 放大倍p, 倍数mm, 
; //返回类型:无
; //示例    :LCD_write_datafloat( 1, 2, 0.0123, 10000, 4)
; //==========================================
; void LCD_write_datafloat( uchar r, uchar c, float datafloat, uint p, uint mm)
; {
	.dbline 219
;     uchar zhengshu_no = 0;
	.dbline 225
;     uchar whole_fact_n;
;     uchar xiaoshu_act_n;
;     uchar ling_n;
;     
;     
;     uchar i = 0;
	clr R0
	std y+38,R0
	.dbline 226
;     uchar n = 0;
	std y+41,R0
	.dbline 227
;     uchar k = 0;
	std y+39,R0
	.dbline 228
;     uchar kk = 0;
	std y+40,R0
	.dbline 237
;     uchar datachar1[9];
;     uchar datachar2[9];
;     uint zhengshu;                 //定义变量zhengshu来存放实数的整数部分
;     uint xiaoxhu;                  //定义变量xiaoshu来存放实数的小数部分
;     
;     long int datawhole;
;     long int datawholetmp;
;     
;     uchar zhengshu_n = 0;          //定义整数部分整数位数
	.dbline 238
;     uchar xiaoshu_n = 0;           //定义小数部分整数位数
	.dbline 239
;     uchar datawhole_n = 0;             //定义实数放大后的位数
	.dbline 243
;     float datatemp1_f;
;     float datatemp2_f;
;     
;     datatemp1_f = datafloat;
	ldd R2,y+56
	ldd R3,y+57
	ldd R4,y+58
	ldd R5,y+59
	std y+26,R2
	std y+27,R3
	std y+28,R4
	std y+29,R5
	.dbline 244
;     datatemp2_f = datafloat;
	ldd R2,y+56
	ldd R3,y+57
	ldd R4,y+58
	ldd R5,y+59
	std y+30,R2
	std y+31,R3
	std y+32,R4
	std y+33,R5
	.dbline 246
; 
;     zhengshu = ( uint )datatemp1_f;       //取实数的整数部分
	ldd R16,y+26
	ldd R17,y+27
	ldd R18,y+28
	ldd R19,y+29
	xcall fpint
	movw R12,R16
	.dbline 248
; 
;     zhengshu_n = lengh_longint( zhengshu );       //如果整数部分为0, 则只有一位整数, 取整数位数
	movw R16,R12
	movw R18,R14
	clr R18
	clr R19
	xcall _lengh_longint
	mov R20,R16
	.dbline 250
;     
;     datawhole = datatemp1_f * p;         //将实数放大,变成整数, datawhole为放大后的数
	ldd R2,y+26
	ldd R3,y+27
	ldd R4,y+28
	ldd R5,y+29
	ldd R16,y+60
	ldd R17,y+61
	xcall uint2fp
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	movw R16,R2
	movw R18,R4
	xcall fpmule2
	xcall fpint
	std y+4,R16
	std y+5,R17
	std y+6,R18
	std y+7,R19
	.dbline 252
; 
;     datawhole_n = lengh_longint( datawhole ); //如果整数部分为0, datawhole_n 不一定等于小数的位数
	ldd R16,y+4
	ldd R17,y+5
	ldd R18,y+6
	ldd R19,y+7
	xcall _lengh_longint
	.dbline 254
; 
;     whole_fact_n = mm + zhengshu_n;           ///*/*实际
	mov R2,R20
	clr R3
	mov R10,R14
	add R10,R2
	adc R11,R3
	.dbline 256
; 
;     if( zhengshu  == 0 )
	tst R12
	brne L46
	tst R13
	brne L46
X16:
	.dbline 257
;     {
	.dbline 258
;         xiaoshu_act_n = lengh_longint( datawhole );
	ldd R16,y+4
	ldd R17,y+5
	ldd R18,y+6
	ldd R19,y+7
	xcall _lengh_longint
	mov R10,R16
	.dbline 259
;         ling_n = mm - xiaoshu_act_n;   //如果整数为0, 小数有效位为xiaoshu_act_n
	mov R2,R10
	clr R3
	mov R22,R14
	sub R22,R2
	sbc R23,R3
	.dbline 260
;     }
	xjmp L47
L46:
	.dbline 262
; 
;     else xiaoshu_act_n = mm;
	mov R10,R14
L47:
	.dbline 264
; 
;     ling_n = mm - xiaoshu_act_n;  //用ling_0记录小数部分前面0的位数
	mov R2,R10
	clr R3
	mov R22,R14
	sub R22,R2
	sbc R23,R3
	.dbline 266
; 
;     for( i = 0; i < xiaoshu_act_n; i++ )
	clr R0
	std y+38,R0
	xjmp L51
L48:
	.dbline 267
;     {
	.dbline 268
;         datachar1[n++] = ( datawhole % 10 ) + 0x30;  //转换为字符
	ldd R14,y+41
	clr R15
	mov R24,R14
	subi R24,255    ; addi 1
	std y+41,R24
	ldi R24,10
	ldi R25,0
	ldi R26,0
	ldi R27,0
	ldd R16,y+4
	ldd R17,y+5
	ldd R18,y+6
	ldd R19,y+7
	st -y,R27
	st -y,R26
	st -y,R25
	st -y,R24
	xcall mod32s
	movw R2,R16
	movw R4,R18
	ldi R24,48
	ldi R25,0
	ldi R26,0
	ldi R27,0
	add R2,R24
	adc R3,R25
	adc R4,R26
	adc R5,R27
	movw R24,R28
	adiw R24,8
	mov R30,R14
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R2
	.dbline 269
;         datawhole /= 10;
	ldi R24,10
	ldi R25,0
	ldi R26,0
	ldi R27,0
	ldd R16,y+4
	ldd R17,y+5
	ldd R18,y+6
	ldd R19,y+7
	st -y,R27
	st -y,R26
	st -y,R25
	st -y,R24
	xcall div32s
	std y+4,R16
	std y+5,R17
	std y+6,R18
	std y+7,R19
	.dbline 270
;     }
L49:
	.dbline 266
	ldd R0,y+38
	inc R0
	std y+38,R0
L51:
	.dbline 266
	ldd R0,y+38
	cp R0,R10
	brsh X21
	xjmp L48
X21:
X17:
	.dbline 272
; 
;     k = n - 1;
	ldd R24,y+41
	subi R24,1
	std y+39,R24
	.dbline 273
;     kk = n;                                         //记录存入的个数
	ldd R0,y+41
	std y+40,R0
	.dbline 275
; 
;    for( i = 0; i < kk; i++, k-- )
	clr R0
	std y+38,R0
	xjmp L55
L52:
	.dbline 276
;     {
	.dbline 277
;         datachar2[k] = datachar1[i];               //将数字符串倒过来
	movw R24,R28
	adiw R24,8
	ldd R30,y+38
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	movw R24,R28
	adiw R24,17
	ldd R30,y+39
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R2
	.dbline 278
;     }
L53:
	.dbline 275
	ldd R0,y+38
	inc R0
	std y+38,R0
	ldd R0,y+39
	dec R0
	std y+39,R0
L55:
	.dbline 275
	ldd R0,y+38
	ldd R16,y+40
	cp R0,R16
	brlo L52
X18:
	.dbline 280
; 	
; 	LCD_write_datalongint( r, c, zhengshu );    //显示整数部分
	movw R2,R12
	clr R4
	clr R5
	std y+0,R2
	std y+1,R3
	std y+2,R4
	std y+3,R5
	ldd R18,y+54
	ldd R16,y+52
	xcall _LCD_write_datalongint
	.dbline 281
; 	c = c + zhengshu_n;
	ldd R0,y+54
	add R0,R20
	std y+54,R0
	.dbline 282
; 	LCD_write_char( r, c, '.' );
	ldi R24,46
	std y+0,R24
	mov R18,R0
	ldd R16,y+52
	xcall _LCD_write_char
	.dbline 283
;     c++;
	ldd R0,y+54
	inc R0
	std y+54,R0
	.dbline 284
;     for( i = 0; i < ling_n; i++ )            
	clr R0
	std y+38,R0
	xjmp L59
L56:
	.dbline 285
;     {
	.dbline 286
;         LCD_write_char( r, c++, '0' );
	ldi R24,48
	std y+0,R24
	ldd R20,y+54
	mov R24,R20
	subi R24,255    ; addi 1
	std y+54,R24
	mov R18,R20
	ldd R16,y+52
	xcall _LCD_write_char
	.dbline 287
;     }
L57:
	.dbline 284
	ldd R0,y+38
	inc R0
	std y+38,R0
L59:
	.dbline 284
	ldd R0,y+38
	cp R0,R22
	brlo L56
X19:
	.dbline 289
; 
;     for( i = 0; i < kk; i++ )
	clr R0
	std y+38,R0
	xjmp L63
L60:
	.dbline 290
;     {
	.dbline 291
;         LCD_write_char( r, c++, datachar2[i] );
	movw R24,R28
	adiw R24,17
	ldd R30,y+38
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	std y+0,R2
	ldd R22,y+54
	mov R24,R22
	subi R24,255    ; addi 1
	std y+54,R24
	mov R18,R22
	ldd R16,y+52
	xcall _LCD_write_char
	.dbline 292
;     }
L61:
	.dbline 289
	ldd R0,y+38
	inc R0
	std y+38,R0
L63:
	.dbline 289
	ldd R0,y+38
	ldd R16,y+40
	cp R0,R16
	brlo L60
X20:
	.dbline -2
L45:
	.dbline 0 ; func end
	adiw R28,42
	xcall pop_xgsetF0FC
	adiw R28,4
	ret
	.dbsym l datawholetmp 34 L
	.dbsym l xiaoxhu 5 i
	.dbsym l datatemp2_f 30 D
	.dbsym r xiaoshu_n 10 c
	.dbsym r whole_fact_n 10 c
	.dbsym r zhengshu_no 10 c
	.dbsym r datawhole_n 10 c
	.dbsym l datatemp1_f 26 D
	.dbsym r zhengshu_n 20 c
	.dbsym r zhengshu 12 i
	.dbsym r ling_n 22 c
	.dbsym r xiaoshu_act_n 10 c
	.dbsym l n 41 c
	.dbsym l datachar2 17 A[9:9]c
	.dbsym l datachar1 8 A[9:9]c
	.dbsym l kk 40 c
	.dbsym l k 39 c
	.dbsym l datawhole 4 L
	.dbsym l i 38 c
	.dbsym r mm 14 i
	.dbsym l p 60 i
	.dbsym l datafloat 56 D
	.dbsym l c 54 c
	.dbsym l r 52 c
	.dbend
; }

⌨️ 快捷键说明

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