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

📄 keyboard.s

📁 该程序是医院用的CPCR记录仪的终端控制程序
💻 S
字号:
	.module keyboard.c
	.area text(rom, con, rel)
	.dbfile F:\yyjapp\yymk\software\keyboard.c
	.dbfunc e scankey _scankey fc
;           keya -> R16
	.even
_scankey::
	.dbline -1
	.dbline 15
; #include <f:\yyjapp\yymk\software\main.h>
; #include <f:\yyjapp\yymk\software\keyboard.h>
; #include <f:\yyjapp\yymk\software\MfRc500.h>
; #include <f:\yyjapp\yymk\software\at45db161.h>
; #include <iom128v.h>
; #include <macros.h>
; #include <eeprom.h>
; extern unsigned char key_pw[6];
; extern unsigned char oldkey_pw[6];
; extern unsigned int keycount;
; extern unsigned char T2IR;
; extern unsigned int timecounter;
; 
; unsigned char scankey(void)
; {
	.dbline 17
;  	 unsigned char keya;
; 	 DDRC=0xff;
	ldi R24,255
	out 0x14,R24
	.dbline 18
;  	 SET_KEY3();
	cbi 0x14,3
	.dbline 19
; 	 SET_KEY4();
	cbi 0x14,4
	.dbline 20
; 	 SET_KEY5();
	cbi 0x14,5
	.dbline 21
; 	 SET_KEY6();
	cbi 0x14,6
	.dbline 22
; 	 CLEAR_KEY0();
	sbi 0x14,0
	.dbline 23
; 	 CLEAR_KEY1();
	sbi 0x14,1
	.dbline 24
; 	 CLEAR_KEY2();
	sbi 0x14,2
	.dbline 25
; 	 DDRC=PORTC=0;
	clr R2
	out 0x15,R2
	out 0x14,R2
	.dbline 27
; //	 PORTA=0xff;
; 	 keya=PINC;
	in R16,0x13
	.dbline 28
; 	 keya=keya<<1;
	lsl R16
	.dbline 29
; 	 if(keya==0xf0)
	cpi R16,240
	brne L3
	.dbline 30
; 	 return 1;
	ldi R16,1
	xjmp L2
L3:
	.dbline 32
; 	 else
; 	 return 0;
	clr R16
	.dbline -2
L2:
	.dbline 0 ; func end
	ret
	.dbsym r keya 16 c
	.dbend
	.dbfunc e keyvalue1 _keyvalue1 fc
;          value -> R16
;           key1 -> R16
	.even
_keyvalue1::
	.dbline -1
	.dbline 35
; }
; unsigned char keyvalue1(void)
; {
	.dbline 37
;  	unsigned char key1,value;
; 	DDRC=0xFF;
	ldi R24,255
	out 0x14,R24
	.dbline 38
; 	CLEAR_KEY3();
	sbi 0x14,3
	.dbline 39
; 	SET_KEY4();
	cbi 0x14,4
	.dbline 40
; 	SET_KEY5();
	cbi 0x14,5
	.dbline 41
; 	SET_KEY6();
	cbi 0x14,6
	.dbline 43
; 	
; 	SET_KEY0();
	cbi 0x14,0
	.dbline 44
; 	SET_KEY1();
	cbi 0x14,1
	.dbline 45
; 	SET_KEY2();
	cbi 0x14,2
	.dbline 46
; 	DDRC=PORTC=0;
	clr R2
	out 0x15,R2
	out 0x14,R2
	.dbline 47
; 	key1=PINC;
	in R16,0x13
	.dbline 48
; 	key1=key1&0x07;
	andi R16,7
	.dbline 50
; //	key1=key1<<1;
; 	switch(key1)
	clr R17
	cpi R16,3
	ldi R30,0
	cpc R17,R30
	breq L11
	cpi R16,5
	ldi R30,0
	cpc R17,R30
	breq L10
	cpi R16,6
	ldi R30,0
	cpc R17,R30
	breq L9
	xjmp L6
X0:
	.dbline 51
; 	{
L9:
	.dbline 53
; 		case 0x06:       //  3 keyvalue
; 		value=0x03;      //  3 key
	ldi R16,3
	.dbline 54
; 		break;
	xjmp L7
L10:
	.dbline 56
; 		case 0x05:      //   2 keyvalue       
; 		value=0x02;      //   2 key
	ldi R16,2
	.dbline 57
; 		break;
	xjmp L7
L11:
	.dbline 59
; 		case 0x03:      //   1 keyvalue
; 		value=0x01;     //   1 key
	ldi R16,1
	.dbline 60
; 		break;
	xjmp L7
L6:
	.dbline 62
; 		default:
; 		value=0xff;
	ldi R16,255
	.dbline 63
; 		break;
L7:
	.dbline 65
; 	}
; 	return value;
	.dbline -2
L5:
	.dbline 0 ; func end
	ret
	.dbsym r value 16 c
	.dbsym r key1 16 c
	.dbend
	.dbfunc e keyvalue2 _keyvalue2 fc
;          value -> R16
;           key1 -> R16
	.even
_keyvalue2::
	.dbline -1
	.dbline 68
; }
; unsigned char keyvalue2(void)
; {
	.dbline 70
;  	unsigned char key1,value;
; 	DDRC=0xFF;
	ldi R24,255
	out 0x14,R24
	.dbline 71
; 	SET_KEY3();
	cbi 0x14,3
	.dbline 72
; 	CLEAR_KEY4();
	sbi 0x14,4
	.dbline 73
; 	SET_KEY5();
	cbi 0x14,5
	.dbline 74
; 	SET_KEY6();
	cbi 0x14,6
	.dbline 76
; 	
; 	SET_KEY0();
	cbi 0x14,0
	.dbline 77
; 	SET_KEY1();
	cbi 0x14,1
	.dbline 78
; 	SET_KEY2();
	cbi 0x14,2
	.dbline 79
; 	DDRC=PORTC=0;
	clr R2
	out 0x15,R2
	out 0x14,R2
	.dbline 80
; 	key1=PINC;
	in R16,0x13
	.dbline 81
; 	key1=key1&0x07;
	andi R16,7
	.dbline 83
; //	key1=key1<<1;
; 	switch(key1)
	clr R17
	cpi R16,3
	ldi R30,0
	cpc R17,R30
	breq L18
	cpi R16,5
	ldi R30,0
	cpc R17,R30
	breq L17
	cpi R16,6
	ldi R30,0
	cpc R17,R30
	breq L16
	xjmp L13
X1:
	.dbline 84
; 	{
L16:
	.dbline 86
; 		case 0x06:         // 6 keyvalue
; 		value=0x06;        // 6 key
	ldi R16,6
	.dbline 87
; 		break;
	xjmp L14
L17:
	.dbline 89
; 		case 0x05:         //  5 keyvalue
; 		value=0x05;        //  5 key
	ldi R16,5
	.dbline 90
; 		break;
	xjmp L14
L18:
	.dbline 92
; 		case 0x03:         // 4 keyvalue
; 		value=0x04;        // 4 key
	ldi R16,4
	.dbline 93
; 		break;
	xjmp L14
L13:
	.dbline 95
; 		default:
; 		value=0xff;
	ldi R16,255
	.dbline 96
; 		break;
L14:
	.dbline 98
; 	}
; 	return value;
	.dbline -2
L12:
	.dbline 0 ; func end
	ret
	.dbsym r value 16 c
	.dbsym r key1 16 c
	.dbend
	.dbfunc e keyvalue3 _keyvalue3 fc
;          value -> R16
;           key1 -> R16
	.even
_keyvalue3::
	.dbline -1
	.dbline 101
; }
; unsigned char keyvalue3(void)
; {
	.dbline 103
;  	unsigned char key1,value;
; 	DDRC=0xFF;
	ldi R24,255
	out 0x14,R24
	.dbline 104
; 	SET_KEY3();
	cbi 0x14,3
	.dbline 105
; 	SET_KEY4();
	cbi 0x14,4
	.dbline 106
; 	CLEAR_KEY5();
	sbi 0x14,5
	.dbline 107
; 	SET_KEY6();
	cbi 0x14,6
	.dbline 109
; 	
; 	SET_KEY0();
	cbi 0x14,0
	.dbline 110
; 	SET_KEY1();
	cbi 0x14,1
	.dbline 111
; 	SET_KEY2();
	cbi 0x14,2
	.dbline 112
; 	DDRC=PORTC=0;
	clr R2
	out 0x15,R2
	out 0x14,R2
	.dbline 113
; 	key1=PINC;
	in R16,0x13
	.dbline 114
; 	key1=key1&0x07;
	andi R16,7
	.dbline 116
; //	key1=key1<<1;
; 	switch(key1)
	clr R17
	cpi R16,3
	ldi R30,0
	cpc R17,R30
	breq L25
	cpi R16,5
	ldi R30,0
	cpc R17,R30
	breq L24
	cpi R16,6
	ldi R30,0
	cpc R17,R30
	breq L23
	xjmp L20
X2:
	.dbline 117
; 	{
L23:
	.dbline 119
; 		case 0x06:         // 9 keyvalue
; 		value=0x09;        // 9 key
	ldi R16,9
	.dbline 120
; 		break;
	xjmp L21
L24:
	.dbline 122
; 		case 0x05:         // 8 keyvalue
; 		value=0x08;        // 8 key
	ldi R16,8
	.dbline 123
; 		break;
	xjmp L21
L25:
	.dbline 125
; 		case 0x03:         // 7 keyvalue
; 		value=0x07;        // 7 key
	ldi R16,7
	.dbline 126
; 		break;
	xjmp L21
L20:
	.dbline 128
; 		default:
; 		value=0xff;
	ldi R16,255
	.dbline 129
; 		break;
L21:
	.dbline 131
; 	}
; 	return value;
	.dbline -2
L19:
	.dbline 0 ; func end
	ret
	.dbsym r value 16 c
	.dbsym r key1 16 c
	.dbend
	.dbfunc e keyvalue4 _keyvalue4 fc
;          value -> R16
;           key1 -> R16
	.even
_keyvalue4::
	.dbline -1
	.dbline 134
; }
; unsigned char keyvalue4(void)
; {
	.dbline 136
;  	unsigned char key1,value;
; 	DDRC=0xFF;
	ldi R24,255
	out 0x14,R24
	.dbline 137
; 	SET_KEY3();
	cbi 0x14,3
	.dbline 138
; 	SET_KEY4();
	cbi 0x14,4
	.dbline 139
; 	SET_KEY5();
	cbi 0x14,5
	.dbline 140
; 	CLEAR_KEY6();
	sbi 0x14,6
	.dbline 142
; 	
; 	SET_KEY0();
	cbi 0x14,0
	.dbline 143
; 	SET_KEY1();
	cbi 0x14,1
	.dbline 144
; 	SET_KEY2();
	cbi 0x14,2
	.dbline 145
; 	DDRC=PORTC=0;
	clr R2
	out 0x15,R2
	out 0x14,R2
	.dbline 146
; 	key1=PINC;
	in R16,0x13
	.dbline 147
; 	key1=key1&0x07;
	andi R16,7
	.dbline 149
; //	key1=key1<<1;
; 	switch(key1)
	clr R17
	cpi R16,3
	ldi R30,0
	cpc R17,R30
	breq L32
	cpi R16,5
	ldi R30,0
	cpc R17,R30
	breq L31
	cpi R16,6
	ldi R30,0
	cpc R17,R30
	breq L30
	xjmp L27
X3:
	.dbline 150
; 	{
L30:
	.dbline 152
; 		case 0x06:        // # keyvalue
; 		value=0x0b;       // # key
	ldi R16,11
	.dbline 153
; 		break;
	xjmp L28
L31:
	.dbline 155
; 		case 0x05:        // 0 keyvalue
; 		value=0x00;       // 0 key
	clr R16
	.dbline 156
; 		break;
	xjmp L28
L32:
	.dbline 158
; 		case 0x03:        // * keyvalue
; 		value=0x0a;       // * key
	ldi R16,10
	.dbline 159
; 		break;
	xjmp L28
L27:
	.dbline 161
; 		default:
; 		value=0xff;
	ldi R16,255
	.dbline 162
; 		break;
L28:
	.dbline 164
; 	}
; 	return value;
	.dbline -2
L26:
	.dbline 0 ; func end
	ret
	.dbsym r value 16 c
	.dbsym r key1 16 c
	.dbend
	.dbfunc e keyvalue _keyvalue fc
;            cc4 -> R12
;            cc3 -> R10
;            cc2 -> R22
;            cc1 -> R20
	.even
_keyvalue::
	xcall push_gset4
	.dbline -1
	.dbline 167
; }
; unsigned char keyvalue(void)
; {
	.dbline 169
;  		 unsigned char cc1,cc2,cc3,cc4;
; 		 cc1=keyvalue1();
	xcall _keyvalue1
	mov R20,R16
	.dbline 170
; 		 cc2=keyvalue2();
	xcall _keyvalue2
	mov R22,R16
	.dbline 171
; 		 cc3=keyvalue3();
	xcall _keyvalue3
	mov R10,R16
	.dbline 172
; 		 cc4=keyvalue4();
	xcall _keyvalue4
	mov R12,R16
	.dbline 173
; 		 if(cc4!=0xff)
	cpi R16,255
	breq L34
	.dbline 174
; 		 {
	.dbline 175
; 		  	beep(1);
	ldi R16,1
	xcall _beep
	.dbline 176
; 		  	return cc4;
	mov R16,R12
	xjmp L33
L34:
	.dbline 178
; 		 }
; 		 if(cc3!=0xff)
	mov R24,R10
	cpi R24,255
	breq L36
	.dbline 179
; 		 {
	.dbline 180
; 		  	beep(1);
	ldi R16,1
	xcall _beep
	.dbline 181
; 			return cc3;
	mov R16,R10
	xjmp L33
L36:
	.dbline 183
; 		 }
; 		 if(cc2!=0xff)
	cpi R22,255
	breq L38
	.dbline 184
; 		 {
	.dbline 185
; 		  	beep(1);
	ldi R16,1
	xcall _beep
	.dbline 186
; 		 	return cc2;
	mov R16,R22
	xjmp L33
L38:
	.dbline 188
; 		 }
; 		 if(cc1!=0xff)
	cpi R20,255
	breq L40
	.dbline 189
; 		 {
	.dbline 190
; 		  	beep(1);
	ldi R16,1
	xcall _beep
	.dbline 191
; 			return cc1;
	mov R16,R20
	xjmp L33
L40:
	.dbline 193
; 		 }
; 		 return 0xff;
	ldi R16,255
	.dbline -2
L33:
	xcall pop_gset4
	.dbline 0 ; func end
	ret
	.dbsym r cc4 12 c
	.dbsym r cc3 10 c
	.dbsym r cc2 22 c
	.dbsym r cc1 20 c
	.dbend
	.dbfunc e delay1 _delay1 fV
;              i -> R20
;              j -> R22,R23
;         second -> R16
	.even
_delay1::
	xcall push_gset2
	.dbline -1
	.dbline 198
; }
; 
; 
; void delay1(unsigned char second)
; {
	.dbline 201
;  	 unsigned char i;
; 	 unsigned int j;
; 	 for(i=0;i<second;i++)
	clr R20
	xjmp L46
L43:
	.dbline 202
	clr R22
	clr R23
	xjmp L50
L47:
	.dbline 202
L48:
	.dbline 202
	subi R22,255  ; offset = 1
	sbci R23,255
L50:
	.dbline 202
	cpi R22,232
	ldi R30,253
	cpc R23,R30
	brlo L47
L44:
	.dbline 201
	inc R20
L46:
	.dbline 201
	cp R20,R16
	brlo L43
	.dbline -2
L42:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r j 22 i
	.dbsym r second 16 c
	.dbend
	.dbfunc e CMP_STRING _CMP_STRING fc
;             ct -> R20
;            len -> R22
;            pt2 -> R18,R19
;            pt1 -> R16,R17
	.even
_CMP_STRING::
	xcall push_gset2
	ldd R22,y+4
	.dbline -1
	.dbline 206
; 	 	for(j=0;j<65000;j++);
; }		
; unsigned char CMP_STRING(unsigned char *pt1,
;                          unsigned char *pt2,unsigned char len)
; {
	.dbline 208
;      unsigned char ct;         // fixed lenth 4.
;      for (ct=0;ct<len;ct++)
	clr R20
	xjmp L55
L52:
	.dbline 209
;      {
	.dbline 210
;          if (*pt1++ != *pt2++)
	movw R30,R18
	ld R2,Z+
	movw R18,R30
	movw R30,R16
	ld R3,Z+
	movw R16,R30
	cp R3,R2
	breq L56
	.dbline 211
;          return 1;
	ldi R16,1
	xjmp L51
L56:
	.dbline 212
L53:
	.dbline 208
	inc R20
L55:
	.dbline 208
	cp R20,R22
	brlo L52
	.dbline 213
;      }
;      return 0;                 // equal return 0. 	
	clr R16
	.dbline -2
L51:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r ct 20 c
	.dbsym r len 22 c
	.dbsym r pt2 18 pc
	.dbsym r pt1 16 pc
	.dbend

⌨️ 快捷键说明

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