📄 24c08.c
字号:
/*==============================I2C 24C08==============================
程序名称:I2C 24C08(12864液晶并行显示) P3.3为减 P3.2为增
版 本:Agni 07-SV开发板
作 者:蓝极风电子技术
日 期:2007.10.28
注:(1):主芯片AT89S52使用11.0592M晶振
(2):Keil uV3 3.30编译运行通过
(3):本例程在 Agni 07-SV 开发板平台上成功运行通过
(4):蓝极风电子技术网版权所有,只供学习参考,不得应用于商业用途.
(5):更多学习资源浏览:(http://www.bluepw.com 或 http://www.bluepw.cn)
============================================================================*/
#include<at89x52.h> //包括一个52标准内核的头文件
#include<24c08_lcd.h>
#define uchar unsigned char //定义一下方便使用
#define uint unsigned int
#define ulong unsigned long
#define WriteDeviceAddress 0xa0 //定义器件在IIC总线中的地址
#define ReadDviceAddress 0xa1
sbit SCL=P3^4;
sbit SDA=P3^5;
sbit K1=P3^0;
uchar k;
void keyscan(void);
//定时函数
void DelayMs(uint number)
{
uchar temp;
for(;number!=0;number--)
{
for(temp=112;temp!=0;temp--) ;
}
}
void key_delay(void) //延时
{
int t;
for(t=0;t<3300;t++);
}
//开始总线
void Start()
{
SDA=1;
SCL=1;
SDA=0;
SCL=0;
}
//结束总线
void Stop()
{
SCL=0;
SDA=0;
SCL=1;
SDA=1;
}
//发ACK0
void NoAck()
{
SDA=1;
SCL=1;
SCL=0;
}
//测试ACK
bit TestAck()
{
bit ErrorBit;
SDA=1;
SCL=1;
ErrorBit=SDA;
SCL=0;
return(ErrorBit);
}
//写入8个bit到24c08
void Write8Bit(uchar input)
{
uchar temp;
for(temp=8;temp!=0;temp--)
{
SDA=(bit)(input&0x80);
SCL=1;
SCL=0;
input=input<<1;
}
}
//写入一个字节到24c08中
void Write24c02(uchar ch,uchar address)
{
Start();
Write8Bit(WriteDeviceAddress);
TestAck();
Write8Bit(address);
TestAck();
Write8Bit(ch);
TestAck();
Stop();
DelayMs(10);
}
//从24c08中读出8个bit
uchar Read8Bit()
{
uchar temp,rbyte=0;
for(temp=8;temp!=0;temp--)
{
SCL=1;
rbyte=rbyte<<1;
rbyte=rbyte|((uchar)(SDA));
SCL=0;
}
return(rbyte);
}
//从24c08中读出1个字节
uchar Read24c02(uchar address)
{
uchar ch;
Start();
Write8Bit(WriteDeviceAddress);
TestAck();
Write8Bit(address);
TestAck();
Start();
Write8Bit(ReadDviceAddress);
TestAck();
ch=Read8Bit();
NoAck();
Stop();
return(ch);
}
//写入按键次数到24c08,并读出来显示在4个LED上
void main(void) // 主程序
{
uchar c1=0;
uchar m=100;
Init_lcd();
while(1)
{
m=Read24c02(0xff); //读出24c08第一个地址数据
keyscan();
switch(k)
{
case 0: m=m+1;k=8;break;
case 1: m=m-1;k=9;break;
default:break;
}
Show(0x80,16," I2C存储器测试 ");
Show(0x90,16,"基准值: 100 ");
Show(0x88,16,"增量: 1 ");
Show(0x98,16,"存储值: ");
Write24c02(m,0xff); //写入24c08
Show_dig(0x9D,m);
key_delay();key_delay();key_delay();key_delay();
}
}
void keyscan(void) //按键为P3.2和P3.3
{
key_delay();
key_delay();
if(P3_2==0) //P3.2为增
k=0;
key_delay();
key_delay();
if(P3_3==0) //P3.3为减
k=1;
key_delay();
}
/************************ end **********************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -