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

📄 ps2_study.s

📁 基于ps/2接口协议的键盘学习机,采用128*64LCD显示,使用单片机为,mega16
💻 S
📖 第 1 页 / 共 5 页
字号:
	ldi R16,2
	ldi R17,0
	xcall _Delaynus
L4:
	.dbline 92
L5:
	.dbline 91
;   while(data_in & BUSY)
	sbic 0x19,7
	rjmp L4
	.dbline 93
;       ;
;     CLR_E();
	cbi 0x12,6
	.dbline 94
; 	data_DDR=0XFF;
	ldi R24,255
	out 0x1a,R24
	.dbline -2
	.dbline 96
; 
; }
L1:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r L_R 20 c
	.dbend
	.dbfunc e LCD_write _LCD_write fV
;            L_R -> R22
;           data -> R20
	.even
_LCD_write::
	xcall push_gset2
	mov R22,R18
	mov R20,R16
	.dbline -1
	.dbline 100
; ///////////////////////////////////////////////////////////////////
; 
; void LCD_write (unsigned char data,char L_R)
; {
	.dbline 101
;   LCD_Test(L_R);
	mov R16,R22
	xcall _LCD_Test
	.dbline 102
;   SET_D_I();
	sbi 0x12,4
	.dbline 103
;   CLR_R_W();
	cbi 0x12,5
	.dbline 104
;   SET_E();
	sbi 0x12,6
	.dbline 105
;   data_OUT=data;
	out 0x1b,R20
	.dbline 106
;   CLR_E();
	cbi 0x12,6
	.dbline -2
	.dbline 107
; }
L7:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r L_R 22 c
	.dbsym r data 20 c
	.dbend
	.dbfunc e LCD_write_command _LCD_write_command fV
;            L_R -> R22
;           data -> R20
	.even
_LCD_write_command::
	xcall push_gset2
	mov R22,R18
	mov R20,R16
	.dbline -1
	.dbline 110
; 
; void LCD_write_command(unsigned char data,char L_R)
; {
	.dbline 111
;   LCD_Test(L_R);
	mov R16,R22
	xcall _LCD_Test
	.dbline 112
;   CLR_D_I();
	cbi 0x12,4
	.dbline 113
;   CLR_R_W();
	cbi 0x12,5
	.dbline 114
;   SET_E();
	sbi 0x12,6
	.dbline 115
;   data_OUT=data;
	out 0x1b,R20
	.dbline 116
;   CLR_E();
	cbi 0x12,6
	.dbline -2
	.dbline 117
; }
L8:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r L_R 22 c
	.dbsym r data 20 c
	.dbend
	.dbfunc e LCD_write_data _LCD_write_data fV
;            L_R -> R22
;           data -> y+6
;              y -> R20
;              x -> R10
	.even
_LCD_write_data::
	xcall push_gset3
	mov R20,R18
	mov R10,R16
	ldd R22,y+8
	.dbline -1
	.dbline 121
; 
; 
; void LCD_write_data( char x ,char y,unsigned char  data,char L_R)//设置xy地址
; {
	.dbline 122
;   LCD_Test(L_R);
	mov R16,R22
	xcall _LCD_Test
	.dbline 123
;   x=DIS_X | (x & MAX_X);
	mov R24,R10
	andi R24,63
	ori R24,64
	mov R10,R24
	.dbline 124
;   y=DIS_Y | (y & MAX_Y);
	mov R24,R20
	andi R24,7
	ori R24,184
	mov R20,R24
	.dbline 127
;  //x=x | 0x40;
;  //y=y |0xb8;
;   if(L_R)
	tst R22
	breq L10
	.dbline 128
;   {
	.dbline 129
;     SET_CS1();
	sbi 0x12,2
	.dbline 130
; 	CLR_CS2();
	cbi 0x12,3
	.dbline 131
;   }
	xjmp L11
L10:
	.dbline 133
;   else
;   {
	.dbline 134
;     SET_CS2();
	sbi 0x12,3
	.dbline 135
; 	CLR_CS1();
	cbi 0x12,2
	.dbline 136
;   }
L11:
	.dbline 137
;   LCD_write_command(x,L_R);//设置x,y的地址
	mov R18,R22
	mov R16,R10
	xcall _LCD_write_command
	.dbline 138
;   LCD_write_command(y,L_R);
	mov R18,R22
	mov R16,R20
	xcall _LCD_write_command
	.dbline -2
	.dbline 140
;   //LCD_write(data,L_R);
; }
L9:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r L_R 22 c
	.dbsym l data 6 c
	.dbsym r y 20 c
	.dbsym r x 10 c
	.dbend
	.dbfunc e LED_ini _LED_ini fV
