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

📄 megalcd.s

📁 ATmegal128的混合中断编程
💻 S
📖 第 1 页 / 共 3 页
字号:
; 		     {
	.dbline 189
;               adc1=temp;
	sts _adc1+1,R17
	sts _adc1,R16
	.dbline 190
; 			  ADMUX=1;
	ldi R24,1
	out 0x7,R24
	.dbline 191
; 			  break;
	xjmp L3
L6:
	.dbline 194
; 			 }
; 	     case 1:
; 		     {
	.dbline 195
;               adc2=temp;
	sts _adc2+1,R17
	sts _adc2,R16
	.dbline 196
; 			  ADMUX=0;
	clr R2
	out 0x7,R2
	.dbline 197
; 			  break;
	xjmp L3
L2:
	.dbline 200
; 			 }
; 	     default :
; 		     {
	.dbline 201
; 			  ADMUX=0;
	clr R2
	out 0x7,R2
	.dbline 202
; 			 }			 
	.dbline 203
; 		 }
L3:
	.dbline 204
;    	ADCSRA|=(1<<ADSC);//0x40	 			 	 		 
	sbi 0x6,6
	.dbline -2
	.dbline 205
;    } 
L1:
	ld R2,y+
	out 0x3f,R2
	ld R30,y+
	ld R24,y+
	ld R19,y+
	ld R18,y+
	ld R17,y+
	ld R16,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbsym r temp 16 i
	.dbend
	.dbfunc e adctoasc _adctoasc fpc
;         char_p -> R10,R11
;              i -> R12
;           temp -> R14,R15
;            adc -> R10,R11
	.even
_adctoasc::
	xcall push_gset5
	movw R10,R16
	.dbline -1
	.dbline 209
; /*     AD结果转换成电压     */
; #define vref   473
; unsigned char * adctoasc(unsigned int adc)
;     {
	.dbline 213
; 	 unsigned int temp;
; 	 unsigned char i;
; 	 unsigned char *char_p;
;      temp=(unsigned int)(((unsigned long)((unsigned long)adc*vref))/1024);
	movw R2,R10
	clr R4
	clr R5
	ldi R20,217
	ldi R21,1
	ldi R22,0
	ldi R23,0
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R16,R20
	movw R18,R22
	xcall empy32u
	ldi R24,10
	ldi R25,0
	st -y,R24
	xcall lsr32
	movw R14,R16
	.dbline 214
;      for(i=0;i<3;i++)
	clr R12
	xjmp L11
L8:
	.dbline 215
	.dbline 216
	mov R2,R12
	clr R3
	ldi R30,3
	ldi R31,0
	sub R30,R2
	sbc R31,R3
	ldi R24,<_adcval
	ldi R25,>_adcval
	add R30,R24
	adc R31,R25
	ldi R18,10
	ldi R19,0
	movw R16,R14
	xcall mod16u
	movw R24,R16
	adiw R24,48
	std z+0,R24
	.dbline 217
	ldi R18,10
	ldi R19,0
	movw R16,R14
	xcall div16u
	movw R14,R16
	.dbline 218
L9:
	.dbline 214
	inc R12
L11:
	.dbline 214
	mov R24,R12
	cpi R24,3
	brlo L8
	.dbline 219
; 	    {
; 		 adcval[3-i]=temp%10+0x30;
; 		 temp=temp/10;
; 		}
; 	 adcval[0]=adcval[1];
	lds R2,_adcval+1
	sts _adcval,R2
	.dbline 220
; 	 adcval[1]='.';	
	ldi R24,46
	sts _adcval+1,R24
	.dbline 221
; 	 adcval[4]='V';	
	ldi R24,86
	sts _adcval+4,R24
	.dbline 222
; 	 adcval[5]=0;	
	clr R2
	sts _adcval+5,R2
	.dbline 223
; 	 char_p=adcval;
	ldi R24,<_adcval
	ldi R25,>_adcval
	movw R10,R24
	.dbline 224
; 	 return char_p;
	mov R16,R24
	mov R17,R25
	.dbline -2
L7:
	xcall pop_gset5
	.dbline 0 ; func end
	ret
	.dbsym r char_p 10 pc
	.dbsym r i 12 c
	.dbsym r temp 14 i
	.dbsym r adc 10 i
	.dbend
	.dbfunc e ocmj_init _ocmj_init fV
	.even
_ocmj_init::
	.dbline -1
	.dbline 228
; 	}
; /*     OCMJ4X8LCD初始化     */
; void ocmj_init(void)
;     {
	.dbline 229
; 	 MCUCR=0;
	clr R2
	out 0x35,R2
	.dbline 230
; 	 DDRA=0xff;
	ldi R24,255
	out 0x1a,R24
	.dbline 231
; 	 PORTA=0xff;
	out 0x1b,R24
	.dbline 232
; 	 DDRE=0x80;
	ldi R24,128
	out 0x2,R24
	.dbline 233
; 	 PORTE=0xff;
	ldi R24,255
	out 0x3,R24
	.dbline 234
; 	 PORTC=0xff; 
	out 0x15,R24
	.dbline 235
; 	 DDRD=0x00;
	out 0x11,R2
	.dbline 236
; 	 PORTD=0xff;
	out 0x12,R24
	.dbline 237
; 	 clr_reset;//LCD复位
	cbi 0x15,3
	.dbline 238
; 	 delay_ms(10);
	ldi R16,10
	ldi R17,0
	xcall _delay_ms
	.dbline 239
; 	 set_reset;
	sbi 0x15,3
	.dbline 240
; 	 clr_answer;
	cbi 0x03,7
	.dbline 241
; 	 delay_ms(10);
	ldi R16,10
	ldi R17,0
	.dbline -2
	.dbline 242
; 	 }
L16:
	.dbline 0 ; func end
	xjmp _delay_ms
	.dbend
	.dbfunc e ocmj_write _ocmj_write fV
