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

📄 tc_clock.s

📁 在ICCAVR环境下做的ATMEGA128单片机实现模拟时钟
💻 S
📖 第 1 页 / 共 3 页
字号:
	mov R16,R12
	subi R16,255    ; addi 1
	xcall _LCD_WRITE_COM
	.dbline 257
;   LCD_WRITE_COM(y);
	mov R16,R10
	xcall _LCD_WRITE_COM
	.dbline 258
;     for(i=0;i<16;i++)
	clr R20
	xjmp L34
L31:
	.dbline 259
	.dbline 260
	ldi R24,2
	mul R24,R22
	mov R17,R0
	ldi R16,16
	muls R16,R17
	ldi R24,<_Tab_Chinesepoem+16
	ldi R25,>_Tab_Chinesepoem+16
	movw R2,R0
	add R2,R24
	adc R3,R25
	mov R30,R20
	clr R31
	add R30,R2
	adc R31,R3
	lpm R16,Z
	xcall _LCD_WRITE_DAT
	.dbline 261
L32:
	.dbline 258
	inc R20
L34:
	.dbline 258
	cpi R20,16
	brlo L31
	.dbline -2
L26:
	xcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r p 22 c
	.dbsym r y 10 c
	.dbsym r x 12 c
	.dbend
	.dbfunc e LCD_WRITE_PICTURE _LCD_WRITE_PICTURE fV
;              a -> <dead>
;              k -> R20
;              i -> R22
;              j -> R10
	.even
_LCD_WRITE_PICTURE::
	xcall push_gset3
	.dbline -1
	.dbline 274
