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

📄 jianpan.s

📁 实现3*3 键盘的控制。从而实现用键盘来对单片机进行控制。
💻 S
📖 第 1 页 / 共 3 页
字号:
	.module jianpan.c
	.area lit(rom, con, rel)
_KeySet::
	.byte 1,2
	.byte 3,4
	.byte 5,6
	.byte 7,8
	.byte 9,0
	.byte 10,11
	.byte 12,13
	.byte 14,15
	.dbfile E:\李斐机器人\周卓\键盘_3\键盘_3yuan\jianpan.c
	.dbsym e KeySet _KeySet A[16:16]kc
	.area data(ram, con, rel)
	.dbfile E:\李斐机器人\周卓\键盘_3\键盘_3yuan\jianpan.c
_flag::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\李斐机器人\周卓\键盘_3\键盘_3yuan\jianpan.c
	.dbsym e flag _flag c
	.area lit(rom, con, rel)
_num_table::
	.byte 63,6
	.byte 91,'O
	.byte 'f,'m
	.byte 125,7
	.byte 127,'o
	.byte 64
	.dbsym e num_table _num_table A[11:11]kc
	.area data(ram, con, rel)
	.dbfile E:\李斐机器人\周卓\键盘_3\键盘_3yuan\jianpan.c
_DelayCounter::
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.dbfile E:\李斐机器人\周卓\键盘_3\键盘_3yuan\jianpan.c
	.dbsym e DelayCounter _DelayCounter i
_SysCounter::
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.dbfile E:\李斐机器人\周卓\键盘_3\键盘_3yuan\jianpan.c
	.dbsym e SysCounter _SysCounter i
_numL::
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.dbfile E:\李斐机器人\周卓\键盘_3\键盘_3yuan\jianpan.c
	.dbsym e numL _numL i
_numH::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\李斐机器人\周卓\键盘_3\键盘_3yuan\jianpan.c
	.dbsym e numH _numH c
_mode::
	.blkb 1
	.area idata
	.byte 113
	.area data(ram, con, rel)
	.dbfile E:\李斐机器人\周卓\键盘_3\键盘_3yuan\jianpan.c
	.dbsym e mode _mode c
_NumBitL::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\李斐机器人\周卓\键盘_3\键盘_3yuan\jianpan.c
	.dbsym e NumBitL _NumBitL c
_NumBitH::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\李斐机器人\周卓\键盘_3\键盘_3yuan\jianpan.c
	.dbsym e NumBitH _NumBitH c
_Cursor::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\李斐机器人\周卓\键盘_3\键盘_3yuan\jianpan.c
	.dbsym e Cursor _Cursor c
_CursorDir::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile E:\李斐机器人\周卓\键盘_3\键盘_3yuan\jianpan.c
	.dbsym e CursorDir _CursorDir c
	.area text(rom, con, rel)
	.dbfile E:\李斐机器人\周卓\键盘_3\键盘_3yuan\jianpan.c
	.dbfunc e delay _delay fV
;           time -> R16,R17
	.even
_delay::
	.dbline -1
	.dbline 92
