📄 cd4094_cd4021.c
字号:
/****************************************************************************
* 文 件 名:cd4084_cd4021.c
* 版 本: V1.0
* 功 能:cd4084_cd4021集成电路驱动集
* 连 接:
* 说 明: 有需要就调用
* 作者:黄振升
* 日期:2006/05/31
*---------------历史版本信息-------------------------------------------------
* 修 改 人: 黄振升
* 版 本: V1.0
* 日 期: 2006/05/31
* 描 述:
****************************************************************************/
/***********************************************************************
包含文件
***********************************************************************/
#include "config.h"
/***********************************************************************
CD4094
***********************************************************************/
/***********************************************************************
* 名 称:CD4094_Init()
* 功 能:初始化CD4094的各个接口
* 入口参数:无
* 出口参数: 无
* 说 明:4094的output enable 接高电平
***********************************************************************/
void CD4094_Init(void)
{
PINSEL0 = PINSEL0 & ~(0x3f<<14); //设P1.16到P1.18为GPIO
IO0DIR = IO0DIR |( 7<<7); //定义为输出
}
/***********************************************************************
* 名 称:CD4094_Write(uint8 *value, uint16 bit)
* 功 能:将一字节数据写入4094
* 入口参数:8位数据
* 出口参数: 无
* 说 明:写过程采用模拟总线方式,注意这里输入的数组是储存位的,也就是数组中只允许0与1两个值,这是本
* 次设计方便的需要
* CD4094_STROBE -- P1.16
* CD4094_CLK -- P1.17
* CD4094_DATA -- P1.18
***********************************************************************/
void CD4094_WriteChar(uint8 value)
{
uint8 i,j;
//cd4094_Init();
CD4094_STROBE_EN(); //使能写如数据
for( i=0; i<8; i++)
{
CD4094_CLK_CL() ; //时钟下降沿
j= value&0x01;
value = value>>1;
CD4094_DATA_Write(j); //写如相应数据
//DelayNS(1);
CD4094_CLK_EN() ; //时钟下降沿
//DelayNS(1);
}
CD4094_STROBE_CL(); //使能数据锁存
}
/***********************************************************************
CD4021
***********************************************************************/
/***********************************************************************
* 名 称:CD4021_Init()
* 功 能:初始化CD4094的各个接口
* 入口参数:无
* 出口参数: 无
* 说 明:4094的output enable 接高电平
***********************************************************************/
void CD4021_Init(void)
{
PINSEL2 = PINSEL2 & ~(1<<3); //设P1.26到P1.16为GPIO
IO1DIR = IO1DIR |( 3<<CD4021_PE); //输出,输入定义管脚
IO1DIR = IO1DIR &(~(1<<CD4021_DATA));
CD4094_PE_EN(); //串并控制置成并行输入
}
/***********************************************************************
* 名 称:CD4021_Read(uint8 *sbuf,uint16 bit)
* 功 能:将数据写入4094
* 入口参数:一个储存数据的缓冲区,需要读取多少个数据
* 出口参数: 无
* 说 明:读过程采用模拟总线方式,注意这里输出的数组是储存位的,也就是数组中只允许0与1两个值,这是本
* 次设计方便的需要
* CD4021_PSC -- P1.19
* CD4021_CLK -- P1.20
* CD4021_DATA(Q8) -- P1.21
***********************************************************************/
void CD4021_Read(uint8 *sbuf, uint16 bit)
{
uint8 i,j;
CD4021_Init();
CD4094_PE_EN(); //串并控制置成并行输入
DelayNS(100);
CD4021_CLK_CL() ; //时钟下降沿
DelayNS(1);
CD4021_CLK_EN() ; //时钟上升沿
DelayNS(1);
CD4094_PE_CL(); //串并控制置成串行输出
for( i=0; i<bit; i++)
{
j = (uint8)CD4021_DATA_Read();
CD4021_CLK_CL() ; //时钟下降沿
DelayNS(1);
*(sbuf+i) = j; //读入相应数据
CD4021_CLK_EN() ; //时钟上升沿
DelayNS(1);
}
CD4094_PE_EN(); //串并控制置成并行输入
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -