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

📄 main.s

📁 meg16 的所有功能实例
💻 S
📖 第 1 页 / 共 5 页
字号:
_disp1_buffer::
	.blkb 2
	.area idata
	.byte 17,'A
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\LCD5110-华容道游戏/5110.h
	.blkb 2
	.area idata
	.byte 'A,19
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\LCD5110-华容道游戏/5110.h
	.blkb 2
	.area idata
	.byte 18,'A
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\LCD5110-华容道游戏/5110.h
	.blkb 2
	.area idata
	.byte 'A,20
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\LCD5110-华容道游戏/5110.h
	.blkb 2
	.area idata
	.byte 33,49
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\LCD5110-华容道游戏/5110.h
	.blkb 2
	.area idata
	.byte 49,36
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\LCD5110-华容道游戏/5110.h
	.blkb 2
	.area idata
	.byte 33,34
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\LCD5110-华容道游戏/5110.h
	.blkb 2
	.area idata
	.byte 35,36
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\LCD5110-华容道游戏/5110.h
	.blkb 2
	.area idata
	.byte 0,34
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\LCD5110-华容道游戏/5110.h
	.blkb 2
	.area idata
	.byte 35,0
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\LCD5110-华容道游戏/5110.h
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\LCD5110-华容道游戏\main.c
	.dbsym e disp1_buffer _disp1_buffer A[20:5:4]c