; //ICC-AVR application builder : 2004-4-28 13:15:44
; // Target : M16
; // Crystal: 8.0000Mhz
; //串口通讯及控制命令格式(协议)如下:
; // 命令的传输长度采用变长数据,第一个字节为指令,其余为可选参数
; //----------------------------------------------------------------------------
; //键盘特殊功能键定义如下:
; //
; //键码		功能
; //-----------------------------------
; //  F		ENTER(transmit the data to the master)
; //  C		BACKSPACE
; //  A		speedup
; //  B		slowdown
; //  E		go into the edit mode
; //
; #include <iom16v.h>
; #include <macros.h>
; 
; #define uchar unsigned char
; #define uint unsigned int
; #define ulong unsigned long
; 
; #define ROUTE_TASK_NUM_LIMIT 30 
; #define SET_ROUTE ( PIND & BIT(PD3) )	//键盘设定路径的选通引脚(来自Mega16)
; 
; //功能键定义
; #define CANCEL	12	//C
; #define ENTER		15	//F
; #define EDIT		14      //e
; #define speedup		10	//A
; #define slowdown	11	//B
; #define DEBUG	13	//D
; 
; //模式1参数个数Model1_flag
; #define Model1_flag  8
; //模式2参数个数Model2_flag
; #define Model2_flag  4
; 
; //状态标志
; #define START_COMMAND	0xF0
; #define TRANSMIT 0x02
; #define SAVE	 0x00
; #define SETTING  0x01
; #define FREE	 0X71	
; #define STATE	 0X0f
; 
; #define PAR1    0x01
; #define PAR2	0x02
; #define PAR3	0x03
; #define PAR4	0x04
; #define PAR5	0x05
; #define PAR6	0x06
; #define PAR7	0x07
; #define PAR8	0x08
; #define PAR9	0x09
; #define PAR10	0x0a
; const uchar KeySet[] =
; {
;  1, 2, 3, 4,
;  5, 6, 7, 8,
;  9, 0, 10,11,
;  12,13,14,15
; };
; 
; uchar flag = 0;			 /* 状态标志变量 */
; const uchar num_table[] = { 0x3f,0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f, 0x40 };
; //自定义定时器
; uint DelayCounter = 0;
; uint SysCounter = 0;
; //
; uchar trans_buf[20];
; uchar receive_buf[20];
; 
; //键盘控制行为变量
; uint numL= 0;		//6位十进制
; uchar numH=0;		//显示高2位
; 
; uchar mode = 0x71;	//显示'F'
; uchar NumBitL=0;	//显示高2位
; uchar NumBitH=0;         //6位十进制  显示低6位
; uchar Cursor = 0;
; uchar CursorDir = 0;
;  
; void delay( uint time );
; //void master( uchar command, uchar* buf, uchar startP, uchar dataLen );
; uchar scan_key( void );
; void display( void );
; 
; 
; void delay( uint time )
; {
	.dbline 93
	clr R2
	clr R3
	sts _DelayCounter+1,R3
	sts _DelayCounter,R2
	xjmp L5
L2:
	.dbline 93
	.dbline 93
	wdr
	.dbline 93
L3:
	.dbline 93
L5:
	.dbline 93
; 	for( DelayCounter = 0; DelayCounter < time; ) { WDR(); }
	lds R2,_DelayCounter
	lds R3,_DelayCounter+1
	cp R2,R16
	cpc R3,R17
	brlo L2
	.dbline -2
	.dbline 94
; }
L1:
	.dbline 0 ; func end
	ret
	.dbsym r time 16 i
	.dbend
	.dbfunc e send _send fV
;            num -> R20
;          index -> R22
	.even
_send::
	xcall push_gset2
	mov R20,R18
	mov R22,R16
	.dbline -1
	.dbline 97
; 
; void send( uchar index, uchar num )
; {
	.dbline 98
; 	PORTB = ~BIT( index ); 
	ldi R16,1
	mov R17,R22
	xcall lsl8
	mov R2,R16
	com R2
	out 0x18,R2
	.dbline 99
; 	if( index < 7 ) { PORTA = num_table[num]; }
	cpi R22,7
	brsh L7
	.dbline 99
	.dbline 99
	ldi R24,<_num_table
	ldi R25,>_num_table
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	lpm R30,Z
	out 0x1b,R30
	.dbline 99
	xjmp L8
L7:
	.dbline 100
; 	else { PORTA = num; }
	.dbline 100
	out 0x1b,R20
	.dbline 100
L8:
	.dbline 101
; 	delay( 1 );
	ldi R16,1
	ldi R17,0
	xcall _delay
	.dbline -2
	.dbline 102
; }
L6:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r num 20 c
	.dbsym r index 22 c
	.dbend
	.dbfunc e send_char _send_char fV
;             ch -> R20
;          index -> R22
	.even
_send_char::
	xcall push_gset2
	mov R20,R18
	mov R22,R16
	.dbline -1
	.dbline 105
; 
; void send_char( uchar index, uchar ch )
; {
	.dbline 106
; 	PORTB = ~BIT( index );
	ldi R16,1
	mov R17,R22
	xcall lsl8
	mov R2,R16
	com R2
	out 0x18,R2
	.dbline 107
; 	PORTA = ch;
	out 0x1b,R20
	.dbline 108
; 	delay(1);
	ldi R16,1
	ldi R17,0
	xcall _delay
	.dbline -2
	.dbline 109
; }
L9:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r ch 20 c
	.dbsym r index 22 c
	.dbend
	.dbfunc e scan_key _scan_key fc
