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

📄 rd_usebits.h

📁 LCD1602键盘显示模块实例
💻 H
字号:
#ifndef _USE_BITS_H_
#define _USE_BITS_H_
/***********************************************************
*   声明库说明:系统位段操作函数库                         *
*   版本:      v1.00                                      *
*   作者:      傻孩子                                     *
*   创建时间:  2006年5月4日                               *
* -------------------------------------------------------- *
*  [支 持 库]                                              *
*   支持库名称:                                           *
*   需要版本:                                             *
*   支持库说明:                                           *
* -------------------------------------------------------- *
*  [版本更新]                                              *
*   修改:                                                 *
*   修改日期:                                             *
*   版本:                                                 *
* -------------------------------------------------------- *
*  [版本历史]                                              *
*      v1.00   包含了从32位到8位对16位8位4位1位的各种映射  *
*              允许通过功能宏定义中定义的宏拆分任意的地址  *
* -------------------------------------------------------- *
*  [使用说明]                                              *
*          1、该头文件属于基层头文件。                     *
*          2、兼容32位16位8位单片机系统。                  *
*          3、饱含该头文件以后,可以通过功能宏定义中定义的 *
*             宏拆分任意地址,也可以直接使用后面自定义的位 *
*             段类型定义新的位段变量或者指针。             *
*          4、需要注意的是,使用功能宏定义中的宏只是将指定 *
*             变量的地址强行邦定为指定类型的位段,并不真正 *
*             分配一个地址空间,如果指定类型的位段长度和地 *
*             址实际长度不相同将会导致不可预期的后果。     *
***********************************************************/

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

/*------------------*
*   常 数 宏 定 义  *
*------------------*/
    
/*------------------*
*   功 能 宏 定 义  *
*------------------*/
# define SET_BIT8_FORMAT(Addr)     (*((volatile BYTEBIT *)&Addr))
# define SET_BYTE_DIV_2(Addr)      (*((volatile BYTE2HBYTE *)&Addr))

# define SET_BIT16_FORMAT(Addr)    (*((volatile WORDBIT *)&Addr))
# define SET_WORD_DIV_2(Addr)      (*((volatile WORD2BYTE *)&Addr))
# define SET_WORD_DIV_4(Addr)      (*((volatile WORD2HBYTE *)&Addr))

# define SET_BIT32_FORMAT(Addr)    (*((volatile DWORDBIT *)&Addr))
# define SET_DWORD_DIV_2(Addr)     (*((volatile DWORD2WORD *)&Addr))
# define SET_DWORD_DIV_4(Addr)     (*((volatile DWORD2BYTE *)&Addr))
# define SET_DWORK_DIV_8(Addr)     (*((volatile DWORD2HBYTE *)&Addr))

/********************
* 结 构 体 定 义 区 *
********************/

/*------------------*
*   8位变量位映射   *
*------------------*/
typedef struct BYTE_BIT
{
    unsigned BIT0:1;
    unsigned BIT1:1;
    unsigned BIT2:1;
    unsigned BIT3:1;
    unsigned BIT4:1;
    unsigned BIT5:1;
    unsigned BIT6:1;
    unsigned BIT7:1;
}BYTEBIT;

/*------------------*
*   16位变量位映射  *
*------------------*/
typedef struct WORD_BIT
{
    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;
}WORDBIT;

/*------------------*
*  32位变量位映射   *
*------------------*/
typedef struct DWORD_BIT
{
    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;
    
    unsigned BIT16:1;
    unsigned BIT17:1;
    unsigned BIT18:1;
    unsigned BIT19:1;
    unsigned BIT20:1;
    unsigned BIT21:1;
    unsigned BIT22:1;
    unsigned BIT23:1;
    
    unsigned BIT24:1;
    unsigned BIT25:1;
    unsigned BIT26:1;
    unsigned BIT27:1;
    unsigned BIT28:1;
    unsigned BIT29:1;
    unsigned BIT30:1;
    unsigned BIT31:1;
}DWORDBIT;

/*------------------*
*  32位变量4分映射  *
*------------------*/
typedef struct DWORD_BYTE
{
    unsigned BYTEA:8;
    unsigned BYTEB:8;
    unsigned BYTEC:8;
    unsigned BYTED:8;
}DWORD2BYTE;

/*------------------*
*  32位变量2分映射  *
*------------------*/
typedef struct DWORD_WORD
{
    unsigned WORDA:16;
    unsigned WORDB:16;
}DWORD2WORD;

/*------------------*
*  32位变量16分映射 *
*------------------*/
typedef struct DWORD_HBYTE
{
    unsigned BYTEAL:4;
		unsigned BYTEAH:4;
		
		unsigned BYTEBL:4;
		unsigned BYTEBH:4;
		
		unsigned BYTECL:4;
		unsigned BYTECH:4;
		
		unsigned BYTEDL:4;
		unsigned BYTEDH:4;
		
}DWORD2HBYTE;

/*------------------*
* 16位变量2分映射   *
*------------------*/
typedef struct WORD_BYTE
{
    unsigned BYTEA:8;
    unsigned BYTEB:8;
}WORD2BYTE;

/*------------------*
*  16位变量4分映射  *
*------------------*/
typedef struct WORD_HBYTE
{
    unsigned BYTEAL:4;
		unsigned BYTEAH:4;
		
		unsigned BYTEBL:4;
		unsigned BYTEBH:4;
}WORD2HBYTE;

/*------------------*
*  8位变量2分映射   *
*------------------*/
typedef struct BYTE_DIV2
{
    unsigned BYTEAL:4;
    unsigned BYTEAH:4;
}BYTE2HBYTE;

#endif

⌨️ 快捷键说明

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