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

📄 child.s

📁 一个单片机的完整开发程序AVR的
💻 S
字号:
	.module child.c
	.area text(rom, con, rel)
	.dbfile F:\赵一\edu6000_1125\child.c
	.dbfunc e delay_us _delay_us fV
;             us -> R16
	.even
_delay_us::
	.dbline -1
	.dbline 6
; #include <iom8v.h>
; #include <macros.h>
; #include "head.h"
; 
; void delay_us(unsigned char us) //when the xtal is 8M, the delay time is 1 us.
; {
L2:
	.dbline 8
;   do
;   {
	.dbline 9
;    	us--;
	dec R16
	.dbline 10
;   	asm("nop");
	nop
	.dbline 11
; 	asm("nop");
	nop
	.dbline 12
; 	asm("nop");
	nop
	.dbline 13
; 	asm("nop");
	nop
	.dbline 14
L3:
	.dbline 14
;   }while(us);
	tst R16
	brne L2
	.dbline -2
	.dbline 15
; }
L1:
	.dbline 0 ; func end
	ret
	.dbsym r us 16 c
	.dbend
	.dbfunc e delay_ms _delay_ms fV
;              i -> R22,R23
;             ms -> R20
	.even
_delay_ms::
	xcall push_gset2
	mov R20,R16
	.dbline -1
	.dbline 18
; 
; void delay_ms(unsigned char ms)
; {
L6:
	.dbline 21
;   unsigned int i;
;   do
;   {
	.dbline 22
;    ms--;
	dec R20
	.dbline 23
;    for(i=0;i<5;i++)
	clr R22
	clr R23
	xjmp L12
L9:
	.dbline 24
	ldi R16,200
	xcall _delay_us
L10:
	.dbline 23
	subi R22,255  ; offset = 1
	sbci R23,255
L12:
	.dbline 23
	cpi R22,5
	ldi R30,0
	cpc R23,R30
	brlo L9
	.dbline 25
L7:
	.dbline 25
;    delay_us(200);
;   }while(ms);
	tst R20
	brne L6
	.dbline -2
	.dbline 26
; }
L5:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 22 i
	.dbsym r ms 20 c
	.dbend
	.dbfunc e send_cmd _send_cmd fV
;              i -> R20
;            mod -> R22
;            cmd -> R10
	.even
_send_cmd::
	xcall push_gset3
	mov R10,R16
	.dbline -1
	.dbline 29
; 
; void send_cmd(unsigned char cmd)  //send comend to the lcd.
; {
	.dbline 31
;  	unsigned char i,mod;
; 	clr_cs;
	cbi 0x12,7
	.dbline 32
; 	mod=0x80;
	ldi R22,128
	.dbline 33
; 	for(i=0;i<3;i++)
	clr R20
	xjmp L17
L14:
	.dbline 34
; 	{
	.dbline 35
; 	 	if((mod&0x80)==0x80)
	mov R24,R22
	andi R24,128
	cpi R24,128
	brne L18
	.dbline 36
; 			set_data;
	sbi 0x18,3
	xjmp L19
L18:
	.dbline 38
; 		else
; 			clr_data;
	cbi 0x18,3
L19:
	.dbline 40
	cbi 0x18,4
	.dbline 41
	ldi R16,8
	xcall _delay_us
	.dbline 42
	sbi 0x18,4
	.dbline 43
	lsl R22
	.dbline 44
	ldi R16,8
	xcall _delay_us
	.dbline 45
L15:
	.dbline 33
	inc R20
L17:
	.dbline 33
	cpi R20,3
	brlo L14
	.dbline 46
; 		
; 		clr_wr;
; 		delay_us(8);
; 		set_wr;
; 		mod=mod<<1;
; 		delay_us(8);
; 	 }
; 	mod=cmd;
	mov R22,R10
	.dbline 47
; 	for(i=0;i<9;i++)
	clr R20
	xjmp L23
L20:
	.dbline 48
; 	{
	.dbline 49
; 		if((mod&0x80)==0x80)
	mov R24,R22
	andi R24,128
	cpi R24,128
	brne L24
	.dbline 50
; 			set_data;
	sbi 0x18,3
	xjmp L25
L24:
	.dbline 52
; 		else
; 			clr_data;
	cbi 0x18,3
L25:
	.dbline 53
	cbi 0x18,4
	.dbline 54
	ldi R16,8
	xcall _delay_us
	.dbline 55
	sbi 0x18,4
	.dbline 56
	lsl R22
	.dbline 57
	ldi R16,8
	xcall _delay_us
	.dbline 58
L21:
	.dbline 47
	inc R20
L23:
	.dbline 47
	cpi R20,9
	brlo L20
	.dbline 59
; 		clr_wr;
; 		delay_us(8);
; 		set_wr;
; 		mod=mod<<1;
; 		delay_us(8);
; 	}
; 	set_cs;
	sbi 0x12,7
	.dbline -2
	.dbline 60
; }
L13:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r mod 22 c
	.dbsym r cmd 10 c
	.dbend
	.dbfunc e send_data _send_data fV