_disp2_buffer::
	.blkb 2
	.area idata
	.byte 17,'A
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\LCD5110-华容道游戏\main.c
	.blkb 2
	.area idata
	.byte 'A,19
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\LCD5110-华容道游戏\main.c
	.blkb 2
	.area idata
	.byte 18,'A
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\LCD5110-华容道游戏\main.c
	.blkb 2
	.area idata
	.byte 'A,20
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\LCD5110-华容道游戏\main.c
	.blkb 2
	.area idata
	.byte 49,49
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\LCD5110-华容道游戏\main.c
	.blkb 2
	.area idata
	.byte 50,50
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\LCD5110-华容道游戏\main.c
	.blkb 2
	.area idata
	.byte 51,51
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\LCD5110-华容道游戏\main.c
	.blkb 2
	.area idata
	.byte 52,52
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\LCD5110-华容道游戏\main.c
	.blkb 2
	.area idata
	.byte 0,53
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\LCD5110-华容道游戏\main.c
	.blkb 2
	.area idata
	.byte 53,0
	.area data(ram, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\LCD5110-华容道游戏\main.c
	.dbsym e disp2_buffer _disp2_buffer A[20:5:4]c
	.area text(rom, con, rel)
	.dbfile E:\MYWORK~1\开发设计\EasyAVR\程序范例\Mega16程序包\完成整理\LCD5110-华容道游戏\main.c
	.dbfunc e Delay_us _Delay_us fV
;           time -> R16,R17
	.even
_Delay_us::
	.dbline -1
	.dbline 58
; #include <iom16v.h>
; #include <MACROS.h>
; #include "Define.h"
; #include "5110.h"
; 
; //=======================================================================
; //=======================================================================
; //按键I/O口定义
; #define key_ddr      DDRA
; #define key_port     PORTA
; #define key_pin      PINA
; 
; //=======================================================================
; //按键键值定义
; #define all_key      0xF8 
; 
; #define Up	     0x78      //7		          
; #define Right	 0xB8      //6        
; #define Enter    0xD8      //5
; #define Left	 0xE8      //4
; #define Down	 0xF0      //3
; extern const uint8 font6x8[][6];  //LCD字符显示码表声明
; 
; uint8 key_state;   //按键状态
; uint8 key_value;   //按键返回值
; uint8 key_last_value;		   //上次按键返回值
; uint8 key_one;				   //处理按键后是否完成一次显示
; 
; uint8 X;	  //鼠标X轴
; uint8 Y;	  //鼠标Y轴
; 
; uint16 NUM_BEST;           //最好步数
; uint16 NUM_YOUR;           //走的步数
; 
; uint8 guanshu;			   //第几局
; uint8 disp_buffer[5][4];   //显示缓存区
; 
; 
; uint8 disp1_buffer[5][4]={ //第一局开局棋子布局
; {0x11,0x41,0x41,0x13},
; {0x12,0x41,0x41,0x14},
; {0x21,0x31,0x31,0x24},
; {0x21,0x22,0x23,0x24},
; {0x00,0x22,0x23,0x00},
; };
; uint8 disp2_buffer[5][4]={ //第二局开局棋子布局
; {0x11,0x41,0x41,0x13},
; {0x12,0x41,0x41,0x14},
; {0x31,0x31,0x32,0x32},
; {0x33,0x33,0x34,0x34},
; {0x00,0x35,0x35,0x00},
; };
; 
; 
; //=======================================================================  
; //延时函数
; void Delay_us(uint16 time) 
; 	{while (time--)
	xjmp L3
L2:
	.dbline 59
	wdr
L3:
	.dbline 58
	movw R2,R16
	subi R16,1
	sbci R17,0
	tst R2
	brne L2
	tst R3
	brne L2
X0:
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbsym r time 16 i
	.dbend
	.dbfunc e Delay_ms _Delay_ms fV
;           time -> R20,R21
	.even
_Delay_ms::
	xcall push_gset1
	movw R20,R16
	.dbline -1
	.dbline 63
; 	 _WDR();
; 	
; 	}
; void Delay_ms(uint16 time) 
; 	{while (time--)
	xjmp L7
L6:
	.dbline 64
	ldi R16,1200
	ldi R17,4
	xcall _Delay_us
L7:
	.dbline 63
	movw R2,R20
	subi R20,1
	sbci R21,0
	tst R2
	brne L6
	tst R3
	brne L6
X1:
	.dbline -2
L5:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r time 20 i
	.dbend
	.dbfunc e main _main fV
;              i -> R20
;              j -> R22
	.even
_main::
	sbiw R28,6
	.dbline -1
	.dbline 71
; 	 Delay_us(1200);
; 	}
; 
; 
; //=======================================================================  
; //主函数
; void main(void)
; {
	.dbline 73
;  uint8 i,j;
;  guanshu=1;
	ldi R24,1
	sts _guanshu,R24
	.dbline 74
;  NUM_BEST=100;
	ldi R24,100
	ldi R25,0
	sts _NUM_BEST+1,R25
	sts _NUM_BEST,R24
	.dbline 76
; 
;  SETBIT(DDRC,BACKLED_EN);   			//配置背光控制端口										
	sbi 0x14,7
	.dbline 77
;  CLEARBIT(PORTC,BACKLED_EN);			//使能背光
	cbi 0x15,7
	.dbline 79
; 	
;  LCD_init();          //初始化LCD模块
	xcall _LCD_init
	xjmp L11
L10:
	.dbline 82
; 
;  while(1)			  //总循环
;  {
	.dbline 83
;  LCD_clear();		  //清屏
	xcall _LCD_clear
	.dbline 86
; 
;  //显示数据界面
;  LCD_write_String(34,0,8,"YOUR:000",0);
	clr R2
	clr R3
	std y+5,R3
	std y+4,R2
	ldi R24,<L13
	ldi R25,>L13
	std y+3,R25
	std y+2,R24
	ldi R24,8
	ldi R25,0
	std y+1,R25
	std y+0,R24
	clr R18
	clr R19
	ldi R16,34
	ldi R17,0
	xcall _LCD_write_String
	.dbline 87
;  LCD_write_String(34,1,8,"BEST:000",0);
	clr R2
	clr R3
	std y+5,R3
	std y+4,R2
	ldi R24,<L14
	ldi R25,>L14
	std y+3,R25
	std y+2,R24
	ldi R24,8
	ldi R25,0
	std y+1,R25
	std y+0,R24
	ldi R18,1
	ldi R19,0
	ldi R16,34
	ldi R17,0
	xcall _LCD_write_String
	.dbline 88
;  LCD_write_String(34,3,8,"GUAN:001",0);
	clr R2
	clr R3
	std y+5,R3
	std y+4,R2
	ldi R24,<L15
	ldi R25,>L15
	std y+3,R25
	std y+2,R24
	ldi R24,8
	ldi R25,0
	std y+1,R25
	std y+0,R24
	ldi R18,3
	ldi R19,0
	ldi R16,34
	ldi R17,0
	xcall _LCD_write_String
	.dbline 90
;  
;  NUMdisp_task(NUM_BEST,1);			   //显示最好成绩
	ldi R18,1
	ldi R19,0
	lds R16,_NUM_BEST
	lds R17,_NUM_BEST+1
	xcall _NUMdisp_task
	.dbline 91
;  NUMdisp_task(guanshu,3);			   //显示第几关
	ldi R18,3
	ldi R19,0
	lds R16,_guanshu
	clr R17
	xcall _NUMdisp_task
	.dbline 94
;  
;  //一切变量都重新初始化
;  key_init();
	xcall _key_init
	.dbline 95
;  key_state=0;
	clr R2
	sts _key_state,R2
	.dbline 96
;  key_value=0;
	sts _key_value,R2
	.dbline 97
;  key_last_value=0;
	sts _key_last_value,R2
	.dbline 98
;  key_one=1;
	ldi R24,1
	sts _key_one,R24
	.dbline 99
;  X=0;
	sts _X,R2
	.dbline 100
;  Y=0;
	sts _Y,R2
	.dbline 101
;  NUM_YOUR=0;
	clr R3
	sts _NUM_YOUR+1,R3
	sts _NUM_YOUR,R2
	.dbline 102
;  SEI();                       //全局中断使能
	sei
	xjmp L17
L16:
	.dbline 104
;  while(1)					  //选关
;  {
	.dbline 106
;   
;   if(key_value==Down)
	lds R24,_key_value
	cpi R24,240
	brne L19
	.dbline 107
;     {
	.dbline 108
; 	 key_value=0;
	clr R2
	sts _key_value,R2
	.dbline 109
; 	 guanshu++;
	lds R24,_guanshu
	subi R24,255    ; addi 1
	sts _guanshu,R24
	.dbline 110
; 	 if(guanshu==3)
	cpi R24,3
	brne L21
	.dbline 111
; 	    guanshu=1;
	ldi R24,1
	sts _guanshu,R24
L21:
	.dbline 112
; 	 NUMdisp_task(guanshu,3);
	ldi R18,3
	ldi R19,0
	lds R16,_guanshu
	clr R17
	xcall _NUMdisp_task
	.dbline 113
; 	}
L19:
	.dbline 114
;   if(key_value==Enter)		 //按确定选关完成
	lds R24,_key_value
	cpi R24,216
	brne L23
	.dbline 115
;     {
	.dbline 116
; 	 key_value=0;
	clr R2
	sts _key_value,R2
	.dbline 117
;      break;
	xjmp L18
L23:
	.dbline 119
L17:
	.dbline 103
	xjmp L16
L18:
	.dbline 122
; 	}
;  }
; 
;  //将选择的局载入显示缓存区
;  if(guanshu==1)
	lds R24,_guanshu
	cpi R24,1
	brne L25
	.dbline 123
;  {
	.dbline 124
;  for(i=0;i<5;i++)
	clr R20
	xjmp L30
L27:
	.dbline 125
;  for(j=0;j<4;j++)
	clr R22
	xjmp L34
L31:
	.dbline 126
	.dbline 127
	ldi R24,4
	mul R24,R20
	ldi R24,<_disp1_buffer
	ldi R25,>_disp1_buffer
	movw R2,R0
	add R2,R24
	adc R3,R25
	mov R30,R22
	clr R31
	add R30,R2
	adc R31,R3
	ldd R2,z+0
	ldi R24,<_disp_buffer
	ldi R25,>_disp_buffer
	movw R4,R0
	add R4,R24
	adc R5,R25
	mov R30,R22
	clr R31
	add R30,R4
	adc R31,R5
	std z+0,R2
	.dbline 128
L32:
	.dbline 125
	inc R22
L34:
	.dbline 125
	cpi R22,4
	brlo L31
L28:
	.dbline 124
	inc R20
L30:
	.dbline 124
	cpi R20,5
	brlo L27
	.dbline 129
;     {
; 	disp_buffer[i][j]=disp1_buffer[i][j];
; 	}
;  }
	xjmp L26
L25:
	.dbline 131
;  else
;  {
	.dbline 132
;  for(i=0;i<5;i++)
	clr R20
	xjmp L38
L35:
	.dbline 133
;  for(j=0;j<4;j++)
	clr R22
	xjmp L42
L39:
	.dbline 134
	.dbline 135
	ldi R24,4
	mul R24,R20
	ldi R24,<_disp2_buffer
	ldi R25,>_disp2_buffer
	movw R2,R0
	add R2,R24
	adc R3,R25
	mov R30,R22
	clr R31
	add R30,R2
	adc R31,R3
	ldd R2,z+0
	ldi R24,<_disp_buffer
	ldi R25,>_disp_buffer
	movw R4,R0
	add R4,R24
	adc R5,R25
	mov R30,R22
	clr R31
	add R30,R4
	adc R31,R5
	std z+0,R2
	.dbline 136
L40:
	.dbline 133
	inc R22
L42:
	.dbline 133
	cpi R22,4
	brlo L39
L36:
	.dbline 132
	inc R20
L38:
	.dbline 132
	cpi R20,5
	brlo L35
	.dbline 137
;     {
; 	disp_buffer[i][j]=disp2_buffer[i][j];
; 	}
;  }
L26:
	.dbline 140
;  
;  //开始闯关
;  for(;;)
L43:
	.dbline 141
;   {
	.dbline 143
;     //显示鼠标
;  LCD_set_XY(Y*8+3,X);//设置初始位置
	lds R18,_X
	lds R2,_Y
	ldi R24,8
	mul R24,R2
	mov R16,R0
	subi R16,253    ; addi 3
	xcall _LCD_set_XY
	.dbline 144
;  LCD_write_byte(0x3c,1);
	ldi R18,1
	ldi R16,60
	xcall _LCD_write_byte
	.dbline 145
;  LCD_write_byte(0x3c,1);
	ldi R18,1
	ldi R16,60
	xcall _LCD_write_byte
	.dbline 146
;    KBOD_task();							 //按键操作处理
	xcall _KBOD_task
	.dbline 148
;    
;    if(key_value!=0)
	lds R2,_key_value
	tst R2
	breq L47
	.dbline 149
;      {
	.dbline 151
; 	  
; 	  key_last_value=key_value;			 //将上次的键值存起来
	sts _key_last_value,R2
	.dbline 152
; 	  key_value=0;						 //将当前键值清零	 
	clr R2
	sts _key_value,R2
	.dbline 153
; 	  key_one=1;						 //将显示打开
	ldi R24,1
	sts _key_one,R24
	.dbline 154
; 	 }
L47:
	.dbline 156
; 	 
;    if(key_one==1)
	lds R24,_key_one
	cpi R24,1
	brne L49
	.dbline 157
;      {
	.dbline 158
; 	  DISP_task();						 //显示图形界面
	xcall _DISP_task
	.dbline 159
;       key_one=0;						 //将显示关闭
	clr R2
	sts _key_one,R2
	.dbline 160
; 	 }
L49:
	.dbline 163
; 	 
;    //判断通关与否
;    if((disp_buffer[4][1]==0x41)&(disp_buffer[4][2]==0x41))    //通过
	lds R24,_disp_buffer+16+1
	cpi R24,65
	brne L57
	ldi R24,1
	ldi R25,0
	movw R10,R24
	xjmp L58
L57:
	clr R10
	clr R11
L58:
	lds R24,_disp_buffer+16+2
	cpi R24,65
	brne L59
	ldi R22,1
	ldi R23,0
	xjmp L60
L59:
	clr R22
	clr R23
L60:
	movw R2,R10
	and R2,R22
	and R3,R23
	tst R2
	brne X2
	tst R3
	brne X4
	xjmp L43
X4:
X2:
	.dbline 164
;     {
	.dbline 166
; 	 
; 	 LCD_clear();											  //清屏
	xcall _LCD_clear
	.dbline 167
;      LCD_write_String(0,5,15,"Congratulation!",0);			  //祝贺
	clr R2
	clr R3
	std y+5,R3
	std y+4,R2
	ldi R24,<L61
	ldi R25,>L61
	std y+3,R25
	std y+2,R24
	ldi R24,15
	ldi R25,0
	std y+1,R25
	std y+0,R24
	ldi R18,5
	ldi R19,0
	clr R16
	clr R17
	xcall _LCD_write_String
	.dbline 168
; 	 LCD_write_String(0,4,5,"Wait!",0);						  //等待
	clr R2
	clr R3
	std y+5,R3
	std y+4,R2
	ldi R24,<L62
	ldi R25,>L62
	std y+3,R25
	std y+2,R24
	ldi R24,5
	ldi R25,0
	std y+1,R25
	std y+0,R24
	ldi R18,4
	ldi R19,0
	clr R16
	clr R17
	xcall _LCD_write_String
	.dbline 169
; 	 Delay_ms(10000);										  //延时
	ldi R16,10000
	ldi R17,39
	xcall _Delay_ms
	.dbline 170
; 	 guanshu++;												  //关数加1
	lds R24,_guanshu
	subi R24,255    ; addi 1
	sts _guanshu,R24
	.dbline 171
; 	 if(guanshu==3)											  //达到最高关数就返回第一关
	cpi R24,3
	brne L63

⌨️ 快捷键说明

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