飞思卡尔单片机控制LED灯闪烁教程

版权申诉
0 下载量 61 浏览量 更新于2024-11-09 收藏 145KB ZIP 举报
资源摘要信息:"4LED_KEY_INTERR.zip_dxz4ledkey"是一个包含了飞思卡尔qg08单片机中断控制灯闪烁主程序的压缩文件。这个文件对于初学者来说是一个非常有帮助的学习资料,它详细介绍了如何通过中断来控制LED灯的亮灭。在这篇文章中,我们将详细解析这个文件中包含的知识点。 首先,我们需要了解飞思卡尔qg08单片机。飞思卡尔半导体公司是一家全球领先的微控制器、微处理器、传感器和软件解决方案提供商,其产品广泛应用于汽车、工业和消费电子等领域。qg08单片机是飞思卡尔公司推出的一款具有高性能、低成本的8位微控制器,它具有丰富的外设接口和灵活的中断系统,非常适合用于入门级的嵌入式系统学习。 其次,我们需要了解什么是中断。在计算机系统中,中断是一种机制,它允许处理器暂停当前正在执行的任务,转而去响应更紧急或更重要的事件。在嵌入式系统中,中断通常用于处理外部事件,例如按钮按下、定时器溢出等。通过使用中断,系统可以在不需要持续轮询(polling)的情况下,及时响应外部事件。 在这个文件中,主要的知识点是通过中断控制LED灯的亮灭。具体来说,程序通过配置单片机的中断系统,使得每当按键被按下时,都会触发一个中断。在中断服务程序中,程序会改变LED灯的状态,使得LED灯在亮和灭之间切换。这种通过中断控制外设的方法,不仅可以使得程序的主循环更加简洁,而且可以提高系统的响应速度和效率。 此外,这个文件对于初学者来说,不仅提供了一个具体的例子,而且通过这个例子,可以帮助初学者理解单片机编程的基本概念和方法,例如如何配置中断系统,如何编写中断服务程序,如何控制外设等。因此,这个文件对于初学者来说是一个非常有价值的资源。 最后,文件名"4LED_KEY_INTERR中断,一下亮一下灭"非常直观地描述了程序的功能和特点。通过这个文件,初学者可以清晰地了解到,当按键被按下时,LED灯会交替闪烁的物理现象,以及背后的程序实现原理。 总结来说,"4LED_KEY_INTERR.zip_dxz4ledkey"这个压缩文件为初学者提供了一个关于飞思卡尔qg08单片机中断控制LED灯闪烁的实际案例,涵盖了单片机编程的基本概念和方法,对于初学者深入理解和掌握嵌入式系统编程具有重要的帮助。

depth = np.arange(1, 15) err_train_list = [] err_test_list = [] clf = DecisionTreeClassifier(criterion='entropy') for d in depth: clf.set_params(max_depth=d) clf.fit(x_train, y_train) y_train_pred = clf.predict(x_train) err_train = 1-accuracy_score(y_train, y_train_pred) err_train_list.append(err_train) y_test_pred = clf.predict(x_test) err_test = 1-accuracy_score(y_test, y_test_pred) err_test_list.append(err_test) print(d, '测试集错误率:%.2f%%' % (100 * err_test)) plt.figure(facecolor='w') plt.plot(depth, err_test_list, 'ro-', markeredgecolor='k', lw=2, label='测试集错误率') plt.plot(depth, err_train_list, 'go-', markeredgecolor='k', lw=2, label='训练集错误率') plt.xlabel('决策树深度', fontsize=13) plt.ylabel('错误率', fontsize=13) plt.legend(loc='lower left', fontsize=13) plt.title('决策树深度与过拟合', fontsize=15) plt.grid(b=True, ls=':', color='#606060') depth = np.arange(1, 15) err_train_list = [] err_test_list = [] clf = DecisionTreeClassifier(criterion='entropy') for d in depth: clf.set_params(max_depth=d) clf.fit(x_train, y_train) y_train_pred = clf.predict(x_train) err_train = 1-accuracy_score(y_train, y_train_pred) err_train_list.append(err_train) y_test_pred = clf.predict(x_test) err_test = 1-accuracy_score(y_test, y_test_pred) err_test_list.append(err_test) print(d, '测试集错误率:%.2f%%' % (100 * err_test)) plt.figure(facecolor='w') plt.plot(depth, err_test_list, 'ro-', markeredgecolor='k', lw=2, label='测试集错误率') plt.plot(depth, err_train_list, 'go-', markeredgecolor='k', lw=2, label='训练集错误率') plt.xlabel('决策树深度', fontsize=13) plt.ylabel('错误率', fontsize=13) plt.legend(loc='lower left', fontsize=13) plt.title('决策树深度与过拟合', fontsize=15) plt.grid(b=True, ls=':', color='#606060') plt.show()