;          index -> R16
	.even
_scan_key::
	.dbline -1
	.dbline 113
; 
; //键盘扫描
; uchar scan_key( void )
; {
	.dbline 115
;  	uchar index;
; 	 if(!(PINC & 0x80))
	sbic 0x13,7
	rjmp L11
	.dbline 116
;  	 index = 0;
	clr R16
	xjmp L12
L11:
	.dbline 117
;  	else if(!(PINC & 0x40))
	sbic 0x13,6
	rjmp L13
	.dbline 118
;  	 index = 1;
	ldi R16,1
	xjmp L14
L13:
	.dbline 119
;  	else if(!(PINC & 0x20))
	sbic 0x13,5
	rjmp L15
	.dbline 120
;  	 index = 2;
	ldi R16,2
	xjmp L16
L15:
	.dbline 121
;  	else if(!(PINC & 0x10))
	sbic 0x13,4
	rjmp L17
	.dbline 122
;  	 index = 3;
	ldi R16,3
L17:
L16:
L14:
L12:
	.dbline 123
;  	PORTC = 0x0F;	   //切换
	ldi R24,15
	out 0x15,R24
	.dbline 124
;  	DDRC = 0xF0;
	ldi R24,240
	out 0x14,R24
	.dbline 125
;  	if( !(PINC & 0x08) )
	sbic 0x13,3
	rjmp L19
	.dbline 126
;  	 index += 0;
	xjmp L20
L19:
	.dbline 127
;  	else if( !(PINC & 0x04) )
	sbic 0x13,2
	rjmp L21
	.dbline 128
;  	 index += 4;
	subi R16,252    ; addi 4
	xjmp L22
L21:
	.dbline 129
;  	else if( !(PINC & 0x02) )
	sbic 0x13,1
	rjmp L23
	.dbline 130
;  	 index += 8;
	subi R16,248    ; addi 8
	xjmp L24
L23:
	.dbline 131
;  	else if( !(PINC & 0x01) )
	sbic 0x13,0
	rjmp L25
	.dbline 132
;  	 index += 12;
	subi R16,244    ; addi 12
L25:
L24:
L22:
L20:
	.dbline 133
; 	 PORTC = 0xF0;	   //切换
	ldi R24,240
	out 0x15,R24
	.dbline 134
;  	DDRC = 0x0F;
	ldi R24,15
	out 0x14,R24
	.dbline 135
;  	return index;
	.dbline -2
L10:
	.dbline 0 ; func end
	ret
	.dbsym r index 16 c
	.dbend
	.dbfunc e transmit _transmit fV
;            tmp -> <dead>
;              i -> R20
	.even
_transmit::
	xcall push_gset1
	.dbline -1
	.dbline 139
; }
; //串口传送数据
; void transmit(void)
; { 
	.dbline 142
; 	uchar i;
; 	uchar tmp;
;  	for(i=0;i<10;i++)
	clr R20
	xjmp L31
L28:
	.dbline 143
	.dbline 144
	ldi R18,7
	ldi R16,7
	xcall _send
	.dbline 145
	ldi R16,2
	ldi R17,0
	xcall _delay
	.dbline 146
L29:
	.dbline 142
	inc R20
L31:
	.dbline 142
	cpi R20,10
	brlo L28
	.dbline 147
;  	{
;  	send(7,7);
;  	delay(2);
; 	}
;  	for(i=0;i<20;i++)
	clr R20
	xjmp L35
X0:
	.dbline 148
;  	{
L36:
	.dbline 149
L37:
	.dbline 149
	sbis 0xb,5
	rjmp L36
	.dbline 150
	ldi R24,<_trans_buf
	ldi R25,>_trans_buf
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	out 0xc,R2
	.dbline 151
	ldi R16,1
	ldi R17,0
	xcall _delay
	.dbline 152
L33:
	.dbline 147
	inc R20
L35:
	.dbline 147
	cpi R20,20
	brlo L37
	.dbline -2
	.dbline 153
;  		while(!(UCSRA&BIT(UDRE)));     
;  		UDR=trans_buf[i];
;  		delay(1);
;  	}	 
; }
L27:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym l tmp 1 c
	.dbsym r i 20 c
	.dbend
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 155
;  void port_init(void)
; {
	.dbline 156
;  PORTA = 0x00;
	clr R2
	out 0x1b,R2
	.dbline 157
;  DDRA  = 0xFF;
	ldi R24,255
	out 0x1a,R24
	.dbline 158
;  PORTB = 0xFF;
	out 0x18,R24
	.dbline 159
;  DDRB  = 0xFF;
	out 0x17,R24
	.dbline 160
;  PORTC = 0xf0; //m103 output only
	ldi R24,240
	out 0x15,R24
	.dbline 161
;  DDRC  = 0x0f;
	ldi R24,15
	out 0x14,R24
	.dbline 162
;  PORTD = 0xFF;
	ldi R24,255
	out 0x12,R24
	.dbline 163
;  DDRD  = 0xF0;
	ldi R24,240
	out 0x11,R24
	.dbline -2
	.dbline 164
; }
L39:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e timer0_init _timer0_init fV
	.even
