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

📄 dig.asm

📁 1、LED板中每个方向提供四组交通LED灯(包括左转、直行、右转、人行道四组)
💻 ASM
字号:
//====================================================================================
//文件名:DIG.asm
//功能描述:数码管显示及LED灯点亮驱动程序
//维护记录:2006年9月28         by hongyan.Feng
//====================================================================================
//------------------用户只需要修改下面定义即可改变控制端口---------------------------------------//

//===============================数码管及LED灯段选定义===========================//
//.DEFINE SEG_IO_Port	0			//若LED段选用IOA则采用该定义
.DEFINE SEG_IO_Port	1		//若LED段选用IOB则采用该定义
.DEFINE SEG_Data	0			//若LED段选用I/O口低8位则用该定义
//.DEFINE SEG_Data	1			//若LED段选用I/O口高8位则用该定义
//===============================数码管及LED灯位选定义===========================//
.DEFINE DIG_IO_Port	0		//若数码管及LED管位选选用IOA则采用该定义
//.DEFINE DIG_IO_Port	1			//若数码管及LED管位选选用IOB则采用该定义

//-------------------------------------------------------------------------------------------------//    
//================================================================================
//数码管及LED段选I/O口定义
//================================================================================
.IF SEG_IO_Port==0
	.DEFINE P_SEG_Data		0x7000
	.DEFINE P_SEG_Buffer	0x7001
	.DEFINE P_SEG_Dir		0x7002
	.DEFINE P_SEG_Attrib	0x7003
.ELSE
	.DEFINE P_SEG_Data		0x7005
	.DEFINE P_SEG_Buffer	0x7006
	.DEFINE P_SEG_Dir		0x7007
	.DEFINE P_SEG_Attrib	0x7008
.ENDIF
	
.IF SEG_Data==0
	.DEFINE P_SEG_Byte 0x00ff
.ELSE
	.DEFINE P_SEG_Byte 0xff00
.ENDIF
//=================================================================================
//数码管及LED位选I/O口定义
//=================================================================================
.IF	DIG_IO_Port==0
	.DEFINE P_DIG_Data		0x7000
	.DEFINE P_DIG_Buffer	0x7001
	.DEFINE P_DIG_Dir		0x7002
	.DEFINE P_DIG_Attrib	0x7003
.ELSE
	.DEFINE P_DIG_Data		0x7005
	.DEFINE P_DIG_Buffer	0x7006
	.DEFINE P_DIG_Dir		0x7007
	.DEFINE P_DIG_Attrib	0x7008
.ENDIF
//=================================================================================
//中断定义
//=================================================================================
.DEFINE P_INT_Ctrl_New		0x702d
.DEFINE C_IRQ4_1KHz			0x0010
//=================================================================================
//变量定义
//=================================================================================
.PUBLIC _R_DIG_Buf
.RAM
_R_DIG_Buf:		.DW 		16 DUP (?)	// 	数码管显示缓冲区
.VAR _Counter							//	存储调用DIG_ScanDrive函数的次数
.CODE
//=================================================================================
// 函数名称:	DIG_Initial
// C调用:		void DIG_Initial(void)
// 汇编调用:	F_DIG_Initial
// 实现功能:   数码管显示及LED灯点亮初始化,该函数将开启IRQ4_1KHz
// 入口参数:	无
// 出口参数:	无
// 破坏寄存器:	无
//=================================================================================
.PUBLIC _DIG_Initial						
.PUBLIC F_DIG_Initial 
_DIG_Initial:
F_DIG_Initial:
	r1 = [P_SEG_Attrib]
	r1 |= P_SEG_Byte
	[P_SEG_Attrib] = r1
	
	r1 = [P_SEG_Dir]
	r1 |= P_SEG_Byte
	[P_SEG_Dir] = r1
	  
	r1 = [P_SEG_Data]
	r1 &= ~P_SEG_Byte
	[P_SEG_Buffer] = r1
	
	r1 = 0xffff
	[P_DIG_Attrib] = r1
	[P_DIG_Dir] = r1
	r1 = 0x0001
	[P_DIG_Buffer] = r1
	
	r1 = [P_INT_Ctrl_New]
	r1 |= C_IRQ4_1KHz 
	[P_INT_Ctrl_New] = r1
	
	int fiq,irq
	retf
	
//=================================================================================
// 函数名称:	DIG_ScanDrive
// C调用:		void DIG_ScanDrive(void)
// 汇编调用:	F_DIG_ScanDrive
// 实现功能:   数码管及LED灯刷新点亮函数,该函数在IRQ4_1KHz中调用
// 入口参数:	无
// 出口参数:	无
// 破坏寄存器:	无
//=================================================================================
.PUBLIC _DIG_ScanDrive
.PUBLIC F_DIG_ScanDrive
_DIG_ScanDrive:
F_DIG_ScanDrive:
	r1 = [P_DIG_Data]
	cmp r1,0x8000
	jnz ?LeftShift
	r1 = 0x0001
	r2 = 0
	[_Counter] = r2
	jmp ?ShiftOver
?LeftShift:
	r1 = r1 lsl 1
?ShiftOver:
	[P_DIG_Buffer] = r1
	r1 = _R_DIG_Buf
	r1 += [_Counter]
	r2 = [r1]
	r2 &= P_SEG_Byte
	[P_SEG_Buffer] = r2 	
	r1 = [_Counter] 
	r1 += 1
	[_Counter] = r1
	retf

⌨️ 快捷键说明

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