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

📄 ps2_study.s

📁 基于ps/2接口协议的键盘学习机,采用128*64LCD显示,使用单片机为,mega16
💻 S
📖 第 1 页 / 共 5 页
字号:
	.dbline 255
;   for(j=0;j<4;j++)
	clr R20
	xjmp L77
L74:
	.dbline 256
;   {
	.dbline 258
;     
;     LCD_write_data(x, y+j, *(data+p), L_R);
	std y+2,R10
	mov R30,R22
	clr R31
	add R30,R12
	adc R31,R13
	lpm R30,Z
	std y+0,R30
	ldd R18,y+15
	add R18,R20
	ldd R16,y+13
	xcall _LCD_write_data
	.dbline 260
; 	
; 	for (i = p; i < p+32; i++)
	mov R14,R22
	xjmp L81
L78:
	.dbline 261
	.dbline 262
	mov R18,R10
	mov R30,R14
	clr R31
	add R30,R12
	adc R31,R13
	lpm R16,Z
	xcall _LCD_write
	.dbline 263
L79:
	.dbline 260
	inc R14
L81:
	.dbline 260
	mov R24,R22
	subi R24,224    ; addi 32
	cp R14,R24
	brlo L78
	.dbline 264
	subi R22,224    ; addi 32
	.dbline 265
L75:
	.dbline 255
	inc R20
L77:
	.dbline 255
	cpi R20,4
	brlo L74
	.dbline -2
	.dbline 266
;     {
;       LCD_write(*(data + i), L_R);
;     }
; 	p=p+32;
;   }
; }
L73:
	adiw R28,3
	xcall pop_gset5
	adiw R28,4
	.dbline 0 ; func end
	ret
	.dbsym r j 20 c
	.dbsym r p 22 c
	.dbsym r i 14 c
	.dbsym r L_R 10 c
	.dbsym r data 12 pc
	.dbsym l y 15 c
	.dbsym l x 13 c
	.dbend
	.dbfunc e LCD_char _LCD_char fV
;              i -> R20
;            L_R -> R22
;           data -> R10,R11
;              y -> R12
;              x -> R14
	.even
_LCD_char::
	xcall push_gset5
	mov R12,R18
	mov R14,R16
	sbiw R28,3
	ldd R10,y+13
	ldd R11,y+14
	ldd R22,y+15
	.dbline -1
	.dbline 269
; //////////////////////////////////////////////////////////////////////
; void LCD_char(char x,char y,unsigned char const *data,char L_R)
; {
	.dbline 271
;   char i;
;   LCD_write_data(x, y, *data, L_R);
	std y+2,R22
	movw R30,R10
	lpm R30,Z
	std y+0,R30
	mov R18,R12
	mov R16,R14
	xcall _LCD_write_data
	.dbline 272
;   for (i = 1; i < 8; i++)
	ldi R20,1
	xjmp L86
L83:
	.dbline 273
	.dbline 274
	mov R18,R22
	mov R30,R20
	clr R31
	add R30,R10
	adc R31,R11
	lpm R16,Z
	xcall _LCD_write
	.dbline 275
L84:
	.dbline 272
	inc R20
L86:
	.dbline 272
	cpi R20,8
	brlo L83
	.dbline 277
;   {
;    LCD_write(*(data + i), L_R);
;   }
;  
;   LCD_write_data(x, y + 1, *(data + 8), L_R);
	std y+2,R22
	movw R30,R10
	adiw R30,8
	lpm R30,Z
	std y+0,R30
	mov R18,R12
	subi R18,255    ; addi 1
	mov R16,R14
	xcall _LCD_write_data
	.dbline 278
;   for (i = 9; i < 16; i++)
	ldi R20,9
	xjmp L90
L87:
	.dbline 279
	.dbline 280
	mov R18,R22
	mov R30,R20
	clr R31
	add R30,R10
	adc R31,R11
	lpm R16,Z
	xcall _LCD_write
	.dbline 281
L88:
	.dbline 278
	inc R20
L90:
	.dbline 278
	cpi R20,16
	brlo L87
	.dbline -2
	.dbline 282
;   {
;   LCD_write(*(data + i), L_R);
;   }
; }
L82:
	adiw R28,3
	xcall pop_gset5
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r L_R 22 c
	.dbsym r data 10 pc
	.dbsym r y 12 c
	.dbsym r x 14 c
	.dbend
	.dbfunc e return_last _return_last fV
