#include"STC89.H"
#include<string.H>
#include <intrins.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
sbit SDA=P1^1; //ZLG数据线
sbit SCL=P1^2; //ZLG时钟线
sbit KEY_INT=P3^3; //读键值中断
/********************************/
/*******ZLG72128部分************/
/********************************/
void delay(uint time) //延时us
{
uint i;
uint j;
for(i=0;i<time;i++)
{
for(j=0;j<5;j++)
{
}
}
}
void I2Cinit() //I2C初始化
{
SCL=1;
delay(5);
SDA=1;
delay(5); //延时5us
}
void start() //启动
{
SDA=1;
delay(5);
SCL=1;
delay(5);
SDA=0;
delay(5);
}
void stop() //停止
{
SDA=0;
delay(5);
SCL=1;
delay(5);
SDA=1;
delay(5);
}
void respons() //应答
{
uchar i=0;
SCL=1;
delay(5);
while((SDA==1)&(i<255))
i++;
SCL=0;
delay(5);
}
void writebyte(uchar date) //写一个字节
{
uchar i,temp;
temp=date;
for(i=0;i<8;i++)
{
temp=temp<<1;
SCL=0;
delay(5);
SDA=CY;
delay(5);
SCL=1;
delay(5);
}
SCL=0;
delay(5);
SDA=1;
delay(5);
}
void readbyte() //读一个字节
{
uchar i,k;
SCL=0;
delay(5);
SDA=1;
/*for (i=0,i<8,i++)
{
SCL=1;
delay();
k=(k<<1)|SDA;
SCL=0;
delay(5);
}
delay(5);
return k;*/
}
//*************************************//
//************键值检测****************//
/**************************************/
void main()
{
EA=1; //开全局中断
EX1=1;
IT1=0; //开外部1中断
}
void readkey() interrupt 1
{
I2Cinit; //初始化
start; //开始
writebyte(0x30); //发从机地址加写命令
respons;
writebyte(0x01); //发key寄存器地址
respons;
writebyte(0x31); //发地址加读命令
respons;
readbyte();
stop;
}
/****************************************/
/************单字节数码管显示******************/
/******************************************/
uint I2CWriteByte (ulong uiSubAddr, uint ucData)
{
I2Cinit;
start;
writebyte(0x31); //从机地址加写命令
respons;
writebyte(uiSubAddr); //发送操作寄存器地址
respons;
writebyte(ucData); //发送单字节显示
stop;
}
/******************************************************************************/
/************************写多字节数码管显示***********************************/
/******************************************************************************/
uint I2CWriteNByte (ulong uiSubAddr, uint *ucData, uint Length)
{
uchar i;
I2Cinit();
start(); //启动总线
writeByte(0x30); //发送ZLG_72128地址
respons();
writeByte(uiSubAddr); //发送寄存器起始地址
respons();
for (i=0;i<length,i++)
{ //发送多字节显示
writebyte(*ucdata)
ucdata++;
}
Stop(); //释放总线
return(1);
}