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

📄 ch452w3.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 引脚,含按键中断为3 个I/O,兼容IIC 时序
****************************************************************************/
#include <reg52.h>
#include <intrins.h>
#include <pin.h>  // 修改该文件以适应硬件环境/单片机型号等

void CH452_I2c_Start()
{
#ifdef USE_KEY
	DISABLE_INTERRUPT;		   //禁止键盘中断,防止开始时被CH452中断而进入中断服务程序中的START
#endif	
	CH452_SDA_SET;   /*发送起始条件的数据信号*/
	CH452_SCL_SET;
	DELAY_1US;
	CH452_SDA_CLR;   /*发送起始信号*/
	DELAY_1US;      
	CH452_SCL_CLR;   /*钳住I2C总线,准备发送或接收数据 */
	DELAY_1US;
}

void CH452_I2c_Stop()
{
	CH452_SDA_CLR;
	DELAY_1US;
	CH452_SCL_SET;
	DELAY_1US;
	CH452_SDA_SET;  /*发送I2C总线结束信号*/
	DELAY_1US;
#ifdef USE_KEY
  	ENABLE_INTERRUPT;
#endif
}

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();               /*启动总线*/
#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();                 /*结束总线*/ 
}

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

⌨️ 快捷键说明

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