;              i -> R20
;            mod -> R22
;           data -> R10
;           addr -> R12
	.even
_send_data::
	xcall push_gset4
	mov R10,R18
	mov R12,R16
	.dbline -1
	.dbline 65
; 
; //send data and address to the lcd.
; 
; void send_data(unsigned char addr,unsigned char data)
; {
	.dbline 68
;  	unsigned char i,mod;
; 
; 	clr_cs;	
	cbi 0x12,7
	.dbline 69
; 	mod=0x05;    //entern the write mode.
	ldi R22,5
	.dbline 70
; 	for(i=0;i<3;i++)
	clr R20
	xjmp L30
L27:
	.dbline 71
; 	{
	.dbline 72
; 	 	if((mod&0x01)==0x01)
	mov R24,R22
	andi R24,1
	cpi R24,1
	brne L31
	.dbline 73
; 			set_data;
	sbi 0x18,3
	xjmp L32
L31:
	.dbline 75
; 		else
; 			clr_data;
	cbi 0x18,3
L32:
	.dbline 77
	cbi 0x18,4
	.dbline 78
	ldi R16,8
	xcall _delay_us
	.dbline 79
	sbi 0x18,4
	.dbline 80
	lsr R22
	.dbline 81
	ldi R16,8
	xcall _delay_us
	.dbline 82
L28:
	.dbline 70
	inc R20
L30:
	.dbline 70
	cpi R20,3
	brlo L27
	.dbline 83
; 		
; 		clr_wr;
; 		delay_us(8);
; 		set_wr;
; 		mod=mod>>1;
; 		delay_us(8);
; 	}
; 	mod=addr;
	mov R22,R12
	.dbline 84
; 	for(i=0;i<6;i++)
	clr R20
	xjmp L36
L33:
	.dbline 85
; 	{	
	.dbline 86
; 	 	if((mod&0x01)==0x01)
	mov R24,R22
	andi R24,1
	cpi R24,1
	brne L37
	.dbline 87
; 			set_data;
	sbi 0x18,3
	xjmp L38
L37:
	.dbline 89
; 		else
; 			clr_data;
	cbi 0x18,3
L38:
	.dbline 90
	cbi 0x18,4
	.dbline 91
	ldi R16,8
	xcall _delay_us
	.dbline 92
	sbi 0x18,4
	.dbline 93
	lsr R22
	.dbline 94
	ldi R16,8
	xcall _delay_us
	.dbline 95
L34:
	.dbline 84
	inc R20
L36:
	.dbline 84
	cpi R20,6
	brlo L33
	.dbline 97
; 		clr_wr;
; 		delay_us(8);
; 		set_wr;
; 	 	mod=mod>>1;
; 		delay_us(8);
; 	}
; 		
; 	mod=data;
	mov R22,R10
	.dbline 98
; 	for(i=0;i<8;i++)
	clr R20
	xjmp L42
L39:
	.dbline 99
; 	{   
	.dbline 100
; 	 	if((mod&0x01)==0x01)
	mov R24,R22
	andi R24,1
	cpi R24,1
	brne L43
	.dbline 101
; 			set_data;
	sbi 0x18,3
	xjmp L44
L43:
	.dbline 103
; 		else
; 			clr_data;
	cbi 0x18,3
L44:
	.dbline 104
	cbi 0x18,4
	.dbline 105
	ldi R16,8
	xcall _delay_us
	.dbline 106
	sbi 0x18,4
	.dbline 107
	lsr R22
	.dbline 108
	ldi R16,8
	xcall _delay_us
	.dbline 109
L40:
	.dbline 98
	inc R20
L42:
	.dbline 98
	cpi R20,8
	brlo L39
	.dbline 110
; 		clr_wr;
; 		delay_us(8);
; 		set_wr;
; 		mod=mod>>1;
; 		delay_us(8);
; 	 }
; 		set_cs;
	sbi 0x12,7
	.dbline -2
	.dbline 111
; }
L26:
	xcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r mod 22 c
	.dbsym r data 10 c
	.dbsym r addr 12 c
	.dbend
	.dbfunc e init_lcd _init_lcd fV
	.even
