特急:关于单片机at89c52连接at24c02的编程问题

来源:百度知道 编辑:UC知道 时间:2024/06/28 14:54:19
本人写了一个单片机的程序,功能是用P3.4, P3.5, P3.6分别调整数码管的个位,十位和百位,每按一次数字加1,如数加到10,则重新从0开始.
采用共阳极数码管,P2.0,P2.1,P2.2分别通过一个9012三极管和电阻控制数码管的百位,十位,和个位的V端,用以开/关对应的数码管.P0分别接数码管的a,b,c,d,e,f,g,dp端.
功能能够实现,原本是想数据调整后能够保存(断电后重新开电能数码管能显示调整好的数据),但重新开电后为初始值"00.0".请问一下各位大侠,我如何才能做到调整好的数据在断电后重新开电能被显示呢?我也曾经在知道上问过人,有高手告诉我要用外部存储器at24cxx系列的就行了,我买了一个at24c02,这样连接的:
A0,A1,A2,GND,WP都接地,(负极);
VCC 接电源正极;
SCL 与单片机P3.1相接,另与电源正极接一个9.9千欧的上拉电阻;
SDA 与单片机P3.2相接,另与电源正极接一个9.9千欧的上拉电阻;
程序如下:
include<at89x51.h>
#include<math.h>
unsigned char count,gewei=0,shiwei=0,baiwei=0;
unsigned int times,a,b,c;
unsigned char code table[]={
0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90 };

void delay(unsigned int i)
{
for(a=0;a<i;a++)
for(b=0;b<100;b++)
for(c=0;c<120;c++);
}

void conveyor()
{
while(1)
{
if(P3_4==0)
{
delay(3); gewei+=1;
if(g

void start(void)
{
SDA=1;
SCL=1;
_nop_();
_nop_();
SDA=0;
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
}

/***************************************************************
函数功能:停止iiC总线数据传送子程序
入口参数:
出口参数:
******************************************************************/
void stop(void)
{
SDA=0;
SCL=1;
_nop_();
_nop_();
SDA=1;
_nop_();
_nop_();
_nop_();
_nop_();
SCL=0;
}

/*******************************************************************
函数功能:读取数据
入口参数:
出口参数:read_data
*********************************************************************/
unsigned char read(void)
{
uchar read_data=0,i;
for(i=0;i<8;i++)
{
SCL=1; //此时SDA上的高低电平保持稳定
read_data<<=1;
read_data|=(unsigned char)SDA;
SCL=0; //此时SDA上的高低电平可以变化
}