2023-07-09 上传

import numpy as np import torch import torch.nn as nn import torch.nn.functional as F import matplotlib.pyplot as plt # 定义RBF神经网络的类 class RBFNetwork(nn.Module): def __init__(self, input_size, hidden_size, output_size): super(RBFNetwork, self).__init__() # 初始化输入层,隐含层,输出层的节点数 self.input_size = input_size self.hidden_size = hidden_size self.output_size = output_size # 初始化权重矩阵和偏置向量 self.W1 = nn.Parameter(torch.randn(input_size, hidden_size)) # 输入层到隐含层的权重矩阵 self.b1 = nn.Parameter(torch.randn(hidden_size)) # 隐含层的偏置向量 self.W2 = nn.Parameter(torch.randn(hidden_size, output_size)) # 隐含层到输出层的权重矩阵 self.b2 = nn.Parameter(torch.randn(output_size)) # 输出层的偏置向量 def forward(self,x): # 前向传播过程 x = torch.from_numpy(x).float() # 将输入向量转换为张量 x = x.view(-1, self.input_size) # 调整输入向量的形状,使其与权重矩阵相匹配 h = torch.exp(-torch.cdist(x, self.W1.t()) + self.b1) # 计算隐含层的输出值,使用高斯径向基函数作为激活函数 y = F.linear(h, self.W2.t(), self.b2) # 计算输出层的输出值,使用线性函数作为激活函数 return y #定义pid控制器 class Pid(): def __init__(self, exp_val, kp, ki, kd): self.KP = kp self.KI = ki self.KD = kd self.exp_val = exp_val self.now_val = 0 self.sum_err = 0 self.now_err = 0 self.last_err = 0 def cmd_pid(self): self.last_err = self.now_err self.now_err = self.exp_val - self.now_val self.sum_err += self.now_err self.now_val = self.KP * (self.exp_val - self.now_val) \ + self.KI * self.sum_err + self.KD * (self.now_err - self.last_err) return self.now_val def err_pid(self): self.last_err = self.now_err self.now_err = self.exp_val - self.now_val self.sum_err += self.now_err self.p_err = self.exp_val - self.now_val self.i_err = self.sum_err self.d_err = self.now_err - self.last_err self.now_val = self.KP * (self.exp_val - self.now_val) \ + self.KI * self.sum_err + self.KD * (self.now_err - self.last_err) return self.p_err, self.i_err, self.d_err rbf_net = RBFNetwork(3,10,4) pid_val = [] #对pid进行初始化,目标值是1000 ,p=0.1 ,i=0.15, d=0.1 A_Pid = Pid(1000, 0.1, 0.1, 0.1) # 然后循环100次把数存进数组中去 for i in range(0, 100): input_vector = np.array(A_Pid.err_pid()) output_vector = rbf_net(input_vector) output_vector = output_vector.reshape(4,1) A_Pid = Pid(1000, output_vector[0], output_vector[1], output_vector[2]) pid_val.append(A_Pid.cmd_pid())

2023-06-06 上传