_init_lcd::
	.dbline -1
	.dbline 114
; //initialize the lcd.
; void init_lcd(void)
; {
	.dbline 115
; 	 send_cmd(0x18);
	ldi R16,24
	xcall _send_cmd
	.dbline 116
; 	 send_cmd(0x01);
	ldi R16,1
	xcall _send_cmd
	.dbline 117
; 	 send_cmd(0x03);
	ldi R16,3
	xcall _send_cmd
	.dbline 118
; 	 send_cmd(0x29);
	ldi R16,41
	.dbline -2
	.dbline 119
; }
L45:
	.dbline 0 ; func end
	xjmp _send_cmd
	.dbend
	.dbfunc e display _display fV
;              i -> R20
;              k -> R22
;           data -> R10
	.even
_display::
	xcall push_gset3
	mov R10,R16
	.dbline -1
	.dbline 122
; //display full screen or clear the screen.
; void display(unsigned char data)
; {
	.dbline 124
;  	unsigned char i,k;
; 	k=0;
	clr R22
	.dbline 125
; 	for(i=0;i<16;i++)
	clr R20
	xjmp L50
L47:
	.dbline 126
	.dbline 127
	mov R18,R10
	mov R16,R22
	xcall _send_data
	.dbline 128
	inc R22
	.dbline 129
	inc R22
	.dbline 130
L48:
	.dbline 125
	inc R20
L50:
	.dbline 125
	cpi R20,16
	brlo L47
	.dbline -2
	.dbline 131
; 	{
; 	 	send_data(k,data);
; 		k++;
; 		k++;
; 	}
; }
L46:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r k 22 c
	.dbsym r data 10 c
	.dbend
	.dbfunc e key_scan _key_scan fc
;        key_num -> R22
;            key -> R20
	.even
_key_scan::
	xcall push_gset3
	.dbline -1
	.dbline 134
; 
; unsigned char key_scan(void)
; {
	.dbline 136
;  unsigned char key,key_num;
;  key_num=0;
	clr R22
	.dbline 137
;  DDRC=0x77;
	ldi R24,119
	out 0x14,R24
	.dbline 138
;  DDRB|=BIT(PB5);
	sbi 0x17,5
	.dbline 139
;  DDRD=0x97;
	ldi R24,151
	out 0x11,R24
	.dbline 140
;  PORTB&=~BIT(PB5);
	cbi 0x18,5
	.dbline 141
;  PORTC|=BIT(PC0);
	sbi 0x15,0
	.dbline 142
;  PORTC|=BIT(PC1);
	sbi 0x15,1
	.dbline 143
;  _NOP();
	nop
	.dbline 144
;  _NOP();
	nop
	.dbline 145
;  key=((PIND&0x68)>>3);
	in R20,0x10
	andi R20,104
	lsr R20
	lsr R20
	lsr R20
	.dbline 146
;  if(key!=0x0D)
	cpi R20,13
	brne X3
	xjmp L52
X3:
	.dbline 147
;  {
	.dbline 148
;   	delay_ms(40);
	ldi R16,40
	xcall _delay_ms
	.dbline 149
; 	key=((PIND&0x68)>>3);
	in R20,0x10
	andi R20,104
	lsr R20
	lsr R20
	lsr R20
	.dbline 150
; 	if(key!=0x0D)
	cpi R20,13
	breq L54
	.dbline 151
;  	{
	.dbline 152
;  	   switch(key)
	mov R10,R20
	clr R11
	movw R24,R10
	cpi R24,5
	ldi R30,0
	cpc R25,R30
	breq L61
	cpi R24,5
	ldi R30,0
	cpc R25,R30
	brlt L57
L62:
	movw R24,R10
	cpi R24,9
	ldi R30,0
	cpc R25,R30
	breq L60
	cpi R24,12
	ldi R30,0
	cpc R25,R30
	breq L59
	xjmp L57
X0:
	.dbline 153
;  	   {
L59:
	.dbline 154
;   	     case 0x0C: key_num=1;break;
	ldi R22,1
	.dbline 154
	xjmp L57
L60:
	.dbline 155
;   		 case 0x09: key_num=2;break;
	ldi R22,2
	.dbline 155
	xjmp L57
L61:
	.dbline 156
;   		 case 0x05: key_num=3;break;
	ldi R22,3
	.dbline 156
	.dbline 157
;   		 default: break;
L57:
	.dbline 159
;  	   }
;      key=((PIND&0x68)>>3);
	in R20,0x10
	andi R20,104
	lsr R20
	lsr R20
	lsr R20
	xjmp L64
L63:
	.dbline 161
	.dbline 162
	ldi R16,5
	xcall _delay_ms
	.dbline 163
	in R20,0x10
	andi R20,104
	lsr R20
	lsr R20
	lsr R20
	.dbline 164
L64:
	.dbline 160
; 	 while(key!=0x0D)
	cpi R20,13
	brne L63
	.dbline 165
; 	 {
; 	 delay_ms(5);
; 	 key=((PIND&0x68)>>3);
; 	 }
; 	}
L54:
	.dbline 166
;    }
L52:
	.dbline 167
;  PORTB|=BIT(PB5);
	sbi 0x18,5
	.dbline 168
;  PORTC&=~BIT(PC0);
	cbi 0x15,0
	.dbline 169
;  PORTC|=BIT(PC1);
	sbi 0x15,1
	.dbline 170
;  _NOP();
	nop
	.dbline 171
;  _NOP();
	nop
	.dbline 172
;  key=((PIND&0x68)>>3);
	in R20,0x10
	andi R20,104
	lsr R20
	lsr R20
	lsr R20
	.dbline 173
;  if(key!=0x0D)
	cpi R20,13
	brne X4
	xjmp L66
X4:
	.dbline 174
;  {
	.dbline 175
;   	delay_ms(40);
	ldi R16,40
	xcall _delay_ms
	.dbline 176
; 	key=((PIND&0x68)>>3);
	in R20,0x10
	andi R20,104
	lsr R20
	lsr R20
	lsr R20
	.dbline 177
; 	if(key!=0x0D)
	cpi R20,13
	breq L68
	.dbline 178
;  	{
	.dbline 179
;  	   switch(key)
	mov R10,R20
	clr R11
	movw R24,R10
	cpi R24,5
	ldi R30,0
	cpc R25,R30
	breq L75
	cpi R24,5
	ldi R30,0
	cpc R25,R30
	brlt L71
L76:
	movw R24,R10
	cpi R24,9
	ldi R30,0
	cpc R25,R30
	breq L74
	cpi R24,12
	ldi R30,0
	cpc R25,R30
	breq L73
	xjmp L71
X1:
	.dbline 180
;  	   {
L73:
	.dbline 181
;   	      case 0x0C: key_num=4;break;
	ldi R22,4
	.dbline 181
	xjmp L71
L74:
	.dbline 182
;    		  case 0x09: key_num=5;break;
	ldi R22,5
	.dbline 182
	xjmp L71
L75:
	.dbline 183
;   		  case 0x05: key_num=6;break;
	ldi R22,6
	.dbline 183
	.dbline 184
;   		  default: break;
L71:
	.dbline 186
;  		}
; 	 key=((PIND&0x68)>>3);
	in R20,0x10
	andi R20,104
	lsr R20
	lsr R20
	lsr R20
	xjmp L78
L77:
	.dbline 188
	.dbline 189
	ldi R16,5
	xcall _delay_ms
	.dbline 190
	in R20,0x10
	andi R20,104
	lsr R20
	lsr R20
	lsr R20
	.dbline 191
L78:
	.dbline 187
; 	 while(key!=0x0D)
	cpi R20,13
	brne L77
	.dbline 192
; 	 {
; 	 delay_ms(5);
; 	 key=((PIND&0x68)>>3);
; 	 }
; 	}
L68:
	.dbline 193
;    }
L66:
	.dbline 194
;  PORTB|=BIT(PB5);
	sbi 0x18,5
	.dbline 195
;  PORTC|=BIT(PC0);
	sbi 0x15,0
	.dbline 196
;  PORTC&=~BIT(PC1);
	cbi 0x15,1
	.dbline 197
;  _NOP();
	nop
	.dbline 198
;  _NOP();
	nop
	.dbline 199
;  key=((PINB&0x68)>>3);
	in R20,0x16
	andi R20,104
	lsr R20
	lsr R20
	lsr R20
	.dbline 200
;  if(key!=0x0D)
	cpi R20,13
	brne X5
	xjmp L80
X5:
	.dbline 201
;  {
	.dbline 202
;   	delay_ms(40);
	ldi R16,40
	xcall _delay_ms
	.dbline 203
; 	key=((PIND&0x68)>>3);
	in R20,0x10
	andi R20,104
	lsr R20
	lsr R20
	lsr R20
	.dbline 204
; 	if(key!=0x0D)
	cpi R20,13
	breq L82
	.dbline 205
;  	{
	.dbline 206
;  	  switch(key)
	mov R10,R20
	clr R11
	movw R24,R10
	cpi R24,5
	ldi R30,0
	cpc R25,R30
	breq L89
	cpi R24,5
	ldi R30,0
	cpc R25,R30
	brlt L85
L90:
	movw R24,R10
	cpi R24,9
	ldi R30,0
	cpc R25,R30
	breq L88
	cpi R24,12
	ldi R30,0
	cpc R25,R30
	breq L87
	xjmp L85
X2:
	.dbline 207
;  	  {
L87:
	.dbline 208
;   	    case 0x0C: key_num=7;break;
	ldi R22,7
	.dbline 208
	xjmp L85
L88:
	.dbline 209
;   		case 0x09: key_num=8;break;
	ldi R22,8
	.dbline 209
	xjmp L85
L89:
	.dbline 210
;   		case 0x05: key_num=9;break;
	ldi R22,9
	.dbline 210
	.dbline 211
;   		default: break;
L85:
	.dbline 213
;  	  }
;   	 key=((PIND&0x68)>>3);
	in R20,0x10
	andi R20,104
	lsr R20
	lsr R20
	lsr R20
	xjmp L92
L91:
	.dbline 215
	.dbline 216
	ldi R16,5
	xcall _delay_ms
	.dbline 217
	in R20,0x10
	andi R20,104
	lsr R20
	lsr R20
	lsr R20
	.dbline 218
L92:
	.dbline 214
; 	 while(key!=0x0D)
	cpi R20,13
	brne L91
	.dbline 219
; 	 {
; 	 delay_ms(5);
; 	 key=((PIND&0x68)>>3);
; 	 }
; 	}
L82:
	.dbline 220
;    }
L80:
	.dbline 221
;  return key_num;
	mov R16,R22
	.dbline -2
L51:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r key_num 22 c
	.dbsym r key 20 c
	.dbend

⌨️ 快捷键说明

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