;           data -> R16
	.even
_ocmj_write::
	.dbline -1
	.dbline 245
; /*            写数据到LCD        */
; void ocmj_write(unsigned char data)
;     {
L18:
	.dbline 247
L19:
	.dbline 246
; 	 while(ask!=0)
	sbic 0x1,6
	rjmp L18
	.dbline 248
; 	      ;
;      data_port=data;
	out 0x1b,R16
	.dbline 249
;    	 wait;
	nop
	 nop
	.dbline 250
; 	 set_answer;
	sbi 0x03,7
	.dbline 251
; 	 wait;
	nop
	 nop
L21:
	.dbline 253
L22:
	.dbline 252
; 	 while(ask==0)
	sbis 0x1,6
	rjmp L21
	.dbline 254
; 	      ;		  
; 	 clr_answer; 
	cbi 0x03,7
	.dbline -2
	.dbline 255
;     }
L17:
	.dbline 0 ; func end
	ret
	.dbsym r data 16 c
	.dbend
	.dbfunc e ico_tran _ico_tran fV
;              j -> R20
;              i -> R14
;          ico_p -> R10,R11
;              y -> R12
;              x -> R22
	.even
_ico_tran::
	xcall push_gset5
	mov R12,R18
	mov R22,R16
	ldd R10,y+10
	ldd R11,y+11
	.dbline -1
	.dbline 260
; /*         传送32*32ICO点阵数据到LCD       */
; /*         x:0~15(字节为单位)  y:0~64      */
; /*         ico_p:指向图形数据的指针        */	
; void ico_tran(unsigned char x,unsigned char y,const unsigned char *ico_p)
;      {
	.dbline 262
; 	  unsigned char i,j;
; 	  x+=4;
	subi R22,252    ; addi 4
	.dbline 263
; 	  for(j=0;j<32;j++)
	clr R20
	xjmp L28
L25:
	.dbline 264
; 	     {
	.dbline 265
; 		  for(i=0;i<4;i++)
	clr R14
	xjmp L32
L29:
	.dbline 266
	.dbline 267
	ldi R16,243
	xcall _ocmj_write
	.dbline 268
	mov R16,R22
	xcall _ocmj_write
	.dbline 269
	mov R16,R12
	xcall _ocmj_write
	.dbline 270
	movw R30,R10
	lpm R16,Z
	xcall _ocmj_write
	.dbline 271
	movw R24,R10
	adiw R24,1
	movw R10,R24
	.dbline 272
	inc R22
	.dbline 273
L30:
	.dbline 265
	inc R14
L32:
	.dbline 265
	mov R24,R14
	cpi R24,4
	brlo L29
	.dbline 274
	subi R22,4
	.dbline 275
	inc R12
	.dbline 276
L26:
	.dbline 263
	inc R20
L28:
	.dbline 263
	cpi R20,32
	brlo L25
	.dbline -2
	.dbline 277
; 		    {
; 			 ocmj_write(0xf3);
; 			 ocmj_write(x);
; 			 ocmj_write(y);
; 			 ocmj_write(*ico_p);
; 			 ico_p++;
; 			 x++;
; 			}
; 		  x-=4;
; 		  y++;	
; 		 }
; 	 }
L24:
	xcall pop_gset5
	.dbline 0 ; func end
	ret
	.dbsym r j 20 c
	.dbsym r i 14 c
	.dbsym r ico_p 10 pc
	.dbsym r y 12 c
	.dbsym r x 22 c
	.dbend
	.dbfunc e cls _cls fV
;              j -> R20
;              i -> R14
;          width -> R22
;           high -> R10
;              y -> R12,R13
;              x -> y+10
	.even
_cls::
	xcall push_arg4
	xcall push_gset5
	movw R12,R18
	ldd R10,y+14
	ldd R22,y+16
	.dbline -1
	.dbline 280
; /*      清除屏幕区域      */	 
; void cls(unsigned x,unsigned y,unsigned char high,unsigned char width)
;   {
	.dbline 282
;    unsigned char i,j;
;    x+=2;
	ldd R24,y+10
	ldd R25,y+11
	adiw R24,2
	std y+10,R24
	std y+11,R25
	.dbline 283
;    for(j=0;j<high;j++)
	clr R20
	xjmp L37
L34:
	.dbline 284
;       {
	.dbline 285
;        for(i=0;i<width;i++)
	clr R14
	xjmp L41
L38:
	.dbline 286
	.dbline 287
	ldi R16,240
	xcall _ocmj_write
	.dbline 288
	ldd R16,y+10
	ldd R17,y+11
	xcall _ocmj_write
	.dbline 289
	mov R16,R12
	xcall _ocmj_write
	.dbline 290
	ldi R16,55
	xcall _ocmj_write
	.dbline 291
	ldi R16,90
	xcall _ocmj_write
	.dbline 292
	ldd R24,y+10
	ldd R25,y+11
	adiw R24,1
	std y+10,R24
	std y+11,R25
	.dbline 293
L39:
	.dbline 285
	inc R14
L41:
	.dbline 285
	cp R14,R22
	brlo L38
	.dbline 294
	mov R2,R22
	clr R3
	ldd R0,y+10
	ldd R1,y+11
	sub R0,R2
	sbc R1,R3
	std y+10,R0
	std y+11,R1
	.dbline 295
	movw R24,R12
	adiw R24,1
	movw R12,R24
	.dbline 296
L35:
	.dbline 283
	inc R20
L37:
	.dbline 283
	cp R20,R10
	brlo L34
	.dbline -2
	.dbline 297
;           {
;             ocmj_write(0xf0);
;             ocmj_write(x);
;             ocmj_write(y);
;             ocmj_write(55);
; 			ocmj_write(90);
;             x++;
;            }
;        x-=width;
;        y++;	
;       }
;   }	 
L33:
	xcall pop_gset5
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym r j 20 c
	.dbsym r i 14 c
	.dbsym r width 22 c
	.dbsym r high 10 c
	.dbsym r y 12 i
	.dbsym l x 10 i
	.dbend
	.dbfunc e bmp_tran _bmp_tran fV
;              j -> R20
;              i -> R14
;          bmp_p -> R22,R23
;          width -> R10
;           high -> R12
;              y -> y+12
;              x -> y+10
	.even
_bmp_tran::
	xcall push_arg4
	xcall push_gset5
	ldd R12,y+14
	ldd R10,y+16
	ldd R22,y+18
	ldd R23,y+19
	.dbline -1
	.dbline 304
; /*         传送bmp点阵数据到LCD            */
; /*         x:0~15(字节为单位)  y:0~64      */
; /*         bmp_p:指向图形数据的指针        */	
; /*         high:位图高度(点阵行为单位)     */
; /*         width:位图宽度(以字节为单位)

⌨️ 快捷键说明

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