PROTEUS制作PIC16F877A电子时钟教程分享

版权申诉
0 下载量 8 浏览量 更新于2024-11-03 1 收藏 53KB RAR 举报
资源摘要信息:"本资源主要介绍了如何使用PROTEUS软件设计基于PIC16F877A单片机的电子时钟。PIC16F877A是微芯公司(Microchip)生产的一款性能卓越的8位CMOS微控制器,它广泛应用于嵌入式系统的开发中。本设计基于ISIS(Integrated System Identification System)仿真环境,ISIS是PROTEUS软件中的一个功能模块,它允许开发者在实际编程和硬件部署之前,通过虚拟原型测试和验证他们的电路设计。 设计电子时钟时,需要考虑以下几个关键点: 1. PIC16F877A微控制器:这是项目的核心组件,它负责处理所有与电子时钟相关的逻辑和计算。PIC16F877A具有丰富的I/O端口、定时器、中断和其它外设接口,使得设计者能够构建复杂的嵌入式系统。 2. 时钟功能实现:在PIC16F877A上实现时钟功能需要编写相应的程序代码,通常使用C语言或汇编语言编写。代码中需要实现时钟的计数、时间的增减以及时间的显示等功能。程序运行时,微控制器通过内部的时钟模块(如看门狗定时器或专用的实时时钟模块)来跟踪时间的流逝。 3. 仿真与调试:在PROTEUS中构建电路模型之后,可以在ISIS中加载PIC16F877A的仿真模型,运行电路并进行调试。在这个阶段,设计者可以观察到时钟程序的运行情况,检查是否存在逻辑错误或硬件问题,并进行相应的调整。 4. 显示器和输入设备:电子时钟通常需要一个显示器来显示时间,这可以是LCD(液晶显示器)或LED(发光二极管)。同时,时钟可能还需要一些输入设备,比如按钮或旋钮,以便用户设定时间。这些都需要在设计中考虑,并与PIC16F877A的I/O端口相连。 5. 电源管理:对于电子时钟这样的长时间运行设备,合理的电源管理设计至关重要。设计中应考虑使用电池或稳压电源,并确保整个电路功耗低,延长设备的使用寿命。 6. 文件分享:资源中提供的“***.txt”和“shizhong”文件可能包含项目相关的文档说明、代码文件、电路图和仿真结果等。这些文件将有助于其他开发者理解和复现项目的设计。 总结来说,本资源详细介绍了基于PIC16F877A单片机设计的电子时钟项目,包括硬件选择、软件编程、仿真测试和调试等关键步骤。通过这个项目,开发者可以深入学习PIC16F877A的特性以及PROTEUS软件的使用,为未来更复杂的嵌入式系统设计打下坚实的基础。"

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