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

📄 16按键.s

📁 AVR之ATMega16
💻 S
字号:
	.module _16按键.c
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\16按键/delay.h
	.dbfunc e DelayUS _DelayUS fV
;           time -> R16,R17
	.even
_DelayUS::
	.dbline -1
	.dbline 9
; //内部晶振 8M
; //包含所需头文件
; #include <ioM16v.h>
; #include <macros.h>
; #include"delay.h"
; 
; 
; 
; /*------宏定义------*/
	xjmp L3
L2:
	.dbline 11
	subi R16,1
	sbci R17,0
L3:
	.dbline 10
; #define uchar	unsigned char
	ldi R24,1
	ldi R25,0
	cp R24,R16
	cpc R25,R17
	brlo L2
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbsym r time 16 i
	.dbend
	.dbfunc e DelayMS _DelayMS fV
;              i -> R20,R21
;           time -> R16,R17
	.even
_DelayMS::
	xcall push_gset1
	.dbline -1
	.dbline 20
; #define uint	unsigned int
; 
; uchar led_date[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,
;                   0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E};//数码管段位
; uchar led_seg[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//数码管片选
; uchar key_board[]={0xe7,0xeb,0xed,0xee,0xd7,0xdb,0xdd,0xde,
;                    0xb7,0xbb,0xbd,0xbe,0x77,0x7b,0x7d,0x7e};    //按键键值
; uchar anjianzhi;
; //端口初始化
; void port_init(void)
	xjmp L7
L6:
	.dbline 23
; {
;  PORTA = 0x00;//A口数据置0
;  DDRA  = 0xFF;//A口方向设为输出
	.dbline 24
;  PORTB = 0x00;//B口数据置0
	ldi R20,1
	ldi R21,0
	xjmp L12
L9:
	.dbline 25
L10:
	.dbline 24
	subi R20,255  ; offset = 1
	sbci R21,255
L12:
	.dbline 24
	cpi R20,118
	ldi R30,4
	cpc R21,R30
	brlo L9
	.dbline 26
L7:
	.dbline 22
	movw R2,R16
	subi R16,1
	sbci R17,0
	tst R2
	brne L6
	tst R3
	brne L6
X0:
	.dbline -2
L5:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r time 16 i
	.dbend
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\16按键/delay.h
_led_date::
	.blkb 2
	.area idata
	.byte 192,249
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\16按键/delay.h
	.blkb 2
	.area idata
	.byte 164,176
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\16按键/delay.h
	.blkb 2
	.area idata
	.byte 153,146
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\16按键/delay.h
	.blkb 2
	.area idata
	.byte 130,248
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\16按键/delay.h
	.blkb 2
	.area idata
	.byte 128,144
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\16按键/delay.h
	.blkb 2
	.area idata
	.byte 136,131
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\16按键/delay.h
	.blkb 2
	.area idata
	.byte 198,161
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\16按键/delay.h
	.blkb 2
	.area idata
	.byte 134,142
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\16按键/delay.h
	.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\16按键\16按键.c
	.dbsym e led_date _led_date A[16:16]c
_led_seg::
	.blkb 2
	.area idata
	.byte 254,253
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\16按键\16按键.c
	.blkb 2
	.area idata
	.byte 251,247
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\16按键\16按键.c
	.blkb 2
	.area idata
	.byte 239,223
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\16按键\16按键.c
	.blkb 2
	.area idata
	.byte 191,127
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\16按键\16按键.c
	.dbsym e led_seg _led_seg A[8:8]c
_key_board::
	.blkb 2
	.area idata
	.byte 231,235
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\16按键\16按键.c
	.blkb 2
	.area idata
	.byte 237,238
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\16按键\16按键.c
	.blkb 2
	.area idata
	.byte 215,219
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\16按键\16按键.c
	.blkb 2
	.area idata
	.byte 221,222
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\16按键\16按键.c
	.blkb 2
	.area idata
	.byte 183,187
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\16按键\16按键.c
	.blkb 2
	.area idata
	.byte 189,190
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\16按键\16按键.c
	.blkb 2
	.area idata
	.byte 'w,123
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\16按键\16按键.c
	.blkb 2
	.area idata
	.byte 125,126
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\16按键\16按键.c
	.dbsym e key_board _key_board A[16:16]c
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\16按键\16按键.c
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 21
	.dbline 22
	clr R2
	out 0x1b,R2
	.dbline 23
	ldi R24,255
	out 0x1a,R24
	.dbline 24
	out 0x18,R2
	.dbline 25
;  DDRB  = 0xFF;//B口方向设为输出
	out 0x17,R24
	.dbline 26
;  PORTC = 0xFF;
	out 0x15,R24
	.dbline 27
;  DDRC  = 0xFF;
	out 0x14,R24
	.dbline 28
;  PORTD = 0xFF;
	out 0x12,R24
	.dbline 29
;  DDRD  = 0xFF;
	out 0x11,R24
	.dbline -2
L13:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e init_devices _init_devices fV
	.even
_init_devices::
	.dbline -1
	.dbline 34
; }
; 
; 
; void init_devices(void)
; {
	.dbline 35
;  CLI(); //禁止所有中断
	cli
	.dbline 36
;  MCUCR  = 0x00;//外部中断触发方式
	clr R2
	out 0x35,R2
	.dbline 37
;  MCUCSR = 0x80;//禁止JTAG
	ldi R24,128
	out 0x34,R24
	.dbline 38
;  GICR   = 0x00;//外部中断使能
	out 0x3b,R2
	.dbline 39
;  port_init();
	xcall _port_init
	.dbline -2
L14:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e keyboard _keyboard fc
;              i -> R20
;            key -> R20
;              b -> R22
;              a -> R10
	.even
_keyboard::
	xcall push_gset3
	.dbline -1
	.dbline 43
;  //SEI();//开全局中断
; }
; uchar keyboard(void)  //读取键盘
;       {
	.dbline 44
;        		      uchar i=0;
	clr R20
	.dbline 45
;       		      uchar a=0;
	clr R10
	.dbline 46
;       		      uchar b=0;
	clr R22
	.dbline 47
;       		      uchar key=0;
	.dbline 48
;       		      DDRC=0x0f;//D口前四位输入,后四位输出
	ldi R24,15
	out 0x14,R24
	.dbline 50
;       		      //DelayUS(10);
; 				  PORTC=0xf0;//D口前四位置1,后四位置0
	ldi R24,240
	out 0x15,R24
	.dbline 51
;       		      DelayUS(10);
	ldi R16,10
	ldi R17,0
	xcall _DelayUS
	.dbline 52
;       		      a=PINC&0xf0; //读取D口前四位数值
	in R24,0x13
	andi R24,240
	mov R10,R24
	.dbline 53
;       		      DDRC=0xf0;//D口前四位输出,后四位输入
	ldi R24,240
	out 0x14,R24
	.dbline 55
;       		      //DelayUS(10);
; 				  PORTC=0x0f;//D口后四位置1,前四位置0
	ldi R24,15
	out 0x15,R24
	.dbline 56
;       		      DelayUS(10);
	ldi R16,10
	ldi R17,0
	xcall _DelayUS
	.dbline 57
;       		      b=PINC&0x0f; //读取D口后四位数值
	in R22,0x13
	andi R22,15
	.dbline 58
;       		      key=a+b;//D口八位数据赋予key
	mov R20,R10
	add R20,R22
	.dbline 59
;       		      return key;
	mov R16,R20
	.dbline -2
L15:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r key 20 c
	.dbsym r b 22 c
	.dbsym r a 10 c
	.dbend
	.dbfunc e jianzhi _jianzhi fV
;             m2 -> R10
;             m1 -> R20
;              i -> R22
	.even
_jianzhi::
	xcall push_gset3
	.dbline -1
	.dbline 62
;       }
; void jianzhi(void)//取得键值
;      {
	.dbline 63
; 	 uchar m1,m2,i=0;
	clr R22
	.dbline 64
;       	    if (keyboard()!=0xff)
	xcall _keyboard
	cpi R16,255
	breq L17
	.dbline 65
;      	    {
	.dbline 66
;      	       	  m1=keyboard();//调用读取键盘程序
	xcall _keyboard
	mov R20,R16
	.dbline 67
;      	    	  DelayMS(10);
	ldi R16,10
	ldi R17,0
	xcall _DelayMS
	.dbline 68
;      	    	  m2=keyboard();//调用两次
	xcall _keyboard
	mov R10,R16
	.dbline 69
;      	    	  if (m1==m2)
	cp R20,R16
	brne L19
	.dbline 70
;      	    	  {
	.dbline 71
;      	    	        for (i=0;i<16;i++)
	xjmp L24
L21:
	.dbline 72
;      	    	  	{
	.dbline 73
;      	    	  	    if (m1==key_board[i])//循环判断读取数值与按键键值是否相同
	ldi R24,<_key_board
	ldi R25,>_key_board
	mov R30,R22
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	cp R20,R2
	brne L25
	.dbline 74
;      	    	  	    {
	.dbline 75
;      	    	  	       		anjianzhi=i;//数值赋予变量
	sts _anjianzhi,R22
	.dbline 76
;      	    	  	    }
L25:
	.dbline 77
L22:
	.dbline 71
	inc R22
L24:
	.dbline 71
	cpi R22,16
	brlo L21
	.dbline 78
;      	    	  	}
;      	    	  }
L19:
	.dbline 79
L17:
	.dbline -2
L16:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r m2 10 c
	.dbsym r m1 20 c
	.dbsym r i 22 c
	.dbend
	.dbfunc e main _main fV
	.even
_main::
	.dbline -1
	.dbline 83
;      	    }
;      }
; //主函数
; void main(void)
; { 
	.dbline 84
;  init_devices();
	xcall _init_devices
	xjmp L29
L28:
	.dbline 87
	.dbline 89
	xcall _jianzhi
	.dbline 90
	ldi R24,<_led_date
	ldi R25,>_led_date
	lds R30,_anjianzhi
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	out 0x1b,R2
	.dbline 91
	ldi R24,254
	out 0x18,R24
	.dbline 92
	ldi R16,100
	ldi R17,0
	xcall _DelayMS
	.dbline 94
L29:
	.dbline 86
	xjmp L28
X1:
	.dbline -2
L27:
	.dbline 0 ; func end
	ret
	.dbend
	.area bss(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\16按键\16按键.c
_anjianzhi::
	.blkb 1
	.dbsym e anjianzhi _anjianzhi c

⌨️ 快捷键说明

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