_timer0_init::
	.dbline -1
	.dbline 171
; 
; //TIMER0 initialisation - prescale:64
; // WGM: Normal
; // desired value: 1mSec
; // actual value:  1.000mSec (0.0%)
; void timer0_init(void)
; {
	.dbline 172
;  TCCR0 = 0x00; //stop
	clr R2
	out 0x33,R2
	.dbline 173
;  TCNT0 = 0x83; //set count
	ldi R24,131
	out 0x32,R24
	.dbline 174
;  OCR0  = 0x7D;  //set compare
	ldi R24,125
	out 0x3c,R24
	.dbline 175
;  TCCR0 = 0x03; //start timer
	ldi R24,3
	out 0x33,R24
	.dbline -2
	.dbline 176
; }
L40:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 36
	jmp _timer0_ovf_isr
	.area text(rom, con, rel)
	.dbfile E:\李斐机器人\周卓\键盘_3\键盘_3yuan\jianpan.c
	.dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
	.even
_timer0_ovf_isr::
	st -y,R24
	st -y,R25
	in R24,0x3f
	st -y,R24
	.dbline -1
	.dbline 180
; 
; #pragma interrupt_handler timer0_ovf_isr:10
; void timer0_ovf_isr(void)
; {
	.dbline 181
; 	TCNT0 = 0x83; //reload counter value
	ldi R24,131
	out 0x32,R24
	.dbline 182
; 	DelayCounter ++;
	.dbline 183
; 	SysCounter ++;
	lds R24,_DelayCounter
	lds R25,_DelayCounter+1
	adiw R24,1
	sts _DelayCounter+1,R25
	sts _DelayCounter,R24
	lds R24,_SysCounter
	lds R25,_SysCounter+1
	adiw R24,1
	sts _SysCounter+1,R25
	sts _SysCounter,R24
	.dbline -2
	.dbline 184
; }
L41:
	ld R24,y+
	out 0x3f,R24
	ld R25,y+
	ld R24,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e uart0_init _uart0_init fV
	.even
_uart0_init::
	.dbline -1
	.dbline 194
; //
; 
; 
; //UART0 initialisation
; // desired baud rate: 9600
; // actual: baud rate:9615 (0.2%)
; // char size: 8 bit
; // parity: Disabled
; void uart0_init(void)
; {
	.dbline 195
;  UCSRB = 0x00; //disable while setting baud rate
	clr R2
	out 0xa,R2
	.dbline 196
;  UCSRA = 0x00;
	out 0xb,R2
	.dbline 197
;  UCSRC = 0x86;
	ldi R24,134
	out 0x20,R24
	.dbline 198
;  UBRRL = 51; //set baud rate lo
	ldi R24,51
	out 0x9,R24
	.dbline 199
;  UBRRH = 0x00; //set baud rate hi
	out 0x20,R2
	.dbline 200
;  UCSRB = 0x18;
	ldi R24,24
	out 0xa,R24
	.dbline -2
	.dbline 201
; }
L42:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e watchdog_init _watchdog_init fV
	.even
_watchdog_init::
	.dbline -1
	.dbline 206
; 
; //Watchdog initialisation
; // prescale: 32K cycles
; void watchdog_init(void)

⌨️ 快捷键说明

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