;              j -> <dead>
;              i -> <dead>
	.even
_LED_ini::
	.dbline -1
	.dbline 146
; 
; //////////////////////////////
; 
; 
; void LED_ini(void)
; {
	.dbline 148
;   char i,j;
;   COMMAND_INI();
	in R24,0x11
	ori R24,124
	out 0x11,R24
	.dbline 150
;   
;   data_DDR=0XFF;
	ldi R24,255
	out 0x1a,R24
	.dbline 151
;   LCD_write_command(LCD_OFF,LEFT);
	clr R18
	ldi R16,62
	xcall _LCD_write_command
	.dbline 152
;   LCD_write_command(LCD_OFF,RIGHT);
	ldi R18,1
	ldi R16,62
	xcall _LCD_write_command
	.dbline 153
;   LCD_write_command(LCD_ON,LEFT);
	clr R18
	ldi R16,63
	xcall _LCD_write_command
	.dbline 154
;   LCD_write_command(LCD_ON,RIGHT);
	ldi R18,1
	ldi R16,63
	xcall _LCD_write_command
	.dbline 155
;   LCD_write_command(0xc0,LEFT);
	clr R18
	ldi R16,192
	xcall _LCD_write_command
	.dbline 156
;   LCD_write_command(0xc0,RIGHT);
	ldi R18,1
	ldi R16,192
	.dbline -2
	.dbline 157
; }
L12:
	.dbline 0 ; func end
	xjmp _LCD_write_command
	.dbsym l j 1 c
	.dbsym l i 1 c
	.dbend
	.dbfunc e LCD_clear _LCD_clear fV
;              j -> <dead>
;              i -> R20
	.even
_LCD_clear::
	xcall push_gset1
	sbiw R28,8
	.dbline -1
	.dbline 159
; void LCD_clear(void)
; {
	.dbline 161
;  char i, j;
;  for (i = 0; i < MAX_Y + 1; i++)
	clr R20
	xjmp L17
L14:
	.dbline 162
	.dbline 163
	clr R2
	clr R3
	std y+6,R2
	std y+7,R3
	std y+4,R2
	std y+5,R3
	std y+2,R2
	std y+3,R3
	ldi R24,63
	ldi R25,0
	std y+0,R24
	std y+1,R25
	mov R18,R20
	clr R19
	clr R16
	clr R17
	xcall _LCD_write_page
	.dbline 164
	clr R2
	clr R3
	std y+6,R2
	std y+7,R3
	ldi R24,1
	ldi R25,0
	std y+4,R24
	std y+5,R25
	std y+2,R2
	std y+3,R3
	ldi R24,63
	std y+0,R24
	std y+1,R25
	mov R18,R20
	clr R19
	clr R16
	clr R17
	xcall _LCD_write_page
	.dbline 165
L15:
	.dbline 161
	inc R20
L17:
	.dbline 161
	cpi R20,8
	brlo L14
	.dbline -2
	.dbline 166
;  {
;   LCD_write_page(0, i, MAX_X, 0x00, LEFT, 0);
;   LCD_write_page(0, i, MAX_X, 0x00, RIGHT, 0);
;  } 
; }
L13:
	adiw R28,8
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym l j 9 c
	.dbsym r i 20 c
	.dbend
	.dbfunc e LCD_write_page _LCD_write_page fV
;              i -> R20
;           over -> y+21
;            L_R -> R22
;           data -> R10
;            end -> R12
;              y -> y+13
;              x -> R14
	.even
_LCD_write_page::
	st -y,r19
	st -y,r18
	xcall push_gset5
	mov R14,R16
	sbiw R28,3
	ldd R12,y+15
	ldd R10,y+17
	ldd R22,y+19
	.dbline -1
	.dbline 169
