📄 ch423.h
字号:
// *******************************************************************
//Website: http://wch.cn
//Email: tech@wch.cn
//Author: W.ch 2007.6
// *******************************************************************
// 片选译码方式驱动16个数码管/128只LED发光管,MCS51单片机例子,使用定时器定时切换显示
//CH423.h
#pragma NOAREGS // 如果MCS51在中断服务程序中调用CH423子程序,那么建议加入此编译选项
#define DELAY_0_1US { _nop_(); } // MCS51>10MHz
/* 2线接口的连接,与实际电路有关 */
sbit CH423_SCL = P1^5;
sbit CH423_SDA = P1^4;
/* 2线接口的位操作,与单片机有关 */
#define CH423_SCL_SET { CH423_SCL = 1; }
#define CH423_SCL_CLR { CH423_SCL = 0; }
#define CH423_SCL_D_OUT { } // 设置SCL为输出方向,对于双向I/O需切换为输出
#define CH423_SDA_SET { CH423_SDA = 1;}
#define CH423_SDA_CLR { CH423_SDA = 0;}
#define CH423_SDA_IN ( CH423_SDA )
#define CH423_SDA_D_OUT { } // 设置SDA为输出方向,对于双向I/O需切换为输出
#define CH423_SDA_D_IN { CH423_SDA = 1; } // 设置SDA为输入方向,对于双向I/O需切换为输入
void CH423_I2c_Start( void ) // 操作起始
{
CH423_SDA_SET; // 发送起始条件的数据信号
CH423_SDA_D_OUT; // 设置SDA为输出方向
CH423_SCL_SET;
CH423_SCL_D_OUT; // 设置SCL为输出方向
DELAY_0_1US;
CH423_SDA_CLR; //发送起始信号
DELAY_0_1US;
CH423_SCL_CLR; //钳住I2C总线,准备发送或接收数据
}
void CH423_I2c_Stop( void ) // 操作结束
{
CH423_SDA_CLR;
DELAY_0_1US;
CH423_SCL_SET;
DELAY_0_1US;
CH423_SDA_SET; // 发送I2C总线结束信号
DELAY_0_1US;
}
void CH423_I2c_WrByte( unsigned char dat ) // 写一个字节数据
{
unsigned char i;
for( i = 0; i != 8; i++ ) // 输出8位数据
{
if( dat&0x80 ) { CH423_SDA_SET; }
else { CH423_SDA_CLR; }
DELAY_0_1US;
CH423_SCL_SET;
dat<<=1;
DELAY_0_1US; // 可选延时
CH423_SCL_CLR;
}
CH423_SDA_SET;
DELAY_0_1US;
CH423_SCL_SET; // 接收应答
DELAY_0_1US;
CH423_SCL_CLR;
}
void CH423_Set_H( unsigned char iodata ) //
{
CH423_I2c_Start(); // 启动总线
CH423_I2c_WrByte(0x46);
CH423_I2c_WrByte(iodata); // 发送数据
CH423_I2c_Stop(); // 结束总线
}
void CH423_Set_L( unsigned char iodata ) //
{
CH423_I2c_Start(); // 启动总线
CH423_I2c_WrByte(0x44);
CH423_I2c_WrByte(iodata); // 发送数据
CH423_I2c_Stop(); // 结束总线
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -