单片机六位数码管时钟程序设计

版权申诉
0 下载量 31 浏览量 更新于2024-11-18 收藏 692B RAR 举报
资源摘要信息: "shizhong.rar_单片机开发_C/C++" 这个资源是一个关于单片机开发的压缩文件包,其主要内容涉及C/C++语言编程,特别是在51单片机开发板上实现一个能够显示时分秒的六位数码管程序。以下是对该资源可能涵盖的知识点的详细说明: 1. 单片机基础知识:单片机是一种集成电路芯片,它拥有CPU、内存、I/O接口等计算机的核心部件,能够独立执行程序。51单片机是单片机家族中非常经典的一种,广泛用于教学和工业控制。了解51单片机的内部结构、工作原理和指令集是开发此类程序的基础。 2. C/C++语言编程:C/C++是单片机开发中经常使用的编程语言,因为它们具有较强的硬件操作能力和较高的运行效率。在本资源中,开发者需要用C/C++语言编写程序代码,通过编写代码来控制数码管的显示逻辑。 3. 数码管显示原理:数码管是一种通过发光二极管排列组合来显示数字的显示器件。在单片机开发中,通常通过控制GPIO(通用输入输出)引脚的电平来点亮或熄灭数码管上对应的段,从而显示特定的数字或字符。了解数码管的工作原理和接口电路设计对于实现本程序至关重要。 4. 时间显示逻辑:为了在数码管上显示时间,需要编写逻辑来实现时钟功能,包括时间的计数、格式化以及每秒的更新。这通常涉及到定时器的使用,因为定时器可以产生周期性的中断,使单片机在固定的时间间隔更新显示内容。 5. 编程实践:具体到这个资源,开发者需要编写一个程序,将时钟的时间分解为时、分、秒,并将其显示在六位数码管上。这可能涉及到以下步骤: - 初始化单片机的相关硬件,如定时器、I/O端口等。 - 编写中断服务程序,用于每秒钟更新一次时间。 - 编写主程序,实现对数码管的控制逻辑,包括如何显示当前时间。 - 调试程序,确保显示正确无误,并且在单片机开发板上运行稳定。 6. 资源文件说明:文件名“时钟.txt”表明,该资源可能包含了相关的项目说明文档或源代码注释,为开发者提供关于程序设计思路、注意事项以及具体的代码实现细节。这将对理解整个程序的结构和运行方式提供帮助。 总结:这个资源是针对单片机开发者的,需要具备一定的单片机和C/C++编程知识才能充分理解和利用。通过实际操作和编程实践,开发者不仅能够学习如何在51单片机开发板上实现时钟功能,还能够深入理解硬件操作和C/C++编程在嵌入式系统中的应用。这对于希望从事嵌入式系统开发和单片机应用开发的人员来说,是一个很好的学习材料和实践机会。

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