;              n -> R20
	.even
_return_last::
	xcall push_gset1
	mov R20,R16
	sbiw R28,3
	.dbline -1
	.dbline 305
; 
; 
; /*void LCD_pic(char x,char y,unsigned char const *data,char L_R)
; {
;   int i,j;
;    int p=0;
;   LED_ini();
;   for(j=0;j<8;j++)
;   {
;     
;     LCD_write_data(x, y+j, *(data+p), L_R);
; 	
; 	for (i = p; i < p+64; i++)
;     {
;       LCD_write(*(data + i), L_R);
;     }
; 	p=p+64;
;   }
;   
; }*/
; /////////////////////////////////////////////////////////////
; void return_last(unsigned char n)
; {
	.dbline 306
;   LCD_China(0,n,fan,0);
	clr R2
	std y+2,R2
	ldi R24,<_fan
	ldi R25,>_fan
	std y+0,R24
	std y+1,R25
	mov R18,R20
	clr R16
	xcall _LCD_China
	.dbline 307
;   LCD_China(17,n,hui,0);
	clr R2
	std y+2,R2
	ldi R24,<_hui
	ldi R25,>_hui
	std y+0,R24
	std y+1,R25
	mov R18,R20
	ldi R16,17
	xcall _LCD_China
	.dbline 308
;   LCD_China(33,n,qing3,0);
	clr R2
	std y+2,R2
	ldi R24,<_qing3
	ldi R25,>_qing3
	std y+0,R24
	std y+1,R25
	mov R18,R20
	ldi R16,33
	xcall _LCD_China
	.dbline 309
;   LCD_China(49,n,an,0);
	clr R2
	std y+2,R2
	ldi R24,<_an
	ldi R25,>_an
	std y+0,R24
	std y+1,R25
	mov R18,R20
	ldi R16,49
	xcall _LCD_China
	.dbline 310
;   LCD_char(20,n,EE,1);
	ldi R24,1
	std y+2,R24
	ldi R24,<_EE
	ldi R25,>_EE
	std y+0,R24
	std y+1,R25
	mov R18,R20
	ldi R16,20
	xcall _LCD_char
	.dbline 311
;   LCD_char(28,n,s,1);
	ldi R24,1
	std y+2,R24
	ldi R24,<_s
	ldi R25,>_s
	std y+0,R24
	std y+1,R25
	mov R18,R20
	ldi R16,28
	xcall _LCD_char
	.dbline 312
;   LCD_char(36,n,c,1);
	ldi R24,1
	std y+2,R24
	ldi R24,<_c
	ldi R25,>_c
	std y+0,R24
	std y+1,R25
	mov R18,R20
	ldi R16,36
	xcall _LCD_char
	.dbline -2
	.dbline 313
; }
L91:
	adiw R28,3
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r n 20 c
	.dbend
	.dbfunc e Meu_ini _Meu_ini fV
;              i -> R20
	.even
_Meu_ini::
	xcall push_gset1
	sbiw R28,3
	.dbline -1
	.dbline 317
