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

📄 serialtocollateral.h

📁 我们编写了一个支持位操作、普通端口操作、并行操作、串行操作等多种模式的12864驱动
💻 H
字号:
#ifndef _Use_SerialToCollateral
# define _Use_SerialToCollateral
/********************************************************
*  函数库说明:串行输出转为并行输出基本函数库           *
*  版本:      v1.0                                     *
*  作者:      傻孩子                                   *
*  日期:      2006年1月7日                             *
*  修改:      傻孩子                                   *
*  修改日期:  2006年2月09日                            *
*                                                       *
*  [说明]                                               *
*          1、该头文件通过3根线连接到595实现对级联的    *
*             595进行驱动,达到扩展输出端口的作用。     *
*          2、基本支持单595和2个595级联的情况,并允许   *
*             在头文件外部自定义多个595级联的情况。当   *
*             使用外部自定义多级595连接时,只需要定义   *
*             相应的位段和虚拟端口变量即可。支持位操作  *
*          3、使用的时候,可以通过查询扫描的方式,也    *
*             可以在修改虚拟端口值以后通过调用函数      *
*             refreshVirtualPORT()来即时刷新(推荐)。    *
********************************************************/

/***********************
*    系 统 宏 定 义    *
***********************/

/*---------------------*
*    常 数 宏 定 义    *
*---------------------*/
#ifndef True
    # define True       0x01
#endif
#ifndef False
    # define False      0x00
#endif
#ifndef NULL
    # define NULL       0x00
#endif
#ifndef Enable
    # define Enable     0x00
#endif
#ifndef Disable
    # define Disable    0x01
#endif

#ifdef _Use_8Bit_VitualPORT
    struct VirtualPORT
	{
	    unsigned BIT0:1;
		unsigned BIT1:1;
		unsigned BIT2:1;
		unsigned BIT3:1;
		unsigned BIT4:1;
		unsigned BIT5:1;
		unsigned BIT6:1;
		unsigned BIT7:1;
	};
	
	# define VIRTUAL_BIT_COUNT 8
#endif
#ifdef _Use_16Bit_VitualPORT
	struct VirtualPORT
	{
	    unsigned BIT0:1;
		unsigned BIT1:1;
		unsigned BIT2:1;
		unsigned BIT3:1;
		unsigned BIT4:1;
		unsigned BIT5:1;
		unsigned BIT6:1;
		unsigned BIT7:1;
		
		unsigned BIT8:1;
		unsigned BIT9:1;
		unsigned BIT10:1;
		unsigned BIT11:1;
		unsigned BIT12:1;
		unsigned BIT13:1;
		unsigned BIT14:1;
		unsigned BIT15:1;
	};
	# define VIRTUAL_BIT_COUNT 16
#endif

/*---------------------*
*    动 作 宏 定 义    *
*---------------------*/
#ifndef VRCK
    # define VRCK       _PB1
#endif
#ifndef VSCK
    # define VSCK       _PB2
#endif
#ifndef VSI
    # define VSI        _PB3
#endif
/***********************
*    全局变量声明区    *
***********************/
#if (VIRTUAL_BIT_COUNT == 8)
    char VPORT = 0;
	
	# define PV0        (*VPORTBit).BIT0
	# define PV1        (*VPORTBit).BIT1
	# define PV2        (*VPORTBit).BIT2
	# define PV3        (*VPORTBit).BIT3
	# define PV4        (*VPORTBit).BIT4
	# define PV5        (*VPORTBit).BIT5
	# define PV6        (*VPORTBit).BIT6
	# define PV7        (*VPORTBit).BIT7
	
#endif
#if (VIRTUAL_BIT_COUNT == 16)
    unsigned int VPORT = 0;

	# define PV0        (*VPORTBit).BIT0
	# define PV1        (*VPORTBit).BIT1
	# define PV2        (*VPORTBit).BIT2
	# define PV3        (*VPORTBit).BIT3
	# define PV4        (*VPORTBit).BIT4
	# define PV5        (*VPORTBit).BIT5
	# define PV6        (*VPORTBit).BIT6
	# define PV7        (*VPORTBit).BIT7
	
	# define PV8        (*VPORTBit).BIT8
	# define PV9        (*VPORTBit).BIT9
	# define PV10       (*VPORTBit).BIT10
	# define PV11       (*VPORTBit).BIT11
	# define PV12       (*VPORTBit).BIT12
	# define PV13       (*VPORTBit).BIT13
	# define PV14       (*VPORTBit).BIT14
	# define PV15       (*VPORTBit).BIT15
  
#endif
	struct VirtualPORT *VPORTBit = (struct VirtualPORT *)&(VPORT);



char IfPortChange = False;
/***********************
*    系统函数声明区    *
***********************/
void refreshVirtualPORT(void);
void sendBITS(char Data);
void VirtualPORTProccess(void);
char setBIT(char BIT);
char clearBIT(char BIT);

/********************************************************
*  函数说明:虚拟端口置位函数                           *
*  输入:    位编号                                     *
*  输出:    操作是否成功                               *
********************************************************/
char setBIT(char BIT)
{
    if (BIT >= VIRTUAL_BIT_COUNT)
	{
	    return False;
	}
	
	VPORT |= 1<<BIT;
	IfPortChange = True;
	VirtualPORTProccess();                               //刷新端口
	return True;
}

/********************************************************
*  函数说明:虚拟端口清零函数                           *
*  输入:    位编号                                     *
*  输出:    操作是否成功                               *
********************************************************/
char clearBIT(char BIT)
{
    if (BIT >= VIRTUAL_BIT_COUNT)
	{
	    return False;
	}
	
	VPORT &= ~(1<<BIT);
	IfPortChange = True;
	VirtualPORTProccess();                               //刷新端口
	return True;
}

/********************************************************
*  函数说明:虚拟端口处理程序                           *
********************************************************/
void VirtualPORTProccess(void)
{
    if (IfPortChange)
	{
	    refreshVirtualPORT();
		IfPortChange = False;
	}
}

/********************************************************
*  函数说明:刷新虚拟端口函数                           *
********************************************************/
void refreshVirtualPORT(void)
{
	char n = 0;
	char TempData = 0;
	
	VRCK = 0;
	for (n=0;n<(VIRTUAL_BIT_COUNT>>3);n++)
	{
	    TempData = (VPORT<<(n<<3))>>(VIRTUAL_BIT_COUNT-8);
		sendBITS(TempData);
	}
	VRCK = 1;
	IfPortChange = False;
}

/********************************************************
*  函数说明:发送串行数据函数                           *
*  输入:    要发送的字节                               *
********************************************************/
void sendBITS(char Data)
{
    char n = 0;
	for (n = 0;n<8;n++)
	{
	    VSCK = 0;
	    if (((Data<<n)& 0x80 )==0)
		{
		    VSI = 0;
		}
		else
		{
		    VSI = 1;
		}
		VSCK = 1;                                        //拉高时钟线
		                                        //下降沿锁存
	}
}
#endif

⌨️ 快捷键说明

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