; 
; void LCD_write_page(char x, char y, unsigned char end, unsigned char data, char L_R, char over)
; {
	.dbline 171
;  char i;
;  if (over == 0)
	ldd R0,y+21
	tst R0
	brne L19
	.dbline 172
;  {
	.dbline 173
;   LCD_write_data(x, y, data, L_R);
	std y+2,R22
	std y+0,R10
	ldd R18,y+13
	mov R16,R14
	xcall _LCD_write_data
	.dbline 174
;   for (i = 0; i < end - x+1; i++)
	clr R20
	xjmp L24
L21:
	.dbline 175
	.dbline 176
	mov R18,R22
	mov R16,R10
	xcall _LCD_write
	.dbline 177
L22:
	.dbline 174
	inc R20
L24:
	.dbline 174
	mov R24,R12
	sub R24,R14
	subi R24,255    ; addi 1
	cp R20,R24
	brlo L21
	.dbline 178
;   {
;    LCD_write(data, L_R);
;   }
;  }
	xjmp L20
L19:
	.dbline 180
;  else 
;  {
	.dbline 181
;   LCD_write_data(x, y, ~data, L_R);
	std y+2,R22
	mov R2,R10
	com R2
	std y+0,R2
	ldd R18,y+13
	mov R16,R14
	xcall _LCD_write_data
	.dbline 182
;   for (i = 0; i < end - x; i++)
	clr R20
	xjmp L28
L25:
	.dbline 183
	.dbline 184
	mov R18,R22
	mov R16,R10
	com R16
	xcall _LCD_write
	.dbline 185
L26:
	.dbline 182
	inc R20
L28:
	.dbline 182
	mov R2,R12
	sub R2,R14
	cp R20,R2
	brlo L25
	.dbline 186
L20:
	.dbline -2
	.dbline 187
;   {
;    LCD_write(~data, L_R);
;   }
;  }
; }
L18:
	adiw R28,3
	xcall pop_gset5
	adiw R28,2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym l over 21 c
	.dbsym r L_R 22 c
	.dbsym r data 10 c
	.dbsym r end 12 c
	.dbsym l y 13 c
	.dbsym r x 14 c
	.dbend
	.dbfunc e Delaynus _Delaynus fV
;              j -> <dead>
;              m -> R20
;              i -> R22
;              k -> R16,R17
	.even
_Delaynus::
	xcall push_gset2
	.dbline -1
	.dbline 192
; 
; 
; ////////////////////////////////////////////////////////////////////////////
; void Delaynus(unsigned int k)
; {
	.dbline 194
;   char i, j, m;
;  for (m = 0; m < 8; m++)
	clr R20
	xjmp L33
L30:
	.dbline 195
;  {
	.dbline 196
;   for (i = 0; i < k; i++)
	clr R22
	xjmp L37
L34:
	.dbline 197
	.dbline 199
	.dbline 200
L35:
	.dbline 196
	inc R22
L37:
	.dbline 196
	mov R2,R22
	clr R3
	cp R2,R16
	cpc R3,R17
	brlo L34
	.dbline 201
L31:
	.dbline 194
	inc R20
L33:
	.dbline 194
	cpi R20,8
	brlo L30
	.dbline -2
	.dbline 202
;   {
;    //for (j = 0; j < 150; j++);
;    ;
;   }
;  }
; }
L29:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym l j 1 c
	.dbsym r m 20 c
	.dbsym r i 22 c
	.dbsym r k 16 i
	.dbend
	.dbfunc e Delaynms _Delaynms fV
;              m -> R20
;              i -> R22
;              j -> R10
;              k -> R16,R17
	.even
_Delaynms::
	xcall push_gset3
	.dbline -1
	.dbline 205
; //////////////////////////////////////////////////////
; void Delaynms(unsigned int k)
; {
	.dbline 207
;   char i, j, m;
;  for (m = 0; m < 8; m++)
	clr R20
	xjmp L42
L39:
	.dbline 208
;  {
	.dbline 209
;   for (i = 0; i < k; i++)
	clr R22
	xjmp L46
L43:
	.dbline 210
;   {
	.dbline 211
	clr R10
	xjmp L50
L47:
	.dbline 211
L48:
	.dbline 211
	inc R10
L50:
	.dbline 211
	mov R24,R10
	cpi R24,150
	brlo L47
	.dbline 213
L44:
	.dbline 209
	inc R22
L46:
	.dbline 209
	mov R2,R22
	clr R3
	cp R2,R16
	cpc R3,R17
	brlo L43
	.dbline 214
L40:
	.dbline 207
	inc R20
L42:
	.dbline 207
	cpi R20,8
	brlo L39
	.dbline -2
	.dbline 215
;    for (j = 0; j < 150; j++);
;   
;   }
;  }
; }
L38:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r m 20 c
	.dbsym r i 22 c
	.dbsym r j 10 c
	.dbsym r k 16 i
	.dbend
	.dbfunc e Delay_key _Delay_key fV
