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

📄 ch452w2.c

📁 ch452的应用和方法,能过要它来做显示,这样不要用164芯片来,使得电路简单可靠.
💻 C
字号:
/****************************
 Website:  http://wch.cn
 Email:    tech@wch.cn
 Author:   W.ch 2005.4
 CH452 的真正2 线接口
****************************
 MCS51 24MHz 频率降低则可以适当减少SCL SDA 之间的延时
 CH452 的真正2 线接口,含低电平脉冲按键中断在内,只需要2 个I/O 引脚,兼容IIC 时序
 两线制方式SCL/SDA, 按键中断由SDA产生, 脉冲/边沿中断
****************************************************************************/
#include <reg52.h>
#include <intrins.h>
#include <pin.h>  // 修改该文件以适应硬件环境/单片机型号等

void CH452_I2c_Start_2()		//两线制方式,SDA用做中断输出,使用以下两个函数
{
	CH452_SDA_SET;
	CH452_SCL_CLR;	//通知CH452,将要对其操作,此段时间不要再产生按键中断
	do {
		DELAY_1US;  // 保留足够的时间给CH452产生中断
		DELAY_1US;
	} while ( CH452_SDA_IN == 0 );  // CH452正在请求中断?
	DELAY_1US;
	DISABLE_INTERRUPT;			  //禁止键盘中断,防止开始时被CH452中断而进入中断服务程序中的START
	CH452_SDA_SET;   /*发送起始条件的数据信号*/
	CH452_SCL_SET;
	DELAY_1US;
	CH452_SDA_CLR;   /*发送起始信号*/
	DELAY_1US;      
	CH452_SCL_CLR;   /*钳住I2C总线,准备发送或接收数据 */
	DELAY_1US;
}

void CH452_I2c_Stop_2()
{
	CH452_SDA_CLR;
	DELAY_1US;
	CH452_SCL_SET;
	DELAY_1US;
	CH452_SDA_SET;  /*发送I2C总线结束信号*/
	DELAY_1US;
	CLEAR_INTER_FLAG;  // 清除中断标志,因为通过SDA输出数据所以会误中断
  	ENABLE_INTERRUPT;
}

void CH452_I2c_WrByte(unsigned char c)	//写一个字节数据
{
	unsigned char i;
	for(i=0;i!=8;i++)  // 输出8位数据
	{
		if(c&0x80) {CH452_SDA_SET;}
		else {CH452_SDA_CLR;}
		CH452_SCL_SET;
		c<<=1;
		DELAY_1US;
		DELAY_1US;
		CH452_SCL_CLR;
		DELAY_1US;
//		DELAY_1US;
	}
	DELAY_1US;
	CH452_SDA_SET;
	CH452_SCL_SET;  // 接收应答
	DELAY_1US;
	DELAY_1US;
	CH452_SCL_CLR;
	DELAY_1US;
}

unsigned char  CH452_I2c_RdByte()		//读一个字节数据
{
	unsigned char c,i;
	c=0;
	for(i=0;i!=8;i++)  // 输入8位数据
	{
		CH452_SDA_SET;
		CH452_SCL_SET;
		DELAY_1US;
		DELAY_1US;
		c<<=1;
		if(CH452_SDA_IN) c|=0x01;  // 输入1位
		CH452_SCL_CLR;
		DELAY_1US;
//		DELAY_1US;
	}
	DELAY_1US;
	CH452_SDA_SET;
	CH452_SCL_SET;  // 发出无效应答
	DELAY_1US;
	DELAY_1US;
	CH452_SCL_CLR;
	DELAY_1US;
	return(c);
}

void CH452_Write(unsigned short command)	//写命令
{
	CH452_I2c_Start_2();               /*启动总线*/
#ifdef	ENABLE_2_CH452				// 若有两个CH452并连
   	CH452_I2c_WrByte(((unsigned char)(command>>7)&0x3E)|0x40);  // CH452的ADDR=0时
#else 
   	CH452_I2c_WrByte(((unsigned char)(command>>7)&0x3E)|0x60);  // CH452的ADDR=1时(默认)
#endif
   	CH452_I2c_WrByte((unsigned char)command);               /*发送数据*/
  	CH452_I2c_Stop_2();                 /*结束总线*/ 
}

unsigned char CH452_Read()		//读取按键
{
	unsigned char key;
   	CH452_I2c_Start_2();                /*启动总线*/
   	CH452_I2c_WrByte(0x6F);    // 若有两个CH452并连,当ADDR=0时,此值为0x4F
   	key=CH452_I2c_RdByte();               /*读取数据*/
	CH452_I2c_Stop_2();                /*结束总线*/ 
	return(key);
}

⌨️ 快捷键说明

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