; //////////////////////////////////////////////////////////////////////////
; 
; void Meu_ini(void)
; {
	.dbline 318
;   char i=0;
	clr R20
	.dbline 319
;   LCD_write_command(0xc0, 0);//初始化x,y地址
	clr R18
	ldi R16,192
	xcall _LCD_write_command
	.dbline 320
;   LCD_write_command(0xc0, 1);//初始化x,y地址
	ldi R18,1
	ldi R16,192
	xcall _LCD_write_command
	.dbline 321
;   LCD_China_ini(0,4,zhao,0);
	clr R2
	std y+2,R2
	ldi R24,<_zhao
	ldi R25,>_zhao
	std y+0,R24
	std y+1,R25
	ldi R18,4
	clr R16
	xcall _LCD_China_ini
	.dbline 322
;   LCD_China_ini(32,4,qing,0);
	clr R2
	std y+2,R2
	ldi R24,<_qing
	ldi R25,>_qing
	std y+0,R24
	std y+1,R25
	ldi R18,4
	ldi R16,32
	xcall _LCD_China_ini
	.dbline 323
;   LCD_China_ini(0,4,xue,1);
	ldi R24,1
	std y+2,R24
	ldi R24,<_xue
	ldi R25,>_xue
	std y+0,R24
	std y+1,R25
	ldi R18,4
	clr R16
	xcall _LCD_China_ini
	.dbline 324
;   LCD_China_ini(32,4,yuan,1);
	ldi R24,1
	std y+2,R24
	ldi R24,<_yuan
	ldi R25,>_yuan
	std y+0,R24
	std y+1,R25
	ldi R18,4
	ldi R16,32
	xcall _LCD_China_ini
	xjmp L94
L93:
	.dbline 327
	.dbline 328
	ldi R16,90
	ldi R17,0
	xcall _Delaynms
	.dbline 329
	clr R18
	mov R16,R20
	ori R16,192
	xcall _LCD_write_command
	.dbline 330
	ldi R18,1
	mov R16,R20
	ori R16,192
	xcall _LCD_write_command
	.dbline 331
	inc R20
	.dbline 332
L94:
	.dbline 326
;   
;   while (17 != i)
	cpi R20,17
	brne L93
	.dbline 333
;  {
;   Delaynms(90);
;   LCD_write_command(0Xc0 | i, 0);
;   LCD_write_command(0Xc0 | i, 1);
;   i++;
;  }
;  LCD_China(1,8,dian,0);
	clr R2
	std y+2,R2
	ldi R24,<_dian
	ldi R25,>_dian
	std y+0,R24
	std y+1,R25
	ldi R18,8
	ldi R16,1
	xcall _LCD_China
	.dbline 334
;  LCD_China(22,8,zhi,0);
	clr R2
	std y+2,R2
	ldi R24,<_zhi
	ldi R25,>_zhi
	std y+0,R24
	std y+1,R25
	ldi R18,8
	ldi R16,22
	xcall _LCD_China
	.dbline 335
;  LCD_China(43,8,xin,0);
	clr R2
	std y+2,R2
	ldi R24,<_xin
	ldi R25,>_xin
	std y+0,R24
	std y+1,R25
	ldi R18,8
	ldi R16,43
	xcall _LCD_China
	.dbline 336
;  LCD_China(1,8,xi,1);
	ldi R24,1
	std y+2,R24
	ldi R24,<_xi
	ldi R25,>_xi
	std y+0,R24
	std y+1,R25
	ldi R18,8
	ldi R16,1
	xcall _LCD_China
	.dbline 337
;  LCD_China(22,8,gong,1);
	ldi R24,1
	std y+2,R24
	ldi R24,<_gong
	ldi R25,>_gong
	std y+0,R24
	std y+1,R25
	ldi R18,8
	ldi R16,22
	xcall _LCD_China
	.dbline 338
;  LCD_China(43,8,cheng,1);
	ldi R24,1
	std y+2,R24
	ldi R24,<_cheng
	ldi R25,>_cheng
	std y+0,R24
	std y+1,R25
	ldi R18,8
	ldi R16,43
	xcall _LCD_China
	xjmp L97
L96:
	.dbline 340
	.dbline 341
	ldi R16,90
	ldi R17,0
	xcall _Delaynms
	.dbline 342
	clr R18
	mov R16,R20
	ori R16,192
	xcall _LCD_write_command
	.dbline 343
	ldi R18,1
	mov R16,R20
	ori R16,192
	xcall _LCD_write_command
	.dbline 344
	inc R20
	.dbline 345
L97:
	.dbline 339
;  while (32!= i)
	cpi R20,32
	brne L96
	.dbline 346
;  {
;   Delaynms(90);
;   LCD_write_command(0Xc0 | i, 0);
;   LCD_write_command(0Xc0 | i, 1);
;   i++;
;  }
;  LCD_China(40,10,cai,0);
	clr R2
	std y+2,R2
	ldi R24,<_cai
	ldi R25,>_cai
	std y+0,R24
	std y+1,R25
	ldi R18,10
	ldi R16,40
	xcall _LCD_China
	.dbline 347
;  LCD_China(0,10,chu,1);
	ldi R24,1
	std y+2,R24
	ldi R24,<_chu
	ldi R25,>_chu
	std y+0,R24
	std y+1,R25
	ldi R18,10
	clr R16
	xcall _LCD_China
	.dbline 348
;  LCD_China(23,10,bin,1);
	ldi R24,1
	std y+2,R24
	ldi R24,<_bin
	ldi R25,>_bin
	std y+0,R24
	std y+1,R25
	ldi R18,10
	ldi R16,23
	xcall _LCD_China
	.dbline 349
;  i = 24;
	ldi R20,24
	xjmp L100
L99:
	.dbline 351
	.dbline 352
	ldi R16,90
	ldi R17,0
	xcall _Delaynms
	.dbline 353
L100:
	.dbline 350
;  while (i--)
	mov R2,R20
	clr R3
	subi R20,1
	tst R2
	brne L99
	.dbline 354
;  {
;   Delaynms(90);
;  }
;  LCD_clear();
	xcall _LCD_clear
	.dbline 355
;  LCD_write_command(0Xc0, 0);
	clr R18
	ldi R16,192
	xcall _LCD_write_command
	.dbline 356
;  LCD_write_command(0Xc0, 1);
	ldi R18,1
	ldi R16,192
	xcall _LCD_write_command
	.dbline -2
	.dbline 358
;  
; }
L92:
	adiw R28,3
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbend
	.dbfunc e usart_init _usart_init fV
	.even
_usart_init::
	.dbline -1
	.dbline 361
; //////////////////////////////////////////////////////
; void usart_init(void)
; {
	.dbline 362
; UCSRB=0X00;
	clr R2
	out 0xa,R2
	.dbline 363
;   UCSRC=(1<<URSEL)|(1<<UMSEL)|(1<<UPM0)|(1<<UPM1)|(3<<UCSZ0);
	ldi R24,246
	out 0x20,R24
	.dbline 367
;   //UCSRC=BIT(URSEL)|0x06|(1<<UPM1)|(1<<UPM0);//设置数据位数
;   ///UBRRH=0x33;//set band
;   //UBRRL=0X00;
;   UBRRH=0x00;//set band
	out 0x20,R2
	.dbline 368
;   UBRRL=0X27;
	ldi R24,39
	out 0x9,R24
	.dbline 369
;   UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);//数据接收和发送允许,接收完成中断允许
	ldi R24,152
	out 0xa,R24
	.dbline -2
	.dbline 371
; //SEI();
; }
L102:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e time0_init _time0_init fV
	.even
_time0_init::
	.dbline -1
	.dbline 373
; void time0_init(void)
; {
	.dbline 375
;   //TCCR0=(1<<CS00);//8分频
;   TCCR0=0x00;//8分频
	clr R2
	out 0x33,R2
	.dbline 376
;   TCNT0=0X38;
	ldi R24,56
	out 0x32,R24
	.dbline 377
;   TIMSK=(1<<TOIE0);
	ldi R24,1
	out 0x39,R24
	.dbline -2
	.dbline 378
; }
L103:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 36
	jmp _timer0_ovf_isr
	.area text(rom, con, rel)
	.dbfile D:\my_work\ps2_study\ps2_study.c
	.dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
	.even
_timer0_ovf_isr::
	st -y,R2
	st -y,R3
	st -y,R24
	st -y,R25
	st -y,R30
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 382
; ////////////////////////////////
; #pragma interrupt_handler timer0_ovf_isr:10
; void timer0_ovf_isr(void)
; {
	.dbline 383
;  flag_time0++;
	lds R24,_flag_time0
	subi R24,255    ; addi 1
	sts _flag_time0,R24
	.dbline 384
;  if(flag_time0==5)
	cpi R24,5
	brne L105
	.dbline 385
;  {
	.dbline 386
;    flag_time0=0;
	clr R2
	sts _flag_time0,R2
	.dbline 387
;    flag_ms++;
	lds R24,_flag_ms
	lds R25,_flag_ms+1
	adiw R24,1
	sts _flag_ms+1,R25
	sts _flag_ms,R24
	.dbline 388
;    if(flag_ms==1000)
	cpi R24,232
	ldi R30,3
	cpc R25,R30
	brne L107
	.dbline 389
;    {
	.dbline 390
;      flag_ms=0;
	clr R3
	sts _flag_ms+1,R3
	sts _flag_ms,R2
	.dbline 391
;      flag_ts++;
	lds R24,_flag_ts
	subi R24,255    ; addi 1
	sts _flag_ts,R24
	.dbline 392
;    }
L107:
	.dbline 393
;  }
L105:
	.dbline 394
;  TCNT0 = 0x38;//reload counter value
	ldi R24,56
	out 0x32,R24
	.dbline -2
	.dbline 395
; }
L104:
	ld R2,y+
	out 0x3f,R2
	ld R30,y+
	ld R25,y+
	ld R24,y+
	ld R3,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e char_display _char_display fV
	.even
_char_display::
	sbiw R28,3
	.dbline -1
	.dbline 398
; /////////////////////////////////////////////////////
; void char_display(void)
; {
	.dbline 399
;   if(flag_char1==1)
	lds R24,_flag_char1
	cpi R24,1
	breq X0
	xjmp L110
X0:
	.dbline 400
;   {
	.dbline 401
;     LCD_clear();
	xcall _LCD_clear
	.dbline 402
;   LCD_char(9,0,b,0);
	clr R2
	std y+2,R2
	ldi R24,<_b
	ldi R25,>_b
	std y+0,R24
	std y+1,R25
	clr R18
	ldi R16,9
	xcall _LCD_char
	.dbline 403
;    LCD_char(27,0,d,0);
	clr R2
	std y+2,R2
	ldi R24,<_d
	ldi R25,>_d
	std y+0,R24
	std y+1,R25
	clr R18
	ldi R16,27
	xcall _LCD_char
	.dbline 404
;    LCD_char(36,0,e,0);
	clr R2
	std y+2,R2
	ldi R24,<_e
	ldi R25,>_e
	std y+0,R24
	std y+1,R25
	clr R18
	ldi R16,36
	xcall _LCD_char
	.dbline 405
;    LCD_char(54,0,g,0);
	clr R2
	std y+2,R2
	ldi R24,<_g
	ldi R25,>_g
	std y+0,R24
	std y+1,R25
	clr R18
	ldi R16,54
	xcall _LCD_char
	.dbline 406
;    LCD_char(9,4,i,0);
	clr R2
	std y+2,R2
	ldi R24,<_i
	ldi R25,>_i
	std y+0,R24
	std y+1,R25
	ldi R18,4
	ldi R16,9
	xcall _LCD_char
	.dbline 407
;    LCD_char(18,4,j,0);
	clr R2
	std y+2,R2
	ldi R24,<_j
	ldi R25,>_j
	std y+0,R24
	std y+1,R25

⌨️ 快捷键说明

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