资源简介

51电子闹钟实现了:界面LCD1602显示器,显示年、月、日、星期、时、分、秒、温度,具有闹钟设定,铃声变换设定,时间设定,事件设定,掉电不丢失,12/24进制切换功能。 资源含有实验报告及源码(含注释及使用方法)

资源截图

代码片段和文件信息

#include “AT24C02.h“
#include “common.h“

//写入一个字节数据到wordaddress指定的单元
unsigned char AT24C02_writebyte( unsigned char wordaddress unsigned char c )
{
IIC_start();   //发送起始信号

IIC_sendbyte( AT24C02_DEVICE );   //发送器件地址
if ( IIC_receiveack() == 0 )   //等待应答信号
return FAIL;

IIC_sendbyte( wordaddress );   //发送存储单元地址
if ( IIC_receiveack() == 0 )   //等待应答信号
return FAIL;

IIC_sendbyte( c );  //发送一个字节数据
if ( IIC_receiveack() == 0 )  //等待应答信号
return FAIL;

IIC_stop();  //发送停止信号
delay_ms(15);  //延时10ms等待EEPROM操作完成

return SUCCESS;  //写入成功
}

//写入一页数据(8B)到pageaddress指定的页,pageaddress必须页对齐,即pageaddress%8为0
unsigned char AT24C02_writepage( unsigned char pageaddress unsigned char *c)
{
unsigned char i;
IIC_start();  //发送起始信号

IIC_sendbyte( AT24C02_DEVICE );  //发送器件地址
if ( IIC_receiveack() == 0 )  //等待应答信号
return FAIL;

IIC_sendbyte( pageaddress );  //发送页地址
if ( IIC_receiveack() == 0 )  //等待应答信号
return FAIL;

for ( i = 0; i < 8; i++ )  //连续写入一页(8字节)数据
{
IIC_sendbyte( c[i] );  //写入一个字节数据
if ( IIC_receiveack() == 0 )  //等待应答信号
return FAIL;
}

IIC_stop();   //发送停止信号
delay_ms(15);   //延时10ms等待EEPROM操作完成

return SUCCESS;   //写入成功
}

//写入strnum字节到wordaddress开始的单元
unsigned char AT24C02_writestring( unsigned char wordaddress unsigned int strnum unsigned char *str )
{
unsigned char begin;
unsigned char rest;
unsigned char pageaddress;

unsigned char i;
unsigned char *strpoint;

strpoint = str;
rest = strnum;

//前面非页对齐的字节处理,一页为8个字节
begin = wordaddress & 0x07; //屏蔽地址中的高5位,只留低3位,得到页内偏移0x07=0000 0111
if ( begin ) //如果页面偏移不为0,表示非页对齐
{
for ( i = 0; i < ( 8 - begin ); i++ ) //需要处理的字节数为8-begin
{
if ( AT24C02_writebyte( wordaddress + i *strpoint ) == FAIL ) //写入一个字节
return FAIL;
strpoint++; //更新数据指针
rest--; //还剩rest个字节要写入AT24C02
}
}

pageaddress = wordaddress & 0xF8 + 1; //准备整页写入?xF8=1111 1000,高5位为页地址,pageaddress指向下一页
while ( rest >= 8 ) //剩余的rest个字节大于一页(8字节)则进入循环进行整页写操作
{
if ( AT24C02_writepage( pageaddress strpoint ) == FAIL ) //写入一页
return FAIL;
strpoint = strpoint + 8; //数据指针指向后移8字节;
rest = rest - 8; //剩余数据减少了8个字节

pageaddress = pageaddress + 0x08;
if ( pageaddress  > 0xF8 ) //AT24C02总共32页(0~31), 如果写完最后一页(31)
pageaddress = 0;     //则循环到从第0页开始
}

//最后不够一页的处理
if ( rest > 0 )     //还有剩余的数据没写入
{
 for ( i = 0; i < rest; i++ ) //准备写入,写入个数即为rest
 {
  if ( AT24C02_writebyte( pageaddress + i *strpoint ) == FAIL )   //逐个字节写入
return FAIL;
strpoint++;
 }

}

return SUCCESS;
}

//从AT24C02中的wordaddress单元读取一个字节
unsigned char AT24C02_readbyte( unsigned char wordaddress )
{
unsigned char c;

IIC_start();    //发送起始信号

IIC_sendbyte( AT24C02_DEVICE );  //发送器件地址
if ( IIC_receiveack() == 0 )  //等待应答信号
return FAIL;

IIC_s

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2020-05-06 14:17  综合实验\
     文件         246  2020-05-06 14:13  综合实验\README.txt
     文件         162  2020-05-06 14:13  综合实验\~$综合实验.docx
     目录           0  2019-01-21 20:44  综合实验\电子闹钟\
     文件        5138  2019-01-06 15:28  综合实验\电子闹钟\AT24C02.c
     文件         823  2018-09-01 10:22  综合实验\电子闹钟\AT24C02.h
     文件       74482  2019-01-21 20:44  综合实验\电子闹钟\Clock.uvgui.Aaron
     文件        7327  2019-01-06 15:49  综合实验\电子闹钟\Clock.uvopt
     文件       14848  2019-01-06 15:49  综合实验\电子闹钟\Clock.uvproj
     文件         382  2018-12-27 18:07  综合实验\电子闹钟\common.c
     文件         125  2018-09-01 10:23  综合实验\电子闹钟\common.h
     文件        8331  2019-01-02 19:29  综合实验\电子闹钟\DS1302.c
     文件        3155  2018-12-29 11:50  综合实验\电子闹钟\DS1302.h
     文件        3822  2018-09-01 10:22  综合实验\电子闹钟\IIC.c
     文件         349  2019-01-06 15:28  综合实验\电子闹钟\IIC.h
     文件        5233  2018-12-31 14:16  综合实验\电子闹钟\LCD1602.c
     文件        2970  2018-12-28 11:11  综合实验\电子闹钟\LCD1602.h
     目录           0  2019-01-21 20:35  综合实验\电子闹钟\Listings\
     文件        9293  2019-01-16 20:44  综合实验\电子闹钟\Listings\AT24C02.lst
     文件      118244  2019-01-16 20:44  综合实验\电子闹钟\Listings\Clock.m51
     文件        1595  2019-01-16 20:44  综合实验\电子闹钟\Listings\common.lst
     文件       15453  2019-01-16 20:44  综合实验\电子闹钟\Listings\DS1302.lst
     文件        7594  2019-01-16 20:44  综合实验\电子闹钟\Listings\IIC.lst
     文件        9001  2019-01-16 20:44  综合实验\电子闹钟\Listings\LCD1602.lst
     文件       52159  2019-01-16 20:44  综合实验\电子闹钟\Listings\main.lst
     文件        9711  2019-01-16 20:44  综合实验\电子闹钟\Listings\temp.lst
     文件       27661  2019-01-21 20:44  综合实验\电子闹钟\main.c
     文件        4341  2018-12-30 22:29  综合实验\电子闹钟\Music.h
     文件       15354  2018-12-29 17:10  综合实验\电子闹钟\music_code.h
     目录           0  2019-01-21 20:35  综合实验\电子闹钟\objects\
     文件       10690  2019-01-16 20:44  综合实验\电子闹钟\objects\AT24C02.obj
............此处省略13个文件信息

评论

共有 条评论