C51单片机简易时钟:实现时间加减的shizhong时钟

版权申诉
5星 · 超过95%的资源 1 下载量 43 浏览量 更新于2024-11-05 1 收藏 23KB RAR 举报
资源摘要信息:"shizhong.rar_C51单片机简易时钟_shizhong时间" C51单片机简易时钟是指以C51系列单片机为核心,通过编程实现时钟功能的一个电子项目。C51单片机是8051单片机的一个分支,属于经典的微控制器(Microcontroller Unit,MCU)产品。由于其资源丰富、性能稳定、价格低廉以及易于学习的特点,C51单片机广泛应用于电子产品的开发和教学中。 简易时钟项目通常包括以下几个知识点: 1. 单片机基础知识:了解C51单片机的内部结构、寄存器、指令集、定时器/计数器、中断系统等基础内容。 2. 时钟原理:掌握数字时钟的基本原理,包括时钟信号的产生、分频、计数以及时间的计算方法。 3. 输入/输出设备:学习如何连接和编程控制按键、显示器(如LED数码管或LCD液晶显示屏)等外围设备。 4. 按键编程:实现按键的去抖动处理,以及通过软件实现按键的加时和减时功能。 5. 显示编程:了解如何使用编程语言(通常为C语言或汇编语言)来控制显示设备,以正确显示时间信息。 6. 程序设计:熟悉结构化编程方法,设计出功能模块清晰、可读性强的程序代码。 7. 实时系统:学习如何在单片机上实现实时时钟(RTC)功能,确保时间的准确性和稳定性。 8. 调试技巧:掌握使用仿真软件或实际硬件进行程序调试的技巧,能高效地发现并解决问题。 9. 硬件电路设计:了解基本的电子电路知识,能够设计或理解时钟项目的电路原理图。 从【压缩包子文件的文件名称列表】中仅得到了“shizhong”这一信息,这可能是项目文件的名称或者作者的标识。由于没有提供详细的文件列表内容,我们无法得知具体的文件内容,但是可以假设文件中可能包含了上述知识点相关的源代码文件、设计文档、原理图以及可能的用户手册或使用说明。 在实际开发过程中,设计者需要根据项目的具体要求,从基础的时钟计数逻辑开始,逐步实现用户输入接口、显示输出接口、时间调节逻辑、时间显示格式等核心功能。此外,还需考虑产品的稳定性、用户体验和外观设计等因素。 需要注意的是,简易时钟项目虽然功能相对简单,但它是学习和理解嵌入式系统开发的良好起点,能够帮助初学者建立起对硬件编程、外围设备控制和基本的电子电路设计的全面认识。通过对项目的实现,学习者可以加深对单片机工作原理的理解,并掌握硬件与软件相结合开发产品的技能。

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 上传