嵌入式系统课程设计报告书
- 格式:doc
- 大小:997.50 KB
- 文档页数:18
目录前言 (2)一、U-Boot分析 (3)1、引导程序U-Boot第一阶段分析 (3)2、引导过程 (4)3、程序流程图 (8)二、程序设计 (8)三、心得体会 (9)前言ARM嵌入式处理器已被广泛应用于消费电子厂品、无线通信、网络通信和工业控制等领域。
在嵌入式操作系统中,Linux、Vxworks、WinCE三足鼎立,其中Linux由于其开源性、稳定性、安全性、可裁剪性更是一支独秀。
在嵌入式系统中,如何实现在ARM平台下Linux操作系统的引导工作是嵌入式技术开发的重要环节。
BootLoader就是在操作系统内核运行之前运行的一段小程序。
通过这段小程序,我们可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。
在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader 来完成。
比如在一个基于ARM7TDMI core的嵌入式系统中,系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。
一、U-Boot分析嵌入式Linux系统中常用的Bootloader引导程序有U-Boot,redboot, blob 和vivii等,其中U-Boot遵循GPL条款的开放源码项目,功能最为强大,U-Boot 对PowerPC系列处理器支持最丰富,同时还支持MIPS,x86,ARM,XScale等诸多常用系列的处理器;U-Boot引导程序分为Stage1和Stage2量大部分,Stage1中主要包括设备初始化、中断设置、时间设置和储存器初始化等工作,并且采用汇编语言实现,而一些通用功能大多采用C语言实现,放在Stage2中。
1、引导程序U-Boot第一阶段分析Stage1的代码在CPU/arm920t/start.s中定义,它包括从系统上电后在0x00000000地址开始执行的部分。
嵌入式系统课程设计报告一、教学目标本课程的教学目标是使学生掌握嵌入式系统的基本概念、原理和设计方法,能够运用嵌入式系统进行实际项目的开发和实现。
具体来说,知识目标包括了解嵌入式系统的定义、特点、分类和应用领域;掌握嵌入式系统的硬件和软件组成及工作原理;熟悉嵌入式操作系统的基本概念和常用操作系统。
技能目标包括能够使用嵌入式系统开发工具和平台进行程序设计和调试;具备嵌入式系统硬件电路的设计和调试能力;能够运用嵌入式系统进行实际项目的开发和实现。
情感态度价值观目标包括培养学生的创新意识和团队合作精神,提高学生解决实际问题的能力和责任感。
二、教学内容根据课程目标,本课程的教学内容主要包括嵌入式系统的基本概念、原理和设计方法。
具体包括以下几个方面:1. 嵌入式系统的定义、特点、分类和应用领域;2. 嵌入式系统的硬件组成,如处理器、存储器、输入输出接口等;3. 嵌入式系统的软件组成,如固件、操作系统、应用程序等;4. 嵌入式操作系统的基本概念和常用操作系统;5. 嵌入式系统的设计方法和开发流程;6. 嵌入式系统硬件电路的设计和调试方法;7. 嵌入式系统在实际项目中的应用和案例分析。
三、教学方法为了实现课程目标,本课程将采用多种教学方法,包括讲授法、讨论法、案例分析法和实验法等。
通过多样化的教学方法,激发学生的学习兴趣和主动性。
具体教学方法如下:1. 讲授法:通过讲解嵌入式系统的基本概念、原理和设计方法,使学生掌握相关知识;2. 讨论法:通过分组讨论和课堂讨论,培养学生的思考能力和团队合作精神;3. 案例分析法:通过分析实际项目案例,使学生了解嵌入式系统在实际中的应用和设计方法;4. 实验法:通过实验操作和调试,锻炼学生的动手能力和实际问题解决能力。
四、教学资源为了支持教学内容和教学方法的实施,本课程将选择和准备以下教学资源:1.教材:选用权威、实用的嵌入式系统教材,为学生提供系统的学习资料;2. 参考书:推荐学生阅读相关参考书籍,丰富学生的知识体系;3. 多媒体资料:制作课件、教案等多媒体教学资料,提高课堂教学效果;4. 实验设备:准备嵌入式系统开发板、仿真器等实验设备,为学生提供实践操作的机会。
嵌入式系统 课程设计报告设计任务一 十字路口交通灯控制一、设计目的:1.了解基于ARM7核的LPC2106的管脚功能和特点,掌握I/O 控制寄存器的设置方法; 2.掌握ARM7应用系统编程开发方法,能用C 语言编写应用程序; 3.熟练掌握ADS1.2软件的使用以及PROTEUS 仿真调试的方法;二、具体任务:1.采用PROTEUS 完成十字路口交通灯控制的硬件电路设计,要求单片机选型为飞利浦公司的LPC2106,东西南北方向分别设置红黄绿3个指示灯,东西方向和南北方向各用1个数码管显示通行时间;2.用ADS1.2编写C 语言应用程序,完成十字路口交通灯控制;3.采用PROTEUS 将应用程序装载在LPC2106中,进行仿真验证。
要求东西方向和南北方向的数码管显示通行时间并倒计时,可以设置成一样,例如都是9秒倒计时;每当倒计时时间到,完成红黄绿指示灯的状态切换,模拟实现十字路口的交通灯管理控制。
三、硬件电路设计。
(参考下图完成硬件电路设计,用屏幕抓图的方式将自己设计的PROTEUS电路图粘贴在下面,并用文字对所设计的电路功能、原理进一步说明)附图:硬件电路说明:左边是LPC2106,中间由上下两个LED数码管连接在总线上组成,右边由12个LED灯模拟十字路口。
LPC2106的P0.0~P0.9分别输出接数码管的a,b,c,d,e,f,g以及两个位选位;P0.10~P0.15输出分别接南北和东西方向的LED。
四、源程序。
(只将C语言应用程序附在后面,其它项目文档不要提供,C语言应用程序要有一定的注释说明)源程序:#include "config.h"#define unchar unsigned charchar LED[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0-9数码段码表void delay(uint32 n){ //定义延时函数while(n--);}int main(void){ int32 i,g,s;PINSEL0=0x00000000; //把I/O口都选用第一功能PINSEL1=0x00000000;IODIR=0x0000ffff; //P0.0~P0.15设置为输出引脚while(1){int8 n=30; //定义变量n,用于数码管显示延时for(i=31;i>20;i--) //for循环用于设定东西方向绿灯时间为10秒{g=i%10; //分离出个位、十位s=i/10;while(n--) //while函数动态扫描的数码管显示延时{IOSET=0x00008400|0x00000200|LED[g];//南北亮红灯,东西亮绿灯,数码管个位显示数字delay(2000); //调用延时函数IOCLR=~0x00008400; //数码管显示清零,灯保持亮的状态IOSET=0x00008400|0x00000100|LED[s];//南北亮红灯,东西亮绿灯,数码管十位显示数字delay(2000); //调用延时函数IOCLR=~0x00008400; //数码管显示清零,灯保持亮的状态}}for(i=20;i>15;i--) //for循环用于设定东西方向黄灯灯时间为5秒{g=i%10; //分离出个位、十位s=i/10;while(n--){IOCLR=0x00008400; //显示清零,等待下一状态显示IOSET=0x00004400|0x00000200|LED[g];//南北亮红灯,东西亮黄灯,数码管个位显示数字delay(1000); //延时程序IOCLR=0x00004000|0x000003ff; //熄灭黄灯、清零数码管显示IOSET=0x00004400|0x00000100|LED[s];//南北亮红灯,东西亮黄灯,数码管十位显示数字delay(1000); //延时程序IOCLR=0x00004000|0x000003ff; //熄灭黄灯、清零数码管显示}delay(300000); //黄灯和数码管闪烁延时时间}for(i=15;i>5;i--){g=i%10;s=i/10;while(n--){IOSET=0x00003000|0x00000200|LED[g];//南北亮绿灯,东西亮红灯,数码管个位显示数字delay(2000); //延时程序IOCLR=~0x00003000; //数码管显示清零,灯保持亮的状态IOSET=0x00003000|0x00000100|LED[s];//南北亮绿灯,东西亮红灯,数码管十位显示数字delay(2000);IOCLR=~0x00003000; //数码管显示清零,灯保持亮的状态}}for(i=5;i>0;i--){g=i%10;s=i/10;while(n--){IOCLR=0x00003000; //显示清零,等待下一状态显示IOSET=0x00002800|0x00000200|LED[g];//南北亮黄灯,东西亮红灯,数码管个位显示数字delay(1000);IOCLR=0x00000800|0x000003FF; //熄灭黄灯、清零数码管显示IOSET=0x00002800|0x00000100|LED[s];//南北亮黄灯,东西亮红灯,数码管十位显示数字delay(1000);IOCLR=0x00000800|0x000003FF; //熄灭黄灯、清零数码管显示}delay(300000); //黄灯和数码管闪烁延时时间}}}五、仿真效果。
嵌入式系统设计课设报告福州大学《嵌入式系统设计课设》报告书题目:基于28027的虚拟系统姓名:学号:学院:电气工程与自动化学院专业:电气工程与自动化年级:起讫日期:指导教师:目录1、课程设计目的 (1)2、课程设计题目和实现目标 (1)3、设计方案 (1)4、程序流程图 (1)5、程序代码 (1)6、调试总结 (1)7、设计心得体会 (1)8、参考文献 (1)1、课程设计目的《嵌入式系统设计课设》是与《嵌入式系统设计》课程相配套的实践教学环节。
《嵌入式系统设计》是一门实践性很强的专业基础课,经过课程设计,达到进一步理解嵌入式芯片的硬件、软件和综合应用方面的知识,培养实践能力和综合应用能力,开拓学习积极性、主动性,学会灵活运用已经学过的知识,并能不断接受新的知识。
培养大胆创造创造的设计理念,为今后就业打下良好的基础。
经过课程设计,掌握以下知识和技能:1.嵌入式应用系统的总体方案的设计;2.嵌入式应用系统的硬件设计;3.嵌入式应用系统的软件程序设计;4.嵌入式开发系统的应用和调试能力2、课程设计题目和实现目标课程设计题目:基于28027的虚拟系统任务要求:A、利用28027的片上温度传感器,检测当前温度;B、经过PWM过零中断作为温度检测A/D的触发,在PWM中断时完成温度采样和下一周期PWM占空比的修正;PWM频率为1K;C、利用按键作为温度给定;温度给定变化从10度到40度。
D、当检测温度超过给定时,PWM占空比增减小(减小幅度自己设定);当检测温度小于给定时,PWM占空比增大(增大幅度自己设定);E、把PWM输出接到捕获口,利用捕获口测量当前PWM的占空比;F、把E测量的PWM占空比经过串口通信发送给上位机;3、设计方案-----介绍系统实现方案和系统原理图①系统实现方案:任务A:利用ADC模块通道A5获取当前环境温度。
任务B:PWM过零触发ADC模块,在PWM中断服务函数中,将当前环境温度和按键设定温度进行比较,并按照任务D的要求修订PWM占空比。
嵌入式系统设计报告系(院):计算机科学学院专业班级:计科11201 *名:**学号: ********* 指导教师:**设计时间:2015.6.22 - 2015.7.3设计地点:4教硬件实验室目录一、课程设计的目的 (2)1.1设计目的 (2)1.2任务介绍 (2)二、实验及开发环境 (3)2.1 实验室环境 (3)2.2 个人计算机课后开发环境 (3)三、总体设计 (3)四、详细设计 (4)4.1 Windows CE系统编译与安装 (4)4.2 编程驱动LED和数码管显示正确的信息 (7)4.3 编程驱动电机运转 (8)4.4 个人设计小程序 (10)五、课程设计小结 (17)5.1 设计小结 (17)一、课程设计的目的1.1设计目的本次课程设计的目的是了解嵌入式系统、嵌入式操作系统,掌握基于嵌入式系统的应用开发基本知识。
了解嵌入式操作系统Windows CE的特点,Windows CE的主要模块及各自的功能。
掌握嵌入式操作系统Windows CE 的配置、编译、移植方法。
了解Visual Studio .NET开发环境,掌握基于Windows CE平台的应用程序设计方法。
1.2任务介绍以下任务需基于实验室的XSBase270开发平台完成1.嵌入式操作系统Windows CE平台的搭建使用Platform Builder编译出自己的Windows CE 5.0操作系统,然后根据实验提供的EBOOT引导程序将编译出的Windows CE 5.0系统安装(刷入)到实验平台。
2.IO接口控制-七段数码管的LED显示控制程序了解Windows CE下I/O访问机制的原理。
了解LED和七段数码管的显示和控制原理。
掌握Windows CE下访问硬件I/O寄存器的方法。
3.IO接口控制-点击控制设计了解Window CE下I/O访问机制和原理。
掌握Windows CE下访问硬件I/O寄存器的方法,以及使用Visual Studio .NET对硬件设备编程的一般方法。
嵌入式系统课程设计报告指导教师:学生班级:学生姓名:学号:班内序号: 08课设日期: 2011/7/6~2011/7/10目录一、课设目的 (3)二、设计要求 (3)2.1 功能要求 (3)2.2 设计所需设备与工具 (3)三、课设内容 (3)四、课设环境 (4)4.1 Windows CE的特点 (4)4.2 Windows CE主要模块及其功能 (4)4.3 Platform Builder开发工具介绍 (5)五、设计步骤 (7)5.1安装XSBase270 的BSP (7)5.2实验平台的配置 (7)5.3超级终端的设置 (12)5.4使用jflash命令烧写Eboot (13)5.5 Platform Builder 配置 (14)5.6 ActiveSync的使用 (15)六、主要代码分析及结果 (18)七、总结 (20)一、课设目的①了解嵌入式系统、嵌入式操作系统,掌握基于嵌入式系统的应用开发基本知识。
②了解嵌入式操作系统Windows CE的特点,Windows CE的主要模块及各自的功能。
掌握嵌入式操作系统Windows CE的配置、编译、移植方法。
③了解Visual 开发环境,掌握基于Windows CE平台的应用程序设计方法。
二、设计要求2.1 功能要求⑴安装XSBase270实验开发平台的BSP;⑵在嵌入式操作系统Windows CE平台定制的集成开发环境Platform Builder(PB)上定制内核,编译和调试并生成内核映像文件,下载并运行编译好的Windows CE系统;⑶在中编写对 XSBase270目标板上LED和七段数码管的控制程序,下载运行程序。
2.2 设计所需设备与工具①装有Platform Builder、Visual 开发环境,有并口、串口和USB接口的PC 机一台。
② XSBase270 实验开发平台一套。
三、课设内容㈠嵌入式操作系统Windows CE平台的搭建安装XSBase270实验开发平台的BSP。
嵌入式系统课程设计报告一:实验名称:基于NIOSII的嵌入式系统设计二:实验目的:1.学习如何创建SOPC Builder模块并完成Quartus设置;2.创建NIOS IDE开发环境并在SOPC Builder上建立NIOSII CPU软核;3.学习LCD1602的工作原理和编程实现硬件上的显示控制。
三:实验内容:为了熟悉SOPC的基本开发流程和SOPC Builder模块的建立,本实验要完成的任务就是设计一个最简单的系统(主芯片为Cyclone II系列的EP2C35F672C8),系统中包括Nios II CPU、作为标准输入/输出的JTAG UART以及存储执行代码SRAM。
通过SOPC Builder对系统进行编译,然后通过Quartus II对系统进行二次编译,并把产生的FPGA配置文件通过USB 下载电缆下载到实验箱上,这时便完成了本实验中的硬件开发。
接下来的工作是软件协同开发——在Nios II IDE中编写一个最简单的C代码,对其编译后,通过USB下载电缆下载到FPGA中执行,执行的结果就是在试验箱上的LCD1602上显示信息工程专业简介——“”。
本实验是根据《嵌入式系统设计》实验六来设计的LCD1602程序:#include<reg51.h>sbit RS=P2^0; //端口根据CPU上的端口可进行变换;sbit EN=P2^1;sbit W1=P2^2;sbit W2=P2^3;sbit CS=P3^2;unsigned char code table1[]={" xingxigongcheng"};unsigned char code table2[]={" jianjie"};void delay(int z) //延时程序//{for(x=z;x>0;x--)for(y=110;y>0;y--);}void write_com(unsigned char com) //将指令写入1602// {RS=0;P0=com;delay(4); //检查1602是否忙;延时带听忙信号//W1=1;EN=1;delay(4); //检查1602是否忙;延时带听忙信号// EN=0;}void write_dat(unsigned char dat){RS=1;P0=dat;delay(5); //检查1602是否忙;延时带听忙信号// W1=1;EN=1;delay(5); //检查1602是否忙;延时带听忙信号// EN=0;}void LCD_CSH(){unsigned char t;EN=0;write_com(0x38);write_com(0x01);write_com(0x0c);write_com(0x06);write_com(0x80);for(t=0;t<16;t++){write_dat(table1[t]);delay(50);}write_com(0x80+0x40);for(t=0;t<16;t++){write_dat(table2[t]);delay(50);}}void main(){W1=0;W2=0;LCD_CSH();while(1);}四、实验总结:通过实验已经对SOPC Builder模块的创建,在NIOS IDE开发环境下编译程序并在SOPC Builder上建立NIOSII CPU软核的操作有了基本掌握;并且大概了解了LCD1602的工作原理和显示控制,能够通过编程实现LCD1602的基本显示功能;同时了熟悉SOPC 的基本开发流程,还需不断的通过开发来慢慢熟悉和掌握的OPC开发。
嵌入式课程设计报告嵌入式课程设计报告一、设计目的和背景嵌入式系统在现代社会中起着越来越重要的作用,它们广泛应用于各个领域,如消费电子、汽车、医疗保健等。
本次课程设计旨在让学生深入了解嵌入式系统的设计原理和方法,并通过实践项目,提高学生的实际操作能力。
二、设计内容和方法本次课程设计的内容是一个智能家居控制系统。
该系统能够通过无线网络实现对家居设备的远程控制,如灯光、温度、窗帘等。
设计方法主要包括硬件设计和软件设计两个方面。
硬件设计部分主要包括选择合适的微控制器作为控制核心,选取各类传感器和执行器,以及设计电路板进行组装。
在此基础上,还需设计无线通信模块,以实现远程控制的功能。
软件设计部分主要包括嵌入式系统的编程和通信协议的设计。
编程部分可采用C语言或其他嵌入式开发语言,通过编写相应的控制程序实现各个功能模块的控制。
通信协议设计部分需要考虑数据传输的安全性和稳定性,可采用常见的无线通信协议,如Wi-Fi、蓝牙等。
三、设计结果和实现效果通过本次课程设计,我成功实现了一个智能家居控制系统的功能。
通过手机APP或电脑端软件,我可以远程实现对家居设备的控制,如开关灯光、调节温度、控制窗帘等。
同时,该系统还具备一定的安全性,用户可以通过身份验证来确保系统的安全性。
四、设计过程中的问题和解决方案在设计过程中,我遇到了一些问题,如硬件的选型和软件的编写。
对于硬件的选型,我需要根据系统的需求和预算来选择合适的微控制器和传感器。
对于软件的编写,我需要理解各个功能模块的工作原理,并编写相应的控制程序。
我通过查阅资料和与同学、老师的交流解决了这些问题。
通过分析和比较不同的硬件和软件方案,我最终选择了适合我项目需求的方案。
五、设计总结和展望本次课程设计使我对嵌入式系统的设计有了更深入的了解,提高了我的实际操作能力。
通过实践项目,我学会了如何选择合适的硬件和软件方案,并成功实现了一个功能完备的智能家居控制系统。
未来,我希望能继续深入研究嵌入式系统的设计,探索更多有意义的项目。
嵌入式系统课程设计报告课程名称:嵌入式系统课程设计项目名称:基于ARM实现MP3音乐盒专业:电子科学与技术一、设计内容基本功能:预存四首歌曲,实现循环播放;每个按键对应一首歌曲。
拓展功能:通过按键简单演奏音乐,类似钢琴;实现两个模式的切换,切歌模式和音量加减模式。
二、设计思路基础功能:将音频数据存储在SD卡中,使用FATFS文件系统进行数据的读写,通过SPI2总线将数据传到内核。
内核再将数据通过SPI1总线传送到音频解码模块VS1053,输入的数据(即比特流数据)被解码后送到DAC发出声音。
将音乐存储在SD卡内,通过文件的地址来判别将要播放哪一首音乐,通过地址的递增和循环来实现音乐的自动循环播放。
按键对曲目的控制,可通过键盘扫描函数,判断哪一个键被按下,使键盘扫描函数返回不同的返回值,实现对文件地址的控制。
将此返回值设置为全局变量,可实现在音乐播放中曲目的切换。
另外,我们还利用解码模块实现对音量的控制,使用按键控制音量的提高或降低。
使用SPI1总线将TFT显示屏连接到内核,显示按键功能、当前曲目、当前模式等信息。
由于开发板只有5个按键,按键数量有限,需要对按键实现曲目切换和音量功能的复用。
我们小组设置了两种模式,切歌模式和音量模式,并定义左键为模式切换键,实现不同模式的选择和按键的复用。
拓展功能:基本思路是通过定时器中断来产生一定频率的50% 空占比的脉宽调制波,用此脉宽调制波激励扬声器,从而使扬声器发出一定频率的声音。
所以只要将不同按键的中断子程序设置为对定时器进行不同数据的配置,即可实现不同按键与不同扬声器发生频率的对应。
然后使一个按键的按下与松开均进入中断,且分别实现开启(扬声器发声)与关闭(扬声器不发声)定时器的功能,从而使课题的附加功能表现地更自然。
三、硬件配置基础功能:(1)SD卡:存储音频数据配置方法:根据开发板原理图,配置方法如下图所示(2)VS1053解码芯片:将输入的比特流解码后送入DAC配置方法:音频解码模块与开发板接线方式://5V---5V//GND--GND//XRST--PG8//MISO--PA6//MOSI--PA7//SCLK--PA5//DREQ--PG7//XCS--PE6//XDCS--PG6(3)TFT显示屏(4)外放音响拓展功能:PC机一台;P4 2.06CPU/40GHD/512M RAM以上配置,STM32F103 开发板一套;外接扬声器一个四、设计步骤或流程图基础功能:1.初始化包括单片机本身的初始化和VS1053的初始化(1)初始化STM32 的IO 口和SPI;(2)VS1053 进行存储器测试;(3)初始化设置音频输出,设置音频输入要设置成VS1053;(4)VS1053 进行正弦波测试;(5)VS1053 进行一些基本设置,包括音效模式等。
学 生 课 程 实 践 能 力 考 查题目:温度按键设定、显示、报警系统设计课程名称:嵌入式系统开发 专业班级: 学生学号: 学生姓名:考查地点: 考查时长: 4小时 所属院部: 指导教师:2017 — 2018学年 第 2 学期金陵科技学院教务成绩2017-2018学年第2学期《嵌入式系统开发》实践能力考核任课教师签名:日期:温度按键设定、显示、报警系统设计要求:1、读取DS18B20温度,在液晶上实时显示,并显示上、下限,初始值上限32,下限26。
2、通过按键可以设置环境温度的上限和下限,WK_UP键按下调节上限,再按下调节下限,再按下调节上限……KEY1按下加1;KEY0按下减1,根据上限和下限判断当前温度有没有超出范围。
3、当温度超过上限,LED1隔1秒亮一次。
超过下限,LED2隔1秒亮一次。
(也可自定义报警方式)4、串口波特率一律用9600bps。
液晶显示的信息:STM32 testname: xxxxxxxxxMaximum is 32C,Minimum is 26 CThe temperature is 29 C,now!(xxxxx是自己的名字拼音)目录:第一章.系统要求设计要求设计方案第二章.硬件设计开发板原理图DS18B20模块按键模块LCD显示模块LED 模块第三章.软件设计程序流程图程序部分代码主函数、LED 函数温度代码键盘代码第四章.实物效果图第五章.课程总结第一章.设计要求及方案设计要求1、读取DS18B20温度,在液晶上实时显示,并显示上、下限,初始值上限32,下限26。
2、通过按键可以设置环境温度的上限和下限,WK_UP键按下调节上限,再按下调节下限,再按下调节上限……KEY1按下加1;KEY0按下减1,根据上限和下限判断当前温度有没有超出范围。
3、当温度超过上限,LED1隔1秒亮一次。
超过下限,LED2隔1秒亮一次。
(也可自定义报警方式)4、串口波特率一律用9600bps。
液晶显示的信息:STM32 testname: xxxxxxxxxMaximum is 32C,Minimum is 26 CThe temperature is 29 C,now!(xxxxx是自己的名字拼音)设计方案本次课程设计的要求是使用STM32F103设计一个温度测控系统,ALIENTEK MiniSTM32 V3 版开发板选择的是 STM32F103RCT6 作为 MCU,它拥有的资源包括:48KB SRAM、256KB FLASH、2 个基本定时器、4 个通用定时器、2 个高级定时器、2 个 DMA 控制器(共 12 个通道)、3 个 SPI、2 个 IIC、5 个串口、1 个 USB、1 个 CAN、3 个 12 位 ADC、1 个 12 位 DAC、1 个SDIO 接口及 51 个通用 IO 口。
在本课程中使用了以下部分来完成课程设计的要求:1.应用DS18B20进行温度的检测。
2.应用按键模块进行外部的上下限数值设定。
3.应用LED的闪烁进行报警。
4.应用LCD显示实时温度、上下限等信息。
第二章.硬件设计 DS18B20设计按键模块ALIENTEK MiniSTM32 开发板总共有 3 个按键,其原理图如下: LCD显示模块LED 模块其中 PWR 是开发板电源指示灯,为蓝色。
LED0 和 LED1 分别接在 PA8 和 PD2 上,PA8还可以通过 TIM1 的通道 1 的 PWM 输出来控制 DS0 的亮度。
为了方便大家判断,我们选择了 DS0 为红色,DS1 为绿色的 LED 灯。
第三章.软件设计程序流程图温度显示及报警模块按键设定模块程序部分代码主函数、#include ""#include ""#include ""#include ""#include ""#include ""#include ""#include <>#include <>#include <>int temp_low = 22;int temp_high = 32;int zanshi_low=0;int zanshi_hign=0;void TIM3_Int_Init(u16 arr,u16 psc){TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;NVIC_InitTypeDef NVIC_InitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); C now ");LCD_ShowChar(0+25*8,110,',',16,0);LCD_ShowChar(0+29*8,110,'!',16,0);while (1){POINT_COLOR = BLUE; 1dC", temperature / 10, temperature % 10);LCD_ShowString(0, 110, 200, 16, 16, shuzu);}delay_ms(10);//判断温度zanshi_low=temp_low*10;zanshi_hign=temp_high*10;if((temperature<zanshi_low)||(temperature>zanshi_hign)){if(temperature<zanshi_low){flag=1;printf("chaoxiaxian");}if(temperature>zanshi_hign){flag=2;printf("chaoshangxian");}}else{flag=0;LED0=1; //正常情况灯不亮LED1=1;}//获取温度时间控制tt++;//浏览开关KEY_Init();delay_ms(10);keyvalue=KEY_Scan(0);if(keyvalue!=0){if(keyvalue==3){gaibianshui=(gaibianshui+1)%3;}if(gaibianshui==1) //改变上限{if(keyvalue==2) //key1按下{temp_high++;memset(shuzu, 0, 20);sprintf(shuzu, "Max is %2d C,Min is %2d C", temp_high, temp_low);LCD_ShowString(0, 90, 200, 16, 16, shuzu);}if(keyvalue==1) //key0按下{temp_high--;memset(shuzu, 0, 20);sprintf(shuzu, "Max is %2d C,Min is %2d C", temp_high, temp_low);LCD_ShowString(0, 90, 200, 16, 16, shuzu);}}if(gaibianshui==2) //改变上限{if(keyvalue==2) //key1按下{temp_low++;memset(shuzu, 0, 20);sprintf(shuzu, "Max is %2d C,Min is %2d C", temp_high, temp_low);LCD_ShowString(0, 90, 200, 16, 16, shuzu);}if(keyvalue==1) //key0按下{temp_low--;memset(shuzu, 0, 20);sprintf(shuzu, "Max is %2d C,Min is %2d C", temp_high, temp_low);LCD_ShowString(0, 90, 200, 16, 16, shuzu);}}keyvalue=0;}}}void TIM3_IRQHandler(void) //TIM3中断{if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源{TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx的中断待处理位:TIM 中断源//温度不正常处理灯if(flag==1){LED0 = !LED0;}if(flag==2){LED1 = !LED1;}}}LED 函数#include ""void LED_Init(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE); //使能PA,PD端口时钟= GPIO_Pin_8; //LED0--> 端口配置= GPIO_Mode_Out_PP; //推挽输出= GPIO_Speed_50MHz; //IO口速度为50MHzGPIO_Init(GPIOA, &GPIO_InitStructure); //根据设定参数初始化GPIO_SetBits(GPIOA,GPIO_Pin_8); // 输出高= GPIO_Pin_2; //LED1--> 端口配置, 推挽输出GPIO_Init(GPIOD, &GPIO_InitStructure); //推挽输出,IO口速度为50MHzGPIO_SetBits(GPIOD,GPIO_Pin_2); // 输出高}温度代码#include ""#include ""void DS18B20_Rst(void){DS18B20_IO_OUT(); //SET PA0 OUTPUTDS18B20_DQ_OUT=0; //拉低DQdelay_us(750); //拉低750usDS18B20_DQ_OUT=1; //DQ=1delay_us(15); //15US}//等待DS18B20的回应//返回1:未检测到DS18B20的存在//返回0:存在u8 DS18B20_Check(void){u8 retry=0;DS18B20_IO_IN();//SET PA0 INPUTwhile (DS18B20_DQ_IN&&retry<200){retry++;delay_us(1);};if(retry>=200)return 1;else retry=0;while (!DS18B20_DQ_IN&&retry<240){retry++;delay_us(1);};if(retry>=240)return 1;return 0;}//从DS18B20读取一个位//返回值:1/0u8 DS18B20_Read_Bit(void) // read one bit {u8 data;DS18B20_IO_OUT();//SET PA0 OUTPUTDS18B20_DQ_OUT=0;delay_us(2);DS18B20_DQ_OUT=1;DS18B20_IO_IN();//SET PA0 INPUTdelay_us(12);if(DS18B20_DQ_IN)data=1;else data=0;delay_us(50);return data;}//从DS18B20读取一个字节//返回值:读到的数据u8 DS18B20_Read_Byte(void) // read one byte{u8 i,j,dat;dat=0;for (i=1;i<=8;i++){j=DS18B20_Read_Bit();dat=(j<<7)|(dat>>1);}return dat;}//写一个字节到DS18B20//dat:要写入的字节void DS18B20_Write_Byte(u8 dat){u8 j;u8 testb;DS18B20_IO_OUT();//SET PA0 OUTPUT;for (j=1;j<=8;j++){testb=dat&0x01;dat=dat>>1;if (testb){DS18B20_DQ_OUT=0;// Write 1delay_us(2);DS18B20_DQ_OUT=1;delay_us(60);}else{DS18B20_DQ_OUT=0;// Write 0delay_us(60);DS18B20_DQ_OUT=1;delay_us(2);}}}//开始温度转换void DS18B20_Start(void)// ds1820 start convert{DS18B20_Rst();DS18B20_Check();DS18B20_Write_Byte(0xcc);// skip romDS18B20_Write_Byte(0x44);// convert}//初始化DS18B20的IO口 DQ 同时检测DS的存在//返回1:不存在//返回0:存在u8 DS18B20_Init(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能PORTA口时钟= GPIO_Pin_2; //PORTA0 推挽输出= GPIO_Mode_Out_PP;= GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_SetBits(GPIOA,GPIO_Pin_2); //输出1DS18B20_Rst();return DS18B20_Check();}//从ds18b20得到温度值//精度://返回值:温度值(-550~1250)short DS18B20_Get_Temp(void){u8 temp;u8 TL,TH;short tem;DS18B20_Start (); // ds1820 start convertDS18B20_Rst();DS18B20_Check();DS18B20_Write_Byte(0xcc);// skip romDS18B20_Write_Byte(0xbe);// convertTL=DS18B20_Read_Byte(); // LSBTH=DS18B20_Read_Byte(); // MSBif(TH>7){TH=~TH;TL=~TL;temp=0;//温度为负}else temp=1;//温度为正tem=TH; //获得高八位tem<<=8;tem+=TL;//获得底八位tem=(float)tem*;//转换if(temp)return tem; //返回温度值else return -tem;}键盘代码#include ""#include ""//按键初始化函数//PA15和PC5 设置成输入void KEY_Init(void){GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOC,ENABLE);//使能PORTA,PORTC时钟GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//关闭jtag,使能SWD,可以用SWD 模式调试= GPIO_Pin_15;//PA15= GPIO_Mode_IPU; //设置成上拉输入GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA15= GPIO_Pin_5;//PC5= GPIO_Mode_IPU; //设置成上拉输入GPIO_Init(GPIOC, &GPIO_InitStructure);//初始化GPIOC5 = GPIO_Pin_0;//PA0= GPIO_Mode_IPD; //PA0设置成输入,默认下拉GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化}//按键处理函数//返回按键值//mode:0,不支持连续按;1,支持连续按;//返回值://0,没有任何按键按下//KEY0_PRES,KEY0按下//KEY1_PRES,KEY1按下//WKUP_PRES,WK_UP按下//注意此函数有响应优先级,KEY0>KEY1>WK_UP!!u8 KEY_Scan(u8 mode){static u8 key_up=1;//按键按松开标志if(mode)key_up=1; //支持连按if(key_up&&(KEY0==0||KEY1==0||WK_UP==1)){delay_ms(10);//去抖动key_up=0;if(KEY0==0)return KEY0_PRES;else if(KEY1==0)return KEY1_PRES;else if(WK_UP==1)return WKUP_PRES;}else if(KEY0==1&&KEY1==1&&WK_UP==0)key_up=1;return 0;// 无按键按下}第四章.实物效果图第五章课程总结嵌入式开发是自动化专业的主要课程之一,现实生活中,嵌入式在应用可以说得是无处不在。