📄 i2c_interface.c
字号:
// project :
// interface : i2c interface
// drive : ic:st7032i. duty:9. bias:1/4. vop:4.7v. vdd:3.3v.
// version : 01
// modified : first issue
// date :
//------------------------ I/O port definition --------------------
#include "reg51.h"
#include "intrins.h"
#define port P1
#define uchar unsigned char
#define uint unsigned int
//sbit RES=P3^5;
//sbit scl=P3^6;
//sbit sda=P3^7;
sbit pause=P2^0;
sbit RES = P3^2; /* ReSet */
sbit scl = P3^1; /* Serial Colock */
sbit sda = P3^0; /* Serial Data */
//sbit CS=P3^1;
void flash(uchar tt);
void delay(unsigned int t);
void write_byte(uchar dat);
void stop();
uchar code cgram[]={
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,
0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,
};
uchar code iconon[]={
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
};
uchar code iconoff[]={
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
};
uchar code icon1[]={
0x1F,0x00,0x1F,0x00,0x1F,0x00,
0x00,0x00,0x1F,0x1F,0x00,0x00,
};
uchar code icon2[]={
0x00,0x1F,0x00,0x1F,0x10,0x00,
0x00,0x00,0x00,0x00,0x1F,0x1F,
};
void delay_standard(unsigned int delaytime)
{
while(delaytime-->0);
}
void WAIT_KEY(void)
{
P2=0xff;
while(P2&0x01);
delay_standard(10000);/*???***/
P2=0xff;
while((P2&0x01)==0x00);/*??0.1S*/
delay_standard(20000);
}
void flash(uchar tt)
{while(tt--);}
void delay(unsigned int t)
{
while(t>0)
{
t=t; t--; t++; t--; //TT-
}
}
void start ()
{
scl=1;
sda=1;
sda=0;
scl=0;
}
void stop ()
{
scl=0;
sda=0;
scl=1;
sda=1;
}
void write_byte (unsigned char dat)
{
unsigned char k,i=100;
for (k=0; k<8; k++)
{
dat=dat<<1;
sda=CY;flash(1);
scl=1;
scl=0;
}
sda=1;
scl=1;
while (sda==1 && i--);
scl=0;
}
//--------------------------------
void init()
{
//CS=0;
RES=1;
flash(100);
RES=0;
flash(100);
RES=1;
flash(100);
start();
write_byte(0x7c);//set slave address
write_byte(0x80);//
write_byte(0x28);//funtion set ,is=0
write_byte(0x80);//control byte
write_byte(0x06);//entry mode set
write_byte(0x80);//
write_byte(0x0c);//display on
//write_byte(0x80);//
//write_byte(0x1c);//cursor or dispaly shift
write_byte(0x80);//
write_byte(0x01);//clear display
delay(500);
//************************* extension instruction *******************
write_byte(0x80);//
write_byte(0x29);//function set: is=1
write_byte(0x80);//
write_byte(0x14+8);//internal osc frequency ,1/5 bias
write_byte(0x80);//
write_byte(0x5E);//set icon on,booster on, contrast set: D0-D1 (high bit)
write_byte(0x80);//
write_byte(0x6c);//set follower circuit on, set Ra/Rb:D0-D3
write_byte(0x80);//
write_byte(0x74);//contrast set:D0-D3
stop();
}
//------------
void display (uchar dat1)
{
uchar i,j,address;
address=0xA8; //set display 1-line address
start();
write_byte(0x7c);//set slave address
write_byte(0x80);//
write_byte(0x28);//funtion set ,is=0
write_byte(0x80);//RS=0
write_byte(address);//set ddram address
//RS=1
write_byte(0x40);//write data format: following data stream
for (i=0; i<12; i++)
{
write_byte(dat1);
}
stop();
address=0xc0; //set display 2-line address
}
//--------------------------
void displaychar(uchar dat1)
{
uchar i,j,address;
address=0xA8; //set display 1-line address
start();
write_byte(0x7c);//set slave address
write_byte(0x80);//
write_byte(0x28);//funtion set ,is=0
write_byte(0x80);//RS=0
write_byte(address);//set ddram address
//RS=1
write_byte(0x40);//write data format: following data stream
for (i=0; i<12; i++)
{
write_byte(dat1++);
}
stop();
}
//----------------------------
void WriteCgram(uchar *p)
{
uchar i;
start();
write_byte(0x7c);//set slave address
write_byte(0x80);//
write_byte(0x20);//funtion set ,is=0
write_byte(0x80);//RS=0
write_byte(0x40);//set cgram address
//RS=1
write_byte(0x40);//write data format: following data stream
for (i=0; i<32; i++)
{
write_byte(*p++);
}
stop();
}
void DisplayIcon(uchar *p)
{
uchar i;
start();
write_byte(0x7c);//set slave address
write_byte(0x80);//
write_byte(0x29);//funtion set ,is=0
write_byte(0x80);//RS=0
write_byte(0x40);//set icon address
//RS=1
write_byte(0x40);//write data format: following data stream
for (i=0; i<16; i++)
{
write_byte(*p++);
}
stop();
}
//-----------------------------
void main ()
{
delay(2000);
init();
WriteCgram(cgram);
while(1)
{
DisplayIcon(iconon); display(0); WAIT_KEY();
DisplayIcon(iconoff);display(1);WAIT_KEY();
DisplayIcon(icon1); display(2);WAIT_KEY();
DisplayIcon(icon2); display(3);WAIT_KEY();
DisplayIcon(icon1); display(0x51); WAIT_KEY();
DisplayIcon(icon2); displaychar(0xa8); WAIT_KEY();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -