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

📄 i2c_interface.c

📁 i2c interface driver
💻 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 + -