📄 serialtocollateral.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 + -