;              i -> R20
;              j -> R22
;              m -> R10
;              k -> R16
	.even
_Delay_key::
	xcall push_gset3
	.dbline -1
	.dbline 219
; //////////////////////////////////
; 
; void Delay_key(unsigned char k)
; {
	.dbline 221
;  unsigned char i, j, m;
;  for (i = 0; i < k; i++)
	clr R20
	xjmp L55
L52:
	.dbline 222
;  {
	.dbline 223
;   for (j = 0; j < 8; j++)
	clr R22
	xjmp L59
L56:
	.dbline 224
;   {
	.dbline 225
	clr R10
	xjmp L63
L60:
	.dbline 225
L61:
	.dbline 225
	inc R10
L63:
	.dbline 225
	mov R24,R10
	cpi R24,150
	brlo L60
	.dbline 226
L57:
	.dbline 223
	inc R22
L59:
	.dbline 223
	cpi R22,8
	brlo L56
	.dbline 227
L53:
	.dbline 221
	inc R20
L55:
	.dbline 221
	cp R20,R16
	brlo L52
	.dbline -2
	.dbline 228
;    for (m = 0; m < 150; m++);
;   }
;  }
; }
L51:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r j 22 c
	.dbsym r m 10 c
	.dbsym r k 16 c
	.dbend
	.dbfunc e LCD_China _LCD_China fV
;              i -> R20
;            L_R -> R22
;           data -> R10,R11
;              y -> R12
;              x -> R14
	.even
_LCD_China::
	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 233
; 
; 
; 
; void LCD_China(char x, char y, unsigned char const *data, char L_R)
; {
	.dbline 235
;   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 236
;   for (i = 0; i < 16; i++)
	clr R20
	xjmp L68
L65:
	.dbline 237
	.dbline 238
	mov R18,R22
	mov R30,R20
	clr R31
	add R30,R10
	adc R31,R11
	lpm R16,Z
	xcall _LCD_write
	.dbline 239
L66:
	.dbline 236
	inc R20
L68:
	.dbline 236
	cpi R20,16
	brlo L65
	.dbline 241
;   {
;    LCD_write(*(data + i), L_R);
;   }
;  
;   LCD_write_data(x, y + 1, *(data + 16), L_R);
	std y+2,R22
	movw R30,R10
	adiw R30,16
	lpm R30,Z
	std y+0,R30
	mov R18,R12
	subi R18,255    ; addi 1
	mov R16,R14
	xcall _LCD_write_data
	.dbline 242
;   for (i = 16; i < 32; i++)
	ldi R20,16
	xjmp L72
L69:
	.dbline 243
	.dbline 244
	mov R18,R22
	mov R30,R20
	clr R31
	add R30,R10
	adc R31,R11
	lpm R16,Z
	xcall _LCD_write
	.dbline 247
L70:
	.dbline 242
	inc R20
L72:
	.dbline 242
	cpi R20,32
	brlo L69
	.dbline -2
	.dbline 248
;   {
;   LCD_write(*(data + i), L_R);
;     
; 
;   }
; }
L64:
	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 LCD_China_ini _LCD_China_ini fV
;              j -> R20
;              p -> R22
;              i -> R14
;            L_R -> R10
;           data -> R12,R13
;              y -> y+15
;              x -> y+13
	.even
_LCD_China_ini::
	xcall push_arg4
	xcall push_gset5
	sbiw R28,3
	ldd R12,y+17
	ldd R13,y+18
	ldd R10,y+19
	.dbline -1
	.dbline 251
; ///////////////////////////////////////////////
; void LCD_China_ini(char x, char y, unsigned char const *data, char L_R)
; {
	.dbline 253
; 
;   char i,j,p=0;
	clr R22
	.dbline 254
;   LED_ini();
	xcall _LED_ini

⌨️ 快捷键说明

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