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

📄 cd4094_cd4021.c

📁 交流异步电机直接转矩控制程序
💻 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 + -