?? main.c
字號(hào):
#define uchar unsigned char //定義一下方便使用
#define uint unsigned int
#define ulong unsigned long
#include <reg52.h> //包括一個(gè)52標(biāo)準(zhǔn)內(nèi)核的頭文件
char code dx516[3] _at_ 0x003b;//這是為了仿真設(shè)置的
#define WriteDeviceAddress 0xa0 //定義器件在IIC總線中的地址
#define ReadDviceAddress 0xa1
sbit SCL=P2^7;
sbit SDA=P2^6;
sbit P10=P1^0;
sbit K1=P3^2;
//定時(shí)函數(shù)
void DelayMs(unsigned int number)
{
unsigned char temp;
for(;number!=0;number--)
{
for(temp=112;temp!=0;temp--) ;
}
}
//開始總線
void Start()
{
SDA=1;
SCL=1;
SDA=0;
SCL=0;
}
//結(jié)束總線
void Stop()
{
SCL=0;
SDA=0;
SCL=1;
SDA=1;
}
//發(fā)ACK0
void NoAck()
{
SDA=1;
SCL=1;
SCL=0;
}
//測(cè)試ACK
bit TestAck()
{
bit ErrorBit;
SDA=1;
SCL=1;
ErrorBit=SDA;
SCL=0;
return(ErrorBit);
}
//寫入8個(gè)bit到24c02
Write8Bit(unsigned char input)
{
unsigned char temp;
for(temp=8;temp!=0;temp--)
{
SDA=(bit)(input&0x80);
SCL=1;
SCL=0;
input=input<<1;
}
}
//寫入一個(gè)字節(jié)到24c02中
void Write24c02(uchar ch,uchar address)
{
Start();
Write8Bit(WriteDeviceAddress);
TestAck();
Write8Bit(address);
TestAck();
Write8Bit(ch);
TestAck();
Stop();
DelayMs(10);
}
//從24c02中讀出8個(gè)bit
uchar Read8Bit()
{
unsigned char temp,rbyte=0;
for(temp=8;temp!=0;temp--)
{
SCL=1;
rbyte=rbyte<<1;
rbyte=rbyte|((unsigned char)(SDA));
SCL=0;
}
return(rbyte);
}
//從24c02中讀出1個(gè)字節(jié)
uchar Read24c02(uchar address)
{
uchar ch;
Start();
Write8Bit(WriteDeviceAddress);
TestAck();
Write8Bit(address);
TestAck();
Start();
Write8Bit(ReadDviceAddress);
TestAck();
ch=Read8Bit();
NoAck();
Stop();
return(ch);
}
//寫入按鍵次數(shù)到24c02,并讀出來(lái)顯示在4個(gè)LED上
void main(void) // 主程序
{
uchar c1,c2;
while(1)
{
c1=Read24c02(0x01); //讀出24c02第一個(gè)地址數(shù)據(jù)
P1=c1; //顯示在P1口的4個(gè)LED上
if(!K1) //按鍵處理
{
c1++; //值加1
Write24c02(c1,0x01); //重新寫入24c02
while(!K1); //等待按鍵松開
for(c2=0;c2<250;c2++); //松開按鍵去抖
}
}
}
//提示,可以脫機(jī)運(yùn)行看看掉電后的數(shù)據(jù)是否還在保存.
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -