用JLX12864G-350和 DS3231时钟写一个51单片机显示时间的程序
时间: 2023-10-16 17:09:10 浏览: 107
当使用JLX12864G-350和DS3231时钟模块来显示时间时,你可以按照以下步骤进行:
1. 连接硬件:将JLX12864G-350显示屏和DS3231时钟模块连接到51单片机。确保连接正确并使用正确的引脚。
2. 初始化DS3231时钟模块:使用相应的库函数初始化DS3231时钟模块,设置正确的时间和日期。这通常涉及到设置I2C总线通信,并发送相应的命令和数据来设置时间和日期。
3. 编写显示函数:编写一个函数来从DS3231时钟模块读取当前时间和日期,并将其显示在JLX12864G-350显示屏上。这涉及到读取DS3231的寄存器来获取时间和日期数据,并将其转换为可读格式。
4. 主程序循环:在主程序中,设置一个循环来反复调用显示函数,以便实时更新显示屏上的时间。
下面是一个简单的示例程序,演示了如何使用JLX12864G-350和DS3231时钟模块来显示时间:
```c
#include <reg51.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// 定义JLX12864G-350相关引脚连接
sbit LCD_RS = P2^0;
sbit LCD_RW = P2^1;
sbit LCD_EN = P2^2;
sbit LCD_CS1 = P2^3;
sbit LCD_RST = P2^4;
sbit LCD_DATAPORT = P0;
// 定义DS3231相关引脚连接
sbit SDA = P3^4;
sbit SCL = P3^5;
// 定义全局变量
unsigned char time[8];
// I2C起始信号
void I2C_Start()
{
SDA = 1;
SCL = 1;
delay(5);
SDA = 0;
delay(5);
SCL = 0;
delay(5);
}
// I2C停止信号
void I2C_Stop()
{
SDA = 0;
SCL = 1;
delay(5);
SDA = 1;
delay(5);
}
// I2C发送一个字节
void I2C_SendByte(unsigned char dat)
{
unsigned char i;
for (i = 0; i < 8; i++)
{
SDA = dat >> (7 - i);
SCL = 1;
delay(2);
SCL = 0;
delay(2);
}
SDA = 1;
SCL = 1;
delay(2);
SCL = 0;
}
// I2C接收一个字节
unsigned char I2C_ReceiveByte()
{
unsigned char i, dat = 0;
for (i = 0; i < 8; i++)
{
SCL = 1;
dat <<= 1;
dat |= SDA;
delay(2);
SCL = 0;
delay(2);
}
return dat;
}
// 从DS3231读取时间和日期
void ReadTimeFromDS3231()
{
unsigned char i;
I2C_Start();
I2C_SendByte(0xD0); // 发送DS3231的写地址
I2C_SendByte(0x00); // 发送读取时间寄存器的地址
I2C_Stop();
I2C_Start();
I2C_SendByte(0xD1); // 发送DS3231的读地址
for (i = 0; i < 7; i++)
{
time[i] = I2C_ReceiveByte(); // 读取时间和日期
if (i < 6)
{
I2C_SendByte(0x00); // 发送继续读取的命令
}
}
I2C_Stop();
}
// 在JLX12864G-350显示屏上显示时间
void DisplayTimeOnLCD()
{
unsigned char i;
LCD_CS1 = 0;
LCD_RST = 0;
delay(2);
LCD_RST = 1;
delay(2);
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 1;
delay(2);
LCD_EN = 0;
delay(2);
LCD_RS = 1;
for (i = 0; i < 8; i++)
{
LCD_EN = 1;
LCD_RW = 0;
LCD_DATAPORT = time[i];
delay(2);
LCD_EN = 0;
delay(2);
}
}
// 主函数
void main()
{
while (1)
{
ReadTimeFromDS3231(); // 从DS3231读取时间和日期
DisplayTimeOnLCD(); // 在JLX12864G-350显示屏上显示时间
delay(1000); // 延时1秒
}
}
```
请注意,以上示例程序仅供参考,具体的实现可能因你使用的开发工具和库函数而有所不同。在实际使用中,你需要根据硬件连接和库函数的要求进行适当的修改。
希望这个示例能帮到你!如果还有其他问题,请随时提问。
阅读全文