📄 pcf8576.c
字号:
/***********************PCF8576驱动程序***************************/
/*
方式设定
* | C | 1 | 0 | LP | E | B | M1 | M2 |
* -----------------------------------------------------------------------
C=1表示后面传送的仍是命令,C=0表示其后传送的是最
后一个命令,接下来是数据。
LP 为功耗控制位 0--正常 1--节电方式
E--显示使能 0--禁止显示 1--允许显示
B--偏置电压 0-- 1/3偏置 1--1/4偏置
M0 M1--驱动方式 01--静态 10--1:2多级 11--1:3多级 00--1:4多级
*/
#define SCL PDR5_P55
#define SDA PDR5_P54
void Display_Frame(char *ptr2Frm,int Len)
{
I2C_start(); //I2C起始
I2C_send(0x70); //发送PCF8576器件地址 其器件地址为0x70
I2C_send(0xc9); //方式设定
I2C_send(0xE0); //发送子地址 A0,A1,A2均接地,故子地址为0x0
//I2C_send(0x73); //子地址
I2C_send(0x00); //发送数据指针
do
{
I2C_send((char)(*ptr2Frm));
ptr2Frm++;
}
while(--Len>0);
I2C_stop(); //I2C关闭
delayms(10); //延迟10ms
}
void clearlcd(void)
{
I2C_start(); //I2C起始
I2C_send(0x70); //发送PCF8576器件地址
//I2C_send(0x88);
I2C_send(0x51); //子地址
//I2C_send(0x73); //子地址
//I2C_send(0x00); //发送数据指针
I2C_stop(); //I2C关闭
delayms(10); //延迟10ms
}
void init_I2C(void)
{
SCL = 0;
SDA = 0;
SCL_1;
SDA_1;
}
void I2C_start(void)
{
SCL_1;
delay(1);
SDA_0;
delay(1);
SCL_0;
delay(1);
}
void I2C_stop(void)
{
SDA_0;
delay(1);
SCL_1;
delay(1);
SDA_1;
delay(1);
SCL_0;
delay(1);
}
uchar I2C_clock(void)
{
uchar bits;
SCL_1;
delay(1);
bits = SDA;
SCL_0;
delay(1);
return(bits);
}
uchar I2C_send(uchar buf)
{
uchar i;
for(i = 0; i < 8; i++)
{
if ((buf & 0x80) == 0) {SDA_0;}
else {SDA_1;}
buf <<= 1;
I2C_clock();
}
SDA_1;
return(~I2C_clock());
}
uchar I2C_recv(void)
{
uchar buf,i;
buf = 0;
for(i = 0; i < 8; i++)
{
buf <<= 1;
if (I2C_clock()) buf++;
}
return(buf);
}
void I2C_ack(void)
{
SDA_0;
I2C_clock();
SDA_1;
}
void I2C_nak(void)
{
SDA_1;
I2C_clock();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -