国信长天单片机竞赛训练之超声波实验(四)

9. STM32——HC_SR04超声波测距 STM32——HC_SR04超声波测距HC_SR04实物图基本参数工作原理时序图超声波测距步骤1. 使能GPIO时钟、定时器时钟2. 配置GPIO引脚3.配置TIM定时器时钟4. 配置NVIC优先级5. 开启TIM4定时器6. 关闭TIM4定时器7. TIM4定时器中断服务函数8. 获取Echo时间9. 获取距离整合代码HC_SR04.cHC_SR04.husart.cusart.hmain.c测距完成 HC_SR04 实物图 基本参数 工作原理 时序图 超声波测距步骤 1. 使能GPIO时钟、 阅读详情

本次是第四次作业了,作业要求如下:


1.结合定时器知识,使用定时器1作为中断源,使用定时器0做计数器进行超声波测距,并在数码管上显示;

2.以第一种方式进行测距。当测试距离大于10cm,小于等于20cm时,蜂鸣器打开,继电器打开。大于20cm,小于40cm时,继电器打开,蜂鸣器关闭,当距离大于等于40cm时,继电器关闭;

 超声波的电气参数如下:

 

 本次作业用的是stc15f2k60s2.h,程序运行的频率设置为11.0592MHZ,实际上与12Mhz差别并不大(以我目前的水平感觉上可以兼容):

正如工作原理所说,至少要给10us的高电平,所以用了延时函数,延时12us,已经这里用到的定时器时钟是12T,至于1T和12T的时钟有什么区别,我找了找别人给出的解释:

标准51单片机是12T的,就是说12个时钟周期(晶振周期,例如12M的,周期是1/12M,单位秒),机器做一个指令周期,刚好就是1/12M*12=1uS,常见指令例如_nop_就是一个周期,刚好1uS,其他的大多多于一个周期,乘除法更多。所以如果计算指令时间可以这样算。

而现在51核的单片机工艺质量上去后,频率大大提高,增强型51有6T的,如果接12M的话,一个nop就只需要0.51uS,如果是STC的部分单片机1T的话,那只需要1/12uS。

单片机的晶振不是随便选,要看技术手册,看最高频率,看支持类型等等。一般12M,接串口的话11.0592M。如果是PIC,很多4M,8M。

不是越高越好,对很多不需要大量处理,只是控制的情况,为了增加可靠性,降低编程难度,降低功耗,往往可选用低频的,例如实时时钟的32768晶振。

故  计算nT单片机的指令周期公式为:  T   =   1/晶振周期*n

例如: 使用12M晶振的1T单片机的指令周期为:  T = 1 / 12 * 1 = 1 / 12 us

附上我本次工程的源码:

main.c

#include "sys.h"



unsigned int count=0;
u16 dis;
void main(){
	
	
	stop_all();
	EA=1;
	ET1=1;
	ET0=0;
	Timer1Init();//定时器1做中断源
	Timer0Init();//用于超声波的计算器初始化
	 
	while(1){
		
		if(count%100==0){//每150ms读取一次
			
		dis=get_dis();
		 judge(dis);
		}
		if(dis==999){

smg_show(9,0);
smg_show(9,1);
smg_show(9,2);
		}
		else {                   //正常显示
			
			if(dis>10&&dis<100){
				smg_show(0,0);
				smg_show(dis/10,1);
				smg_show(dis%10,2);
		}
		else if(dis>100){
			
			smg_show(dis/100,0);
			smg_show(dis/10%10,1);
			smg_show(dis%10,2);
		}
		else if(dis<10){
			smg_show(0,0);
			smg_show(0,1);
			 smg_show(dis,2);
	}
}
 
	
	 
	
	
}


 
}


void timer1() interrupt 3{
	
	count++;
	 
	
}

 

sys.h

#ifndef __SYS_H__
#define __SYS_H__

#include "stc15f2k60s2.h"
typedef unsigned char u8;
typedef unsigned int u16;
 
sbit Tx=P1^0;
sbit Rx=P1^1;
void stop_all();
void smg_show(unsigned char du,unsigned char wei);
void Timer1Init();
void Timer0Init();
void Delay12us();
void csb_start();
unsigned int get_dis();
void judge(u16 dis);
#endif

sys.c(各种函数的实现)

 
	#include "sys.h"
	
sbit buzzer=P0^6;
sbit rely=P0^4;
unsigned char  code smg_index[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0x7f,0xbf};

/*
关蜂鸣器,led,继电器,数码管段,位
*/


	void stop_all(){
	P2=P2&0x1f|0x80;
	P0=0xff;
	P2&=0x1f;
 
	P2=P2&0x1f|0xe0;
	P0=0;	
	P2&=0x1f;
	 
	P2=P2&0x1f|0xc0;
	P0=0;	
	P2&=0x1f;
	 
	P2=P2&0x1f|0xa0;	
	P04=0;
	P06=0;

	P2&=0x1f;
	
	
}  

/*
数码管显示

*/
 void smg_show(unsigned char du,unsigned char wei){
	 
	 
	 
	 
	 P2=P2&0x1f;
	P0=0xff;
	P2=(P2&0x1f) | 0xe0; 
	 
	  
	 
	  
	P2=P2&0x1f;
	P0=1<<wei;             //位选
	P2=(P2&0x1f)|0xc0;
	P2=P2&0x1f;
	
	P0=smg_index[du];    //段选
	P2=(P2&0x1f)|0xe0;
	P2=P2&0x1f;

 
	 
 }
 /*
 定时器1初始化
 */
 void Timer1Init(void)		//1000微秒@11.0592MHz
{
	AUXR |= 0x40;		//定时器时钟1T模式
	TMOD &= 0x0F;		//设置定时器模式
	TL1 = 0xCD;		//设置定时初值
	TH1 = 0xD4;		//设置定时初值
	TF1 = 0;		//清除TF1标志
	TR1 = 1;	//定时器1开始计时
	 
}
/*
延时用于超声波
*/
void Delay12us()		//@12.000MHz
{
	unsigned char i;

	
	i = 33;
	while (--i);
}

/*
定时器1用于超声波计数

*/
void Timer0Init(void)		//1微秒@11.0592MHz
{
	AUXR &= 0x7F;		//定时器时钟12T模式
	TMOD &= 0x0F;		 //设置为定时器模式
	TL0 = 0x00;		//设置定时初值
	TH0 = 0x00;		//设置定时初值
	TF0 = 0;		//清除TF0标志
	TR0 = 0;		//定时器关闭计时
}
void csb_start(void)
{
	u8 i=8;
	EA=0;
	while(i--)
	{
		Tx=1;
		Delay12us();
		Tx=0;
		Delay12us();
	}
	EA=1;
}

unsigned int get_dis(void)
{
	u16 dis;
	Rx=1;
	csb_start();
	TR0=1;
	while((Rx==1 && TF0==0));
	TR0=0;
	if(TF0==1)
	{
		dis=999;TF0=0;
		TH0=0;TL0=0;
	}
	else
	{
		dis=(TH0<<8)|TL0;
		TH0=0;TL0=0;
		dis=(dis*0.17)/10;
		if(dis <= 2 || dis >= 400)
			dis=999;
	}
	return dis;
}






/*
函数名称 judge()
当测试距离大于10cm,小于等于20cm时,蜂鸣器打开,继电器打开。
大于20cm,小于40cm时,继电器打开,蜂鸣器关闭,
当距离大于等于40cm时,继电器关闭;

*/


void judge(u16 dis){
	if(dis>10&&dis<=20){
		
		P2=P2&0x1f|0xa0;
		buzzer=1;rely=1;
		P2=0x1f;
		
	}
	else if(dis>20&&dis<40){
			P2=P2&0x1f|0xa0;
		rely=1;
		buzzer=0;
		P2=0x1f;
		
	}
	else if(dis>=40){
		
		P2=P2&0x1f|0xa0;
		rely=0;;
		buzzer=0;
		P2=0x1f;
	}
	
	
}



 

蓝桥杯单片机学习笔记01 下面分别对各个模块进行简单的说明。 阅读详情

相关推荐

大一也能冲国奖!蓝桥杯单片机(STC15F2K60S2)备赛保姆级时间规划与资料避坑指南

本文为大一学生提供蓝桥杯单片机(STC15F2K60S2)备赛的保姆级指南,涵盖三阶段递进式学习法、资源避坑技巧和时间管理策略。通过模块化训练和真题突破,帮助学生在有限时间内高效备赛,冲击国奖。重点解析STC15F2K60S2开发板的核心模块操作和常见失误点,提供实战技巧和评分要点。

weixin_42522374的博客 416

国信长天单片机竞赛训练之原理图讲解及常用外设原理(遗失的章节-零)

蓝桥杯单片机电子类基本模块使用,以鄙人之笔抛砖引玉~ 简单的说,锁存器就是一个大门,锁存器打开, 这时控制P0的电位变化,信号则被送进去,锁存器关闭,外界P0无论信号怎么变,一般来说只要该外设锁存器未打开,都不会对此外产生影响。(为什么说一般,嘿嘿,后面有个...

昊月光华的博客 1万+

STC15F2K60S2 1_1关闭蜂鸣器

译码器高三位P2^5,P2^6,P2^7,作为输入端,Y5作为输出口低电平,连接到74HC02或非门,或非门WR口与J13接地口连接为低电平,因此,两个输入端都为低电平,(先或后非) 输出高电平。锁存器LE口接入高电平,使P0能正常输入命令,控制蜂鸣器/继电器的关断与开通。或非门→HC573锁存器→ULN2003芯片→蜂鸣器/继电器。

weixin_69155552的博客 525

蓝桥杯国信长天单片机--超声波测距设计(十一)

蓝桥杯国信长天单片机--超神波测距设计(十一)

君莫笑的博客 1093

51单片机超声波测距【综合设计+答辩报告+源程序+流程图+演示】

使用51单片机和超声波测距模块实现超声波测距。

m0_57007304的博客 7797

关闭单片机有源蜂鸣器驱动及有效编程方法

总结起来,关闭有源蜂鸣器的基本思路是通过设置GPIO口的状态来控制驱动电路的输入信号。具体的实现方法可能因单片机型号和硬件电路的不同而有所差异,但核心的原理和思路是相似的。有源蜂鸣器通常由一个振荡器和驱动电路组成,振荡器产生频率,驱动电路将振荡器的信号放大并输出到蜂鸣器。请注意,上述代码是针对基于8051系列单片机的示例,如果您使用的是其他型号的单片机,或是其他类型的蜂鸣器驱动电路,请根据您的具体情况进行相应的修改。在上述代码中,我们假设有源蜂鸣器连接到单片机的P1.0口,使用了。

git_git523的博客 926

蓝桥杯单片机学习笔记(1)——国信长天CT107竞赛板简述

最近因为延期开学,一直呆在家里,有机会学习准备一下蓝桥杯的电子类单片机组的比赛,正好写点东西,将学习的过程记录一下。 这是第一篇学习笔记,我准备简单介绍一下竞赛使用的单片机开发板——CT107开发板。 1. 概述实验板组成部分 关于开发板的相关资料可以从蓝桥杯官网下载。 大赛使用的单片机是IAP15F2K61S2,是STC公司生产的15系列1T型单片机,在1T模式下比传统8051快8-12倍,内...

qq_42879429的博客 1万+

单片机:蜂鸣器发声和自动关闭一站式教程:(附赠如何控制声音大小和音调)软件编程+硬件原理+注意事项

#include"reg52.h" typedef unsigned char u8; typedef unsigned int u16; sbit BEEP=P2^5;//P2.5端口连接的是蜂鸣器 void delay_time(time_delay) { while(time_delay--); } void main() { u16 i=1000;//1000作为发声时间差不多 while(1) { while(i--) { ...

wo12369874的博客 8925

蓝桥杯国信长天单片机--硬件环境(一)

蓝桥杯国信长天单片机--硬件环境(一)

君莫笑的博客 3410

2023蓝桥杯单片机备赛全攻略:硬件细节与工程模板实战复盘

单片机作为嵌入式系统的核心,其开发不仅依赖代码逻辑,更考验对硬件细节与时序协议的理解。理解定时器中断调度、按键消抖、数码管动态扫描等基础机制,是构建可靠嵌入式应用的关键,也是各类电子设计竞赛的常见考点。在蓝桥杯单片机赛项中,官方竞赛板以STC15系列为核心,综合考察传感器读取、存储芯片通信与多外设协同工作。本文基于2023年完整参赛经历,梳理备赛路线、工程模板搭建、IO配置、矩阵键盘上拉电阻、DS18B20温度采集等高频踩坑点,并给出省赛与国赛现场排错表,帮助读者从零构建属于自己的模块化代码库,提升综合调试

weixin_29193359的博客 260

实战案例:用多智能体系统模拟房地产市场的架构设计

房地产市场是典型的复杂自适应系统:买方纠结“要不要上车”、卖方盘算“挂多少钱能快速成交”、中介忙着“撮合两边赚佣金”、政府琢磨“怎么调政策稳房价”——每一个参与者的微小决策,最终都会汇聚成“房价暴涨”“成交冰点”这样的宏观现象。传统的计量经济学模型(比如线性回归)假设“所有人都是理性人”,但现实中没人能算清所有变量——你可能因为“同事买了学区房”就跟风,也可能因为“怕失业”而放弃买房。这时候,多智能体系统(MAS)

移动开发前沿的博客 1122

蓝桥杯单片机竞赛:高效备考资料清单与四阶实战训练法

单片机设计与开发是嵌入式系统领域的基础与核心,其原理基于微控制器对硬件资源的直接操控与软件逻辑的精确调度。掌握单片机编程能力,对于理解计算机体系结构、培养底层硬件思维具有重要技术价值,广泛应用于智能控制、物联网终端、仪器仪表等场景。在蓝桥杯等权威竞赛中,高效备考尤为关键。本文聚焦【真题】与【模块化编程】两大核心,系统梳理了从历年真题研究、代码模板积累到原理图分析的全套资料使用方法,并规划了从基础夯实到系统集成的四阶段训练路径,旨在帮助参赛者构建完整的知识体系与实战能力,从而在竞赛中稳定发挥,实现从理论学习到

weixin_30439067的博客 377

UG/NX二次开发Siemens官方NXOPEN实例解析—1.3 BlockStyler/ExtrudewithPreview

随着工业智能化的不断发展,UG二次开发的需求越来越多,也吸引了大批的二开从业人员,本人作为一名资深IT从业者(10年+)也毅然加入二次开发大军。然而,和流行IT行业(互联网、金融、医疗等)相比,工业智能化的门槛显得更高一点,专业的工业软件,相对封闭的开发理念和更小的开发圈子,让刚进入二开的从业者有点举步维艰。边学边整理,希望通过这系列文章的整理能给二开的生态增添一叶绿。

MarcoPro的博客 1633

超声波模块驱动

超声波模块驱动 模块介绍 程序编写 思路哈:我打算程序运行一次发送一次触发信号,在程序开头,就不精确延时几个指令周期,然后用外部中断 来个中断图 使用中断0吧 再看看定时器,打算用定时器4(STC创新的,嘿嘿看看靠不靠谱) 我说呢,stc15w4k32s4不是单时钟周期吗,定时11.0592M晶振怎么弄,原来这里可以控制系统时钟分频。 ...

qq_40658890的博客 3760

医疗影像技术实战:如何用Python快速生成DRR图像(附完整代码)

本文详细介绍了如何使用Python实现数字重建放射影像的快速生成。通过实战代码,从基础光线投射算法到性能优化,逐步讲解DRR图像生成的核心原理与工程实践,帮助开发者掌握医疗影像处理的关键技术,赋能放射治疗规划与图像引导手术等临床工具开发。

k8l9m0n的博客 72

ABB机器人ModbusTCP通信实战:如何高效传输Float数据到PLC(附完整代码)

本文详细介绍了ABB机器人通过ModbusTCP协议高效传输Float数据到PLC的实战方法,包括底层逻辑解析、RAPID程序架构设计、PLC服务器配置及现场调试技巧。特别针对浮点数据传输中的字节顺序问题提供了解决方案,并附有完整代码示例,助力工程师快速实现工业自动化设备间的高精度数据交互。

weixin_30836759的博客 482

单片机期末大作业——超声波测距系统

这个是我的单片机期末大作业,本来设计了两个方案的,要是这个超声波测距做不出来就做一个多功能日历秒表计时系统,最后那个日历秒表计时系统的代码不小心没有保存,只留下了一个protues原理图,这里主要介绍的是我的超声波测距系统,主要是参考了很多其他资料最终做了一个超声波测距系统(也就是模拟了倒车雷达的功能) 软件上用的是protues8.6和Keil.C51.V9.01+win10 这里后面放一个资源链接吧 protues原理图是我绘制的,省略了晶振电路,但因为软件问题不具备仿真功能,只能描述大致的工作流程和原

monster663的博客 4794

24年电赛H题 | 想要小车走直线,正在调角度环,但不知道怎么把角度偏航角偏差转化成电机速度输出?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 1313

蓝桥杯单片机超声波

1.编程思想: (1)打开定时器开始定时 (2)发射超声波40KHz(每个电平维持100个NOP,一共8周期脉冲) (3)检测是否有RX的情况,若RX == 0则接收到了反馈的波 (4)停止定时器,读时间 (5)计算距离 2.代码: #include "ultrasonic.h" sbit TX = P1 ^ 0; // 发射引脚 sbit RX = P1 ^ 1; // 接收引脚 void Timer0Init(void) // 定时长度12us @12.000MHz { AUXR &amp

weixin_46056321的博客 2356

创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—ISP图像处理开发案例

创龙科技研发的 TL3588-EVM 评估板具备强大视频处理能力,可满足多场景视频开发需求。为助力开发者快速上手,本文整理 7 个实用视频开发案例,涵盖从采集到显示的全流程,详细说明各案例的硬件连接、参数配置与代码解析,帮助开发者高效实现评估板视频相关功能开发与调试。

创龙,嵌入式一体化解决方案商 208

小米汽车车载多摄像头视频链路深度解析 | MAX96792/MAX96724/MAX96781 实战分享

通过合理的输入输出规划 + 虚拟通道管理 + 加串行策略,可以在成本和性能之间取得最佳平衡,这就是多摄像头系统设计的核心精髓。

weixin_43199439的博客 1547

蓝桥杯------自动售水机

单片机蓝桥杯

m0_56279210的博客 1512

华为OD机试双机位C卷-简单的解压缩算法(C/C++/Py/Java/Js/Go)

华为OD机试(机考)双机位C卷 【简单的解压缩算法】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD真题【简单的解压缩算法】。

qq_45776114的博客 475

14-超声波测量距离与定时器T1的编程

超声波测距 文章目录超声波测距1. 测量原理2. 软件编程2.1 框架式编程结构搭建2.2 初始化函数2.2.1 初始化函数框架2.2.2 定时器参数设置2.3 定时器1中断服务函数2.3.1 测试1:产生中断,P30翻转2.4 超声波服务函数 1. 测量原理 中断计数即检测距离 检测高电平用P3.3脚 P3.3也是外部输入中断INT1脚,但本次实验与外部输入中断无关,仅利用P3.3引脚启停定时器 8位定时器不分频的满值是:256 * 0.033 = 8.5333us > 5.78us 因此满足测

wcsq0523的博客 1369

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

蓝桥杯-单片机组基础2——继电器与蜂鸣器的设置(附小蜜蜂课程代码)

通过此次练习将74HC138译码器熟练掌握,并可以随心所欲的控制继电器、LED、数码管等与译码器相连的硬件电路。 本文着重介绍 继电器与蜂鸣器 的使用,其余硬件资源的调用可阅读本专栏下的其他文章。

qq_43323677的博客 2774

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

蓝桥杯国信长天单片机--程序下载(三)

蓝桥杯国信长天单片机--程序下载(三)

君莫笑的博客 3182

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

上一篇: 国信长天单片机竞赛训练之DS18B20温度报警实验(三)
下一篇: 国信长天单片机竞赛训练之通过iic光敏,电位器采样(五)
昊月光华
博客等级 码龄6年 340粉丝 158原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值