ds12887 数字时钟 C语言 89E51单片机 csdn
时间: 2023-09-17 20:14:25 浏览: 59
以下是使用C语言在89E51单片机上操作ds12887实现数字时钟的示例代码:
```c
#include <reg51.h>
#define DS12887_ADDR 0xD0 // ds12887的地址
#define I2C_SCL P1_0 // I2C时钟线
#define I2C_SDA P1_1 // I2C数据线
void delay_us(unsigned int t) // 微秒级延时函数
{
while (t--)
{
_nop_();
}
}
void i2c_start(void) // 发送I2C起始信号
{
I2C_SDA = 1;
I2C_SCL = 1;
delay_us(2);
I2C_SDA = 0;
delay_us(2);
I2C_SCL = 0;
}
void i2c_stop(void) // 发送I2C停止信号
{
I2C_SDA = 0;
I2C_SCL = 1;
delay_us(2);
I2C_SDA = 1;
delay_us(2);
}
void i2c_send_byte(unsigned char data) // 发送一个字节的数据
{
unsigned char i;
for (i = 0; i < 8; i++)
{
if (data & 0x80)
{
I2C_SDA = 1;
}
else
{
I2C_SDA = 0;
}
I2C_SCL = 1;
delay_us(2);
I2C_SCL = 0;
data <<= 1;
}
I2C_SDA = 1;
I2C_SCL = 1;
delay_us(2);
I2C_SCL = 0;
}
unsigned char i2c_receive_byte(void) // 接收一个字节的数据
{
unsigned char i, data = 0;
I2C_SDA = 1;
for (i = 0; i < 8; i++)
{
data <<= 1;
I2C_SCL = 1;
delay_us(2);
if (I2C_SDA)
{
data |= 0x01;
}
I2C_SCL = 0;
delay_us(2);
}
return data;
}
void ds12887_write(unsigned char addr, unsigned char data) // 向ds12887写入数据
{
i2c_start();
i2c_send_byte(DS12887_ADDR);
i2c_send_byte(addr);
i2c_send_byte(data);
i2c_stop();
}
unsigned char ds12887_read(unsigned char addr) // 从ds12887读取数据
{
unsigned char data;
i2c_start();
i2c_send_byte(DS12887_ADDR);
i2c_send_byte(addr);
i2c_start();
i2c_send_byte(DS12887_ADDR | 0x01);
data = i2c_receive_byte();
i2c_stop();
return data;
}
void main()
{
unsigned char hour, minute, second;
ds12887_write(0x0B, 0x80); // 停止时钟
ds12887_write(0x0A, 0x20); // 24小时制
ds12887_write(0x0E, 0x00); // 禁止闹钟
ds12887_write(0x0F, 0x00); // 禁止定时器
ds12887_write(0x10, 0x00); // 禁止定时器
ds12887_write(0x0B, 0x00); // 启动时钟
while (1)
{
hour = ds12887_read(0x04);
minute = ds12887_read(0x02);
second = ds12887_read(0x00);
// 在LCD上显示时分秒
}
}
```
这段代码先定义了一些常量和函数,其中包括了I2C总线的操作函数和ds12887的读写函数。在主函数中,先配置了ds12887的一些参数,然后不断地从ds12887读取当前时间,并在LCD上显示。需要注意的是,这里的LCD显示部分并未实现,需要根据实际情况进行修改。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)