;   {
;       LCD_WRITE_DAT(Tab_Chinesepoem[2*p+1][i]);
;   }
; }
; 
; /********************************************************
; *函数名称:LCD_WRITE_PICTURE()
; *函数功能:在LCD液晶屏上显示图片‘南华大学电气工程学院’
; *函数引用了字模软件生成的字模表Tab_pic2[][16]
; *其取模方式为  :从第一列开始向下取8个点作为一个字节
; ,然后从第二列开始向下取8个点作为第二个字节...依此类推。
; 如果最后不足8个点就补满8位。  取模顺序是从低到高,即第
; 一个点作为最低位。如*-------取为00000001
; ***********************************************************/
; void LCD_WRITE_PICTURE()
; {
	.dbline 277
;   uchar i,j,k;
;   uint a;
;   LCDCS1H;
	sbi 0x12,5
	.dbline 278
;   LCDCS2L; 
	cbi 0x12,4
	.dbline 279
;    LCD_WRITE_COM(0x3F);
	ldi R16,63
	xcall _LCD_WRITE_COM
	.dbline 280
;   LCD_WRITE_COM(0xC0);
	ldi R16,192
	xcall _LCD_WRITE_COM
	.dbline 281
;   for(k=0;k<8;k++)
	clr R20
	xjmp L40
L37:
	.dbline 282
;   {
	.dbline 283
;      LCD_WRITE_COM(0xB8+k);         //起始行,每页有八行
	mov R16,R20
	subi R16,72    ; addi 184
	xcall _LCD_WRITE_COM
	.dbline 284
; 	 LCD_WRITE_COM(0x40);              //起始列,列自动加一
	ldi R16,64
	xcall _LCD_WRITE_COM
	.dbline 285
;                for(i=0;i<4;i++)
	clr R22
	xjmp L44
L41:
	.dbline 286
;                    for(j=0;j<16;j++)
	clr R10
	xjmp L48
L45:
	.dbline 287
	.dbline 288
	ldi R24,8
	mul R24,R20
	mov R2,R22
	add R2,R0
	ldi R24,16
	mul R24,R2
	movw R2,R0
	ldi R24,<_Tab_pic2
	ldi R25,>_Tab_pic2
	add R2,R24
	adc R3,R25
	mov R30,R10
	clr R31
	add R30,R2
	adc R31,R3
	lpm R16,Z
	xcall _LCD_WRITE_DAT
	.dbline 290
L46:
	.dbline 286
	inc R10
L48:
	.dbline 286
	mov R24,R10
	cpi R24,16
	brlo L45
L42:
	.dbline 285
	inc R22
L44:
	.dbline 285
	cpi R22,4
	brlo L41
	.dbline 292
L38:
	.dbline 281
	inc R20
L40:
	.dbline 281
	cpi R20,8
	brlo L37
	.dbline 293
;                             {
;                               LCD_WRITE_DAT(Tab_pic2[i+k*8][j]);
;                               
;                             }
; 							
;   }
;    LCDCS1L;
	cbi 0x12,5
	.dbline 294
;   LCDCS2H; 
	sbi 0x12,4
	.dbline 295
;    LCD_WRITE_COM(0x3F);
	ldi R16,63
	xcall _LCD_WRITE_COM
	.dbline 296
;   LCD_WRITE_COM(0xC0);
	ldi R16,192
	xcall _LCD_WRITE_COM
	.dbline 297
;   for(k=0;k<8;k++)
	clr R20
	xjmp L52
L49:
	.dbline 298
;     {
	.dbline 299
;          LCD_WRITE_COM(0xB8+k);         //起始行,每页有八行
	mov R16,R20
	subi R16,72    ; addi 184
	xcall _LCD_WRITE_COM
	.dbline 300
; 	     LCD_WRITE_COM(0x40);              //起始列,列自动加一
	ldi R16,64
	xcall _LCD_WRITE_COM
	.dbline 301
;                for(i=0;i<4;i++)
	clr R22
	xjmp L56
L53:
	.dbline 302
;                    for(j=0;j<16;j++)
	clr R10
	xjmp L60
L57:
	.dbline 303
	.dbline 304
	ldi R24,8
	mul R24,R20
	mov R24,R22
	subi R24,252    ; addi 4
	add R24,R0
	ldi R25,16
	mul R25,R24
	movw R2,R0
	ldi R24,<_Tab_pic2
	ldi R25,>_Tab_pic2
	add R2,R24
	adc R3,R25
	mov R30,R10
	clr R31
	add R30,R2
	adc R31,R3
	lpm R16,Z
	xcall _LCD_WRITE_DAT
	.dbline 306
L58:
	.dbline 302
	inc R10
L60:
	.dbline 302
	mov R24,R10
	cpi R24,16
	brlo L57
L54:
	.dbline 301
	inc R22
L56:
	.dbline 301
	cpi R22,4
	brlo L53
	.dbline 307
L50:
	.dbline 297
	inc R20
L52:
	.dbline 297
	cpi R20,8
	brlo L49
	.dbline -2
L36:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym l a 1 i
	.dbsym r k 20 c
	.dbsym r i 22 c
	.dbsym r j 10 c
	.dbend
	.dbfunc e LCD_CLS _LCD_CLS fV
;              i -> R20
;              j -> R22
	.even
_LCD_CLS::
	xcall push_gset2
	sbiw R28,1
	.dbline -1
	.dbline 311
;                             {
;                               LCD_WRITE_DAT(Tab_pic2[i+4+k*8][j]);        
;                               
;                             }
;      }
; }
; /***************12864液晶清屏**********************/
; void LCD_CLS()
; {
	.dbline 313
;   uchar i,j;
;   LCDCS1H;         //清左边屏幕
	sbi 0x12,5
	.dbline 314
;   LCDCS2L;
	cbi 0x12,4
	.dbline 315
;   LCD_WRITE_COM(0x3F);
	ldi R16,63
	xcall _LCD_WRITE_COM
	.dbline 316
;   LCD_WRITE_COM(0xC0);
	ldi R16,192
	xcall _LCD_WRITE_COM
	.dbline 317
;   for(i=0;i<4;i++)
	clr R20
	xjmp L65
L62:
	.dbline 318
;     for(j=0;j<8;j++)
	clr R22
	xjmp L69
L66:
	.dbline 319
	.dbline 320
	ldi R24,12
	std y+0,R24
	mov R18,R22
	mov R16,R20
	xcall _LCD_WRITE_ADD_CHAR
	.dbline 321
L67:
	.dbline 318
	inc R22
L69:
	.dbline 318
	cpi R22,8
	brlo L66
L63:
	.dbline 317
	inc R20
L65:
	.dbline 317
	cpi R20,4
	brlo L62
	.dbline 323
; 	{
; 	   LCD_WRITE_ADD_CHAR(i,j,0x0C);
; 	}
; 	
;    LCDCS1L;       //清右边屏幕
	cbi 0x12,5
	.dbline 324
;    LCDCS2H;
	sbi 0x12,4
	.dbline 325
;    LCD_WRITE_COM(0x3F);
	ldi R16,63
	xcall _LCD_WRITE_COM
	.dbline 326
;    LCD_WRITE_COM(0xC0);
	ldi R16,192
	xcall _LCD_WRITE_COM
	.dbline 327
;   for(i=0;i<4;i++)
	clr R20
	xjmp L73
L70:
	.dbline 328
;     for(j=0;j<8;j++)
	clr R22
	xjmp L77
L74:
	.dbline 329
	.dbline 330
	ldi R24,12
	std y+0,R24
	mov R18,R22
	mov R16,R20
	xcall _LCD_WRITE_ADD_CHAR
	.dbline 331
L75:
	.dbline 328
	inc R22
L77:
	.dbline 328
	cpi R22,8
	brlo L74
L71:
	.dbline 327
	inc R20
L73:
	.dbline 327
	cpi R20,4
	brlo L70
	.dbline -2
L61:
	adiw R28,1
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r j 22 c
	.dbend
	.dbfunc e Timer1_INIT _Timer1_INIT fV
	.even
_Timer1_INIT::
	.dbline -1
	.dbline 338
; 	{
; 	   LCD_WRITE_ADD_CHAR(i,j,0x0C);
; 	}
; }									  
; 
; //定时器0溢出中断函数
; 
; /*****************************************/
; void   Timer1_INIT()
; {
	.dbline 339
;    TCNT1H=0xB9;                    //在18.432MHz晶振下,取1024分频时钟设初值
	ldi R24,185
	out 0x2d,R24
	.dbline 340
;    TCNT1L=0xAF;
	ldi R24,175
	out 0x2c,R24
	.dbline 341
;    TCCR1A=0x00;                    //普通模式
	clr R2
	out 0x2f,R2
	.dbline 342
;    TCCR1B|=0x05;                   //时钟选择为1024分频模式
	in R24,0x2e
	ori R24,5
	out 0x2e,R24
	.dbline 343
;    SREG|=BIT(7);                       //使能全局中断
	bset 7
	.dbline 344
;    TIMSK|=0x04;                        //TIMSK的bit2为定时器1溢出中断使能
	in R24,0x37
	ori R24,4
	out 0x37,R24
	.dbline -2
L78:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e Timer1_int _Timer1_int fV
	.even
_Timer1_int::
	st -y,R2
	st -y,R24
	st -y,R25
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 351
	.dbline 352
	ldi R24,185
	out 0x2d,R24
	.dbline 353
	ldi R24,175
	out 0x2c,R24
	.dbline 354
	lds R24,_sec
	subi R24,255    ; addi 1
	sts _sec,R24
	.dbline 355
	cpi R24,60
	brne L80
	.dbline 356
	.dbline 357
	clr R2
	sts _sec,R2
	.dbline 358
	lds R24,_min
	subi R24,255    ; addi 1
	sts _min,R24
	.dbline 359
L80:
	.dbline -2
L79:
	ld R2,y+
	out 0x3f,R2
	ld R25,y+
	ld R24,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e CLOCK _CLOCK fV
	.even
_CLOCK::
	xcall push_gset2
	.dbline -1
	.dbline 362
; }
; /****************************************
; * 名称:Timer1_int()                定时器1中断函数
; * 功能:实现秒计数
; **************************************/
; void  Timer1_int()
; {
;     TCNT1H=0xB9;                   //重装初值
;     TCNT1L=0xAF;
; 	sec++;
; 	if(sec==60)
; 	{
; 	sec=0;
; 	min++;
; 	}
; }
; void CLOCK()
; {
	.dbline 363
;   if(min==60)
	lds R24,_min
	cpi R24,60
	breq X1
	xjmp L83
X1:
	.dbline 364
;     {
	.dbline 365
; 	min=0;
	clr R2
	sts _min,R2
	.dbline 366
; 	hour++;
	lds R24,_hour
	subi R24,255    ; addi 1
	sts _hour,R24
	.dbline 367
; 	if(hour==24)
	cpi R24,24
	breq X2
	xjmp L85
X2:
	.dbline 368
; 	   {
	.dbline 369
; 	   hour=0;
	sts _hour,R2
	.dbline 370
; 	   date++;
	lds R24,_date
	subi R24,255    ; addi 1
	sts _date,R24
	.dbline 371
; 	    day++;
	lds R24,_day
	subi R24,255    ; addi 1
	sts _day,R24
	.dbline 372
; 		if(day==8)
	cpi R24,8
	brne L87
	.dbline 373
; 		{day=1;}
	.dbline 373
	ldi R24,1
	sts _day,R24
	.dbline 373
L87:
	.dbline 374
; 	     if(date==32&&((mon==1)|(mon==3)||(mon==5)||(mon==7)||(mon==8)||(mon==10)||(mon==12)))
	lds R24,_date
	cpi R24,32
	brne L89
	lds R24,_mon
	cpi R24,1
	brne L92
	ldi R22,1
	ldi R23,0
	xjmp L93
L92:
	clr R22
	clr R23
L93:
	lds R24,_mon
	cpi R24,3
	brne L94
	ldi R20,1
	ldi R21,0
	xjmp L95
L94:
	clr R20
	clr R21
L95:
	movw R2,R22
	or R2,R20
	or R3,R21
	tst R2
	brne L99
	tst R3
	brne L99
X0:
	lds R24,_mon
	cpi R24,5
	breq L99
	cpi R24,7
	breq L99
	cpi R24,8
	breq L99
	cpi R24,10
	breq L99
	cpi R24,12
	brne L89
L99:
	.dbline 375
; 		   {
	.dbline 376
; 		    date=1;
	ldi R24,1
	sts _date,R24
	.dbline 377
; 			mon++;
	lds R24,_mon
	subi R24,255    ; addi 1
	sts _mon,R24
	.dbline 378
; 			}
L89:
	.dbline 379
; 		  if(date==31&&mon!=2)
	lds R24,_date
	cpi R24,31
	brne L100
	lds R24,_mon
	cpi R24,2
	breq L100
	.dbline 380
; 		   {
	.dbline 381
; 		     date=1;
	ldi R24,1
	sts _date,R24
	.dbline 382
; 			 mon++;
	lds R24,_mon
	subi R24,255    ; addi 1
	sts _mon,R24
	.dbline 383
; 		   }	
L100:
	.dbline 384
; 		  if(date==29&&mon==2&&year%4==0)
	lds R24,_date
	cpi R24,29
	brne L102
	lds R24,_mon
	cpi R24,2
	brne L102
	ldi R17,4
	lds R16,_year
	xcall mod8u
	tst R16
	brne L102
	.dbline 385
; 		  {
	.dbline 386
; 		  date=1;
	ldi R24,1
	sts _date,R24
	.dbline 387
; 		  mon++;
	lds R24,_mon
	subi R24,255    ; addi 1
	sts _mon,R24
	.dbline 388
; 		  }
L102:
	.dbline 389
; 		   if(date==30&&mon==2&&year%4!=0)
	lds R24,_date
	cpi R24,30
	brne L104
	lds R24,_mon
	cpi R24,2
	brne L104
	ldi R17,4
	lds R16,_year
	xcall mod8u
	tst R16
	breq L104
	.dbline 390
; 		   {
	.dbline 391
; 		   date=1;
	ldi R24,1
	sts _date,R24
	.dbline 392
; 		   mon++;
	lds R24,_mon
	subi R24,255    ; addi 1
	sts _mon,R24
	.dbline 393
; 		   }
L104:
	.dbline 394
; 	   }
L85:
	.dbline 395
; 	   if(mon==13)
	lds R24,_mon
	cpi R24,13
	brne L106
	.dbline 396
; 	     {
	.dbline 397
; 	       mon=0;
	clr R2
	sts _mon,R2
	.dbline 398
; 		   year++;
	lds R24,_year
	subi R24,255    ; addi 1
	sts _year,R24
	.dbline 399
; 		   if(year==100)
	cpi R24,100
	brne L108
	.dbline 400
; 		   {year=0;}
	.dbline 400
	sts _year,R2
	.dbline 400
L108:
	.dbline 401
; 	     }
L106:
	.dbline 402
L83:
	.dbline -2
L82:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e keyscan _keyscan fc
;            key -> R16
;             st -> R16
	.even
_keyscan::
	.dbline -1
	.dbline 413
; 	}
; }
; 
; /*********************************************
; *函数名称:

⌨️ 快捷键说明

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