/**************************************************
实验名称:I2C总线实验一
实验目的:利用定时器产生0~99秒表在数码管前两位显示
每过一秒写入到AT24C02里面,关闭实验板后
重新打开实验板,秒表从AT24C02读入数据继
续上一次的计时。
实验备注:
**************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit SDA = P2^0;
sbit SCL = P2^1;
sbit DUAN = P2^6;
sbit WEI = P2^7;
uchar code duan_table[]=
{0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
uchar code wei_table[]=
{0xfe,0xfd,0xfb,
0xf7,0xef,0xdf};
uchar num, sec;
void delay_1us();
void delay_1ms(uchar);
void display(uchar);
void at24_init();
void at24_start();
void at24_stop();
void at24_respons();
void at24_writebyte(uchar);
uchar at24_readbyte(uchar);
void at24_writeadd(uchar,uchar);
uchar at24_readadd(uchar);
void main()
{
at24_init();
sec = at24_readadd(5);
if(sec > 100)
sec = 0;
TMOD = 0x01;
TH0 = (65536-46080)/256;
TL0 = (65536-46080)%256;
EA = 1;
ET0 = 1;
TR0 = 1;
while(1)
{
if(num == 20)
{
num = 0;
sec++;
if(sec == 100)
{
sec = 0;
}
at24_writeadd(5,sec);
}
display(sec);
}
}
void delay_1us()
{
//uchar i, j;
//for(i = 0; i < 1; i++)
//for(j = 0; j < 1; j++);
;;
}
void delay_1ms(uchar x)
{
uchar i, j;
for(i = 0; i < x; i++)
for(j = 0; j < 110; j++);
}
void display(uchar x)
{
DUAN = 1;
P0 = duan_table[x/10];
DUAN = 0;
P0 = 0xff;
WEI = 1;
P0 = wei_table[0];
WEI = 0;
delay_1ms(5);
DUAN = 1;
P0 = duan_table[x%10];
DUAN = 0;
P0 = 0xff;
WEI = 1;
P0 = wei_table[1];
WEI = 0;
delay_1ms(5);
}
void at24_init()
{
SDA = 1;
delay_1us();
SCL = 1;
delay_1us();
}
void at24_start()
{
SDA = 1;