原创Proteus仿真闹钟项目:时间设置与报警功能

版权申诉
0 下载量 180 浏览量 更新于2024-11-09 收藏 39KB RAR 举报
资源摘要信息:"该资源是关于使用Keil C语言开发Proteus仿真实现的闹钟项目。项目不仅包括Proteus仿真文件,还包含了用Keil C语言编写的源代码。用户可以通过该项目实现一个可以设置时间、重设时间以及到时间后发出警告的闹钟功能。此项目对于希望在Proteus软件上进行嵌入式系统仿真的开发者来说是一个宝贵的参考资源。" 知识点: 1. Proteus仿真软件介绍: Proteus是一款广泛使用的电子电路设计和仿真软件,特别适合嵌入式系统的开发者使用。用户可以在软件内部直接进行电路设计、原理图绘制以及PCB布局。此外,Proteus还提供了强大的微处理器仿真功能,可以模拟多种微控制器的运行环境。 2. Keil C语言开发环境: Keil C是一种专门为嵌入式系统开发设计的集成开发环境(IDE),它支持多种类型的微控制器,包括8051、Cortex-M、C166/ST10等。Keil提供了编译器、调试器、模拟器等功能,用户可以利用Keil开发并测试嵌入式软件代码。 3. 闹钟功能实现方法: 闹钟的实现通常涉及到时间的获取、设定和比较。在本项目中,开发者需要编写程序实现这些功能。时间的获取可以来自于微控制器内置的实时时钟(RTC)模块,或者外部的时钟芯片。时间的设定可以通过程序内部的算法实现,也可以通过用户接口来设置。时间到后发出警告,则需要通过驱动蜂鸣器或其他报警装置来完成。 4. 项目文件结构和功能: 根据文件名称列表,本项目可能包含以下文件: ***.txt: 一个文本文件,可能包含与项目相关的说明、教程或者相关资源的链接等信息。 - shizhong: 这个文件可能是指代整个项目文件夹,其中应该包含了Proteus仿真文件(如*.dsn或*.dsn)和Keil C项目文件(如*.uvproj)。 5. 如何使用Proteus进行仿真: 为了在Proteus中进行仿真,开发者需要加载仿真文件,然后配置仿真环境,如指定使用的微控制器型号,设置必要的外围设备参数。接下来,可以加载编译好的程序到微控制器中,并开始仿真。仿真过程中,可以通过虚拟仪表监测电路运行状态,并观察程序对硬件的控制效果。 6. Keil C项目构建和调试: 在Keil C中开发时,首先需要创建一个项目,并根据目标微控制器的特性设置项目选项。之后,编写源代码,并将其添加到项目中。编译代码生成可执行文件,并将其加载到Proteus仿真中。使用Keil C的调试器可以对代码进行单步执行、设置断点、监视变量等调试操作,以确保程序按预期工作。 7. 仿真与实际硬件测试的差异: 在仿真环境中可以测试程序逻辑的正确性,但可能会缺乏对实际硬件特性的考量,如电气噪声、元件温度变化等因素。因此,在实际硬件测试中可能还需要对程序进行调整。了解这两者之间的差异对于工程师来说非常重要,有助于他们更好地进行产品设计和故障排除。 以上就是通过提供的文件信息整理出的知识点,不仅包括了软件工具的介绍,还包括了开发流程、功能实现以及项目的具体应用等方面。这个项目对于想要学习或深化嵌入式系统仿真和开发的用户来说是一个很好的实践案例。

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