51单片机电子时钟实现及DS12887时钟芯片应用

版权申诉
0 下载量 115 浏览量 更新于2024-10-08 收藏 1KB RAR 举报
资源摘要信息:"本文档是一个关于使用51单片机实现电子时钟功能的项目文件,包含了液晶显示以及DS12887实时时钟芯片的应用。该项目的文件名为shizhong.rar,解压后会得到一个名为shizhong.c的源代码文件,该文件负责描述了整个电子时钟的程序逻辑。" ### 知识点一:51单片机 51单片机,也称为8051单片机,是一种经典的微控制器。它基于Intel 8051架构,具有4KB的ROM、128字节的RAM、一个或多个定时器/计数器以及一个并行I/O端口。51单片机因其结构简单、成本低廉、功能强大,广泛应用于教学、工业控制、智能仪表等领域。 #### 电子时钟中的51单片机应用: 1. 控制逻辑:51单片机作为核心控制单元,执行程序指令,控制电子时钟的整体运行。 2. 时间计算:通过内置的定时器/计数器,实现时间的追踪与计算功能。 3. 接口扩展:51单片机可以通过外接接口与液晶显示屏和DS12887实时时钟芯片连接。 ### 知识点二:液晶显示 液晶显示(LCD)技术用于在电子设备上展示信息,如文本、数字和图像。在电子时钟项目中,液晶显示屏用于显示当前的时钟信息,比如时、分、秒。 #### 电子时钟中的液晶显示应用: 1. 显示接口:51单片机通过特定的接口(如并行或串行接口)与LCD模块连接。 2. 显示驱动:51单片机需要运行特定的程序代码来驱动LCD,将时间信息转换成图形或文本显示在液晶屏上。 3. 显示控制:51单片机还可以控制LCD的显示亮度、对比度以及是否显示特定的信息。 ### 知识点三:DS12887实时时钟芯片 DS12887是一种带有内部锂电池的实时时钟芯片,能够保持时间的连续性,即使在断电的情况下也能继续运行。DS12887具有内置的时钟、日历和闹钟功能,且可以通过简单的串行接口与51单片机通信。 #### 电子时钟中的DS12887应用: 1. 时间跟踪:DS12887提供准确的时间跟踪功能,51单片机通过查询DS12887来获取实时的时间数据。 2. 非易失性存储:即使主电源断开,DS12887内部的锂电池也能保存时间信息,确保时钟不会丢失时间数据。 3. 闹钟功能:部分电子时钟项目会使用DS12887的闹钟功能,与51单片机配合,实现定时提醒的功能。 ### 知识点四:项目文件解析 项目文件名为shizhong.rar,这表明该项目被压缩成一个名为shizhong的RAR格式文件。RAR是一种压缩文件格式,能够有效地减小文件大小,便于存储和传输。 #### 解压后的文件shizhong.c: 1. 源代码文件:shizhong.c是一个包含电子时钟程序源代码的C语言文件。 2. 编程逻辑:shizhong.c文件中包含了利用51单片机和DS12887实时时钟芯片实现电子时钟功能的编程逻辑。 3. 编译与运行:为了使电子时钟工作,需要将shizhong.c文件使用适当的编译器进行编译,生成可执行的机器代码,并将其烧录到51单片机中。 通过以上知识点的介绍,我们可以看到电子时钟项目是如何通过51单片机、液晶显示技术和DS12887实时时钟芯片的结合,实现电子时钟功能的。这种类型的项目不仅有助于理解嵌入式系统的原理,而且在动手实践中加深了对单片机编程和硬件接口操作的理解。

import numpy as np import pandas as pd from sklearn.model_selection import train_test_split from keras.models import Sequential from keras.layers import Dense from pyswarm import pso import matplotlib.pyplot as plt from sklearn.preprocessing import StandardScaler from sklearn.metrics import mean_absolute_error from sklearn.metrics import mean_squared_error from sklearn.metrics import r2_score file = "zhong.xlsx" data = pd.read_excel(file) #reading file X=np.array(data.loc[:,'种植密度':'有效积温']) y=np.array(data.loc[:,'产量']) y.shape=(185,1) # 将数据集分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X,y, test_size=0.25, random_state=10) SC=StandardScaler() X_train=SC.fit_transform(X_train) X_test=SC.fit_transform(X_test) y_train=SC.fit_transform(y_train) y_test=SC.fit_transform(y_test) print("X_train.shape:", X_train.shape) print("X_test.shape:", X_test.shape) print("y_train.shape:", y_train.shape) print("y_test.shape:", y_test.shape) # 定义BP神经网络模型 def nn_model(X): model = Sequential() model.add(Dense(8, input_dim=X_train.shape[1], activation='relu')) model.add(Dense(12, activation='relu')) model.add(Dense(1)) model.compile(loss='mean_squared_error', optimizer='adam') return model # 定义适应度函数 def fitness_func(X): model = nn_model(X) model.fit(X_train, y_train, epochs=60, verbose=2) score = model.evaluate(X_test, y_test, verbose=2) print(score) # 定义变量的下限和上限 lb = [5, 5] ub = [30, 30] # 利用PySwarm库实现改进的粒子群算法来优化BP神经网络预测模型 result = pso(fitness_func, lb, ub) # 输出最优解和函数值 print('最优解:', result[0]) print('最小函数值:', result[1]) mpl.rcParams["font.family"] = "SimHei" mpl.rcParams["axes.unicode_minus"] = False # 绘制预测值和真实值对比图 model = nn_model(X) model.fit(X_train, y_train, epochs=60, verbose=2) y_pred = model.predict(X_test) y_true = SC.inverse_transform(y_test) y_pred=SC.inverse_transform(y_pred) plt.figure() plt.plot(y_true,"bo-",label = '真实值') plt.plot(y_pred,"ro-", label = '预测值') plt.title('神经网络预测展示') plt.xlabel('序号') plt.ylabel('产量') plt.legend(loc='upper right') plt.show() print("R2 = ",r2_score(y_test, y_pred)) # R2 # 绘制损失函数曲线图 model = nn_model(X) history = model.fit(X_train, y_train, epochs=60, validation_data=(X_test, y_test), verbose=2) plt.plot(history.history['loss'], label='train') plt.plot(history.history['val_loss'], label='test') plt.legend() plt.show() mae = mean_absolute_error(y_test, y_pred) print('MAE: %.3f' % mae) mse = mean_squared_error(y_test, y_pred) print('mse: %.3f' % mse)

2023-06-10 上传