久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
關于IIC總線(EEPROM)時鐘數據保存問題
[打印本頁]
作者:
wonderfulxsj
時間:
2018-7-19 09:39
標題:
關于IIC總線(EEPROM)時鐘數據保存問題
我想實現一個結合EEPROM芯片實現一個時鐘程序,理想狀態是掉電后時分秒還是按照原來的數據自增一,但是實際是只是保存了秒,掉電后重啟秒正常以掉電前數據自增一,時和分保存的卻是固定的數字,掉電后重啟恢復原來的時和分數據,現象是:如掉電前04:02:12 ,掉電后重啟04:01:12 ,無論分加到幾,掉電后重啟都會恢復為01,請幫我看看我的程序哪里不對?程序如下:
/*部分EEPROM讀寫程序已經寫入I2C頭文件中*/
#include<I2C.h>//自寫的頭文件,內部包含
#include<reg52.h>
#define uchar unsigned char//宏定義
#define uint unsigned int
bit fa=0,da=0,ga=0; //觸發寫入EEPROM
sbit LSA=P2^2; //138譯碼器,用于擴展8位數碼管
sbit LSB=P2^3;
sbit LSC=P2^4;
uchar code pcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};
uchar hour=0,min=0,s=55;
void delay(uint i) //延時函數
{
while(i--);
}
void display() //數碼管顯示
{
LSA=0;LSB=0;LSC=0; //顯示第0位
P0=pcode[hour/10];
delay(200);
LSA=1;LSB=0;LSC=0; //顯示第1位
P0=pcode[hour%10];
delay(200);
LSA=0;LSB=1;LSC=0; //顯示第2位
P0=pcode[10];
delay(200);
LSA=1;LSB=1;LSC=0; //顯示第3位
P0=pcode[min/10];
delay(200);
LSA=0;LSB=0;LSC=1; //顯示第4位
P0=pcode[min%10];
delay(200);
LSA=1;LSB=0;LSC=1; //顯示第5位
P0=pcode[10];
delay(200);
LSA=0;LSB=1;LSC=1; //顯示第6位
P0=pcode[s/10];
delay(200);
LSA=1;LSB=1;LSC=1; //顯示第7位
P0=pcode[s%10];
delay(200);
}
void init() //定時器中斷初始化
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
}
void main()
{
init();
s=I2Cread(1); //將讀取的第一個地址的數據賦值給秒
min=I2Cread(2); //將讀取的第二個地址的數據賦值給分
hour=I2Cread(3); //將讀取的第三個地址的數據賦值給時
while(1)
{
if(s==60)
{
s=0;
min++;
if(min==60)
{
min=0;
hour++;
if(hour==24)
{
hour=0;
}
}
}
display();
if(fa==1) //中斷之后觸發fa置1
{
fa=0; //將fa清零
I2Cwrite(1,s); //將秒寫入EEPROM第一個地址
}
if(da==1) //同上
{
da=0;
I2Cwrite(2,min);
}
if(ga==1)
{
ga=0;
I2Cwrite(3,hour);
}
}
}
void Time_T0() interrupt 1 //定時器中斷實現一秒周期
{
uchar i;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
i++;
if(i==20)
{
i=0;
s++;
fa=1;
da=1;
ga=1;
}
}
作者:
CY1994
時間:
2018-7-19 11:25
建議貼出i2c.h里面的文件,因為本文中并沒有見到I2Cread和I2Cwrite的函數,
作者:
wonderfulxsj
時間:
2018-7-21 08:31
/*I2C頭文件*/
#include<I2C.h>
void delay10us(void) //10us
{
unsigned char a,b;
for(b=1;b>0;b--)
for(a=2;a>0;a--);
}
void start_singal()
{
SDA=1;
delay10us();
SCL=1;
delay10us();
SDA=0;
delay10us();
SCL=0;
delay10us();
}
void stop_singal()
{
SDA=0;
delay10us();
SCL=1;
delay10us();
SDA=1;
delay10us();
}
unsigned char send_byte(unsigned char dat) //發送字節數據(包括了應答)
{
unsigned char i=0,b;
for(i=0;i<8;i++)
{
SDA=dat>>7;
dat<<=1;
delay10us();
SCL=1;
delay10us();
SCL=0;
delay10us();
}
SDA=1;
delay10us();
SCL=1;
while(SDA)
{
b++;
if(b>200)
{
SCL=0;
delay10us();
return 0;
}
}
SCL=0;
delay10us();
return 1;
}
unsigned char read_byte()
{
unsigned char i=0,dat=0;
SDA=1;
delay10us();
for(i=0;i<8;i++)
{
SCL=1;
delay10us();
dat=dat<<1;
dat|=SDA;
delay10us();
SCL=0;
delay10us();
}
return dat;
}
void I2Cwrite(unsigned char addr,unsigned char dat)
{
start_singal();
send_byte(0xa0);
send_byte(addr);
send_byte(dat);
stop_singal();
}
unsigned char I2Cread(unsigned char addr)
{
unsigned char num;
start_singal();
send_byte(0xa0);
send_byte(addr);
start_singal();
send_byte(0xa1);
num=read_byte();
stop_singal();
return num;
}
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
亚洲国产精品久久久久秋霞不卡
|
国产91亚洲精品一区二区三区
|
中文字幕av免费
|
国产成人精品免费视频大全最热
|
在线免费看91
|
亚洲色图50p
|
黑人中文字幕一区二区三区
|
一区二区视频在线观看
|
欧美精品一区二区三区四区五区
|
a在线视频
|
99re6在线视频精品免费
|
欧美大片一区
|
亚洲精品一区二区三区四区高清
|
久久天堂
|
久久这里只有精品首页
|
亚洲欧美日韩精品久久亚洲区
|
日本一区二区视频
|
日韩中文字幕在线观看视频
|
av在线一区二区
|
精品国产免费人成在线观看
|
精品久久久久久久久久
|
91精品一区
|
国产一区二区三区免费观看视频
|
国产精品免费一区二区
|
日韩欧美在线视频一区
|
亚洲精品九九
|
久久久久久久一区
|
福利视频一区二区三区
|
羞羞视频网站免费观看
|
午夜一区
|
免费在线观看91
|
欧美亚洲国产日韩
|
久久一日本道色综合久久
|
91国产在线播放
|
国内精品视频免费观看
|
91福利在线观看视频
|
色偷偷噜噜噜亚洲男人
|
9久久精品
|
99久久国产精
|
国产色片在线
|
欧美亚洲日本
|