ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:2.41MB ,
资源ID:23994340      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/23994340.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(嵌入式课程设计报告.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

嵌入式课程设计报告.docx

1、嵌入式课程设计报告嵌入式课程设计报告跑马 灯 专 业: 计算机科学与技术 学 号: 1310311141 班 级: 13计算1班 姓 名: 文 雨 婷 指导教师: 李 浩 目录1、摘要32、课题要求3三、硬件设计33.1 总体电路介绍3四、软件设计44.1 总体设计思想44.2 程序流程图44.3 程序编写与简介6五、实验仿真14 5.1 LED灯的轮流显示145.2 KEY1的外部中断暂停系统155.3 KEY1的外部中断继续系统15六、 结论16 一、摘要在电子技术高度高发的今天,单片机迅猛发展,多功能按键已成为当代电子信息中不可或缺的重要部分,尤其是应用在当代的潮流物品上面,例如:MP3

2、,MP4,手机,数字电视等等高科技电子电器上面.正是由于它的出现和应用给人们的学习、工作、娱乐带来极大方便。另外,多功能按键中还采用了石英晶体振荡电路,从而使它具有响应快、灵敏度高、性能稳定诸多优点。它还可以利用一个按键实现单击、双击、连击的功能,真正做到了一键多功能,多效应,这也正是它的命名由来。二、课题要求LED1, LED2, LED3轮流点亮,时间由定时器控制,并将系统运行时间通过串口输出。三个灯点亮一次触发一次中断。KEY1控制系统的运行和暂停。三、硬件设计3.1 总体电路介绍该电路有主控芯片,其基本功能就是对每位按键进行单击、双击和三击后发光二极管会显示不同的发光个数及顺序。其电路

3、原理图如下图所示。电路主要由三部分组成,由三个SB按键分别并接在P1口的PA.0PA.2的三个引脚上,构成的输入部分;由晶体振荡电路构成的时钟电路。芯片右边则是由三个发光二极管和排阻构成的显示部分。 四、软件设计4.1总体设计思想在硬件设计完成后,下面面对的就是驱动程序,根据电路和控制要求的需要,该程序涉及主程序和延时程序。主程序用以识别是哪个按键按下及每个按键所按的次数,延时程序主要用于防止非人为按下按键或按键颤抖所出现的按键触动。程序原理框图以下将会介绍。4.2程序流程图 在进行编程之前要对需要解决的问题进行分析,明确任务后,有条理的画出流程图,就能充分表达程序的设计思路,可帮助设计程序,

4、阅读程序和查找程序中的错误。以下图示为该设计的流程图。外部中断0流程图外部中断1流程图4.3程序编写与简介/* Function Name : int main(void)* Description : 主函数* Input : None* Output : None* Return : None*/int main(void) /*-初始化-*/ RCC_Configuration(); GPIO_Configuration(); EXTI_Configuration(); USART_Configuration(); NVIC_Configuration(); TIM_Configurat

5、ion(); printf(This is produced by yuexiang.n); while(1) if(SystemShutDown) printf(press PB6 to continue.n); TIM_Cmd(TIM2, DISABLE);/失能TIM2 continue; else TIM_Cmd(TIM2, ENABLE);/使能TIM2 switch(CountValue%3) case 0: GPIO_SetBits(GPIOA, GPIO_Pin_0); GPIO_ResetBits(GPIOA, GPIO_Pin_1); GPIO_ResetBits(GPIO

6、A, GPIO_Pin_2); break; case 1: GPIO_ResetBits(GPIOA, GPIO_Pin_0); GPIO_SetBits(GPIOA, GPIO_Pin_1); GPIO_ResetBits(GPIOA, GPIO_Pin_2); break; case 2: GPIO_ResetBits(GPIOA, GPIO_Pin_0); GPIO_ResetBits(GPIOA, GPIO_Pin_1); GPIO_SetBits(GPIOA, GPIO_Pin_2); break; 中断模块设计定时器中断模块设计/* Function Name : TIM2_IR

7、QHandler* Description : This function handles TIM2 global interrupt request.* Input : None* Output : None* Return : None*/void TIM2_IRQHandler(void) TIM_ClearITPendingBit(TIM2, TIM_IT_Update); / 清除TIM2的中断源 ; printf(Now, the system running time is %dsn, CountValue); CountValue +;外部中断模块设计/* Function N

8、ame : EXTI9_5_IRQHandler* Description : This function handles External lines 9 to 5 interrupt request.* Input : None* Output : None* Return : None*/void EXTI9_5_IRQHandler(void) SystemShutDown = SystemShutDown; if(SystemShutDown) printf(PB6 external interrupt.n); printf(System is going to shut down.

9、n); else printf(PB6 external interrupt.n); printf(System is going to boot up.n); EXTI_ClearITPendingBit(EXTI_Line6);被调用功能模块设计和编码RCC模块/* Function Name : void RCC_Configuration(void)* Description : Configures the RCC* Input : None* Output : None* Return : None*/void RCC_Configuration(void) /*-使用外部RC晶振

10、-*/ RCC_DeInit(); /时钟默认初始化 RCC_HSEConfig(RCC_HSE_ON);/使能外部的高速时钟 while(RCC_GetFlagStatus(RCC_FLAG_HSERDY) = RESET);/等待外部的高速时钟就绪 FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); /使能指令预存取 FLASH_SetLatency(FLASH_Latency_2); /等待两个周期 RCC_HCLKConfig(RCC_SYSCLK_Div1); /设置AHB时钟为系统时钟 RCC_PCLK2Config(RCC_

11、HCLK_Div1); /设置APB2时钟为AHB时钟 RCC_PCLK1Config(RCC_HCLK_Div2); /设置APB1时钟为AHB/2时钟 RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); /设置PLL时钟为外部高速时钟的9倍频 RCC_PLLCmd(ENABLE); /使能PLL时钟 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RESET); /等待PLL时钟使能就绪 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /配置PLL时钟为系统时钟

12、while(RCC_GetSYSCLKSource()!=0x08); /等待PLL时钟作为系统时钟GPIO模块/* Function Name : void GPIO_Configuration()* Description : Configures the GPIO* Input : None* Output : None* Return : None*/void GPIO_Configuration() GPIO_InitTypeDef GPIO_InitStructure; / 声明一个IO口结构体变量 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPI

13、OA , ENABLE); / 使能APB2外设GPIOA时钟 /=PE口IO结构体初始化= GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2; /设置引脚 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /管脚频率为50MHZ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; /模式为推挽输出 GPIO_Init(GPIOA, &GPIO_InitStructure); /初始化GPIOA寄存器EXTI模块/*

14、 Function Name : void EXTI_Configuration(void)* Description : Configures the EXTI* Input : None* Output : None* Return : None*/void EXTI_Configuration(void) EXTI_InitTypeDef EXTI_InitStructure; GPIO_InitTypeDef GPIO_InitStructure; /* =开启时钟=*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE); /

15、使能APB2外设GPIOC时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; /配置PB6为外部中断 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; /上拉输入 GPIO_Init(GPIOB,&GPIO_InitStructure); GPIO_EXTILineConfig(GPIO_PortSourceGP

16、IOB,GPIO_PinSource6); /EXTI6 EXTI_DeInit(); /将EXIT寄存器重设置为缺省值 EXTI_InitStructure.EXTI_Line = EXTI_Line6 ; /中断线 EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt ; /中断模式 EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising_Falling; /双边沿 EXTI_InitStructure.EXTI_LineCmd = ENABLE; /使能 EXTI_Init(&EXTI_I

17、nitStructure); /初始化 EXTI_ClearITPendingBit(EXTI_Line6);USART模块/* Function Name : void USART_Configuration(void)* Description : Configures the USART3* Input : None* Output : None* Return : None*/void USART_Configuration(void) /*-定义结构体变量-*/ USART_InitTypeDef USART_InitStructure; GPIO_InitTypeDef GPIO_

18、InitStructure; /*-使能相应外设的时钟-*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_AFIO,ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE); /*-USART3重新映射-*/ GPIO_PinRemapConfig(GPIO_PartialRemap_USART3,ENABLE); /*-配置USART3_TX(PC.10)-*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPI

19、O_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOC,&GPIO_InitStructure); /*-配置USART3_RX(PC.11)-*/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOAT

20、ING; GPIO_Init(GPIOC,&GPIO_InitStructure); /*-USARTd的各个参数配置-*/ USART_InitStructure.USART_BaudRate = 9600; /设置USART传输的波特率 USART_InitStructure.USART_WordLength = USART_WordLength_8b; /8位数据位 USART_InitStructure.USART_StopBits = USART_StopBits_1; /在一帧数据传输完再传一位停止位 USART_InitStructure.USART_Parity = USART

21、_Parity_No; /无奇偶校验 USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;/接受发送使能 USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; /硬件流控制失能(无硬件流控制) USART_Init(USART3,&USART_InitStructure); /初始化USART3的寄存器/ USART_ITConfig(USART3,USART_IT_RXNE,ENABLE); USART_Cmd(U

22、SART3,ENABLE); /使能USART3外设; NVIC模块/* Function Name : void NVIC_Configuration(void)* Description : Configures the NVIC* Input : None* Output : None* Return : None*/void NVIC_Configuration(void) NVIC_InitTypeDef NVIC_InitStructure;#ifdef VECT_TAB_RAM NVIC_SetVectorTable(NVIC_VectTab_RAM,0x0); /向量表存放在R

23、AM中#else NVIC_SetVectorTable(NVIC_VectTab_FLASH,0x0); /向量表存放在FLASH中#endif NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); /选择向量优先级组 NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQChannel; /选择中断向量通道为定时器2的通道 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; /先优先级为0 NVIC_InitStructure.NVIC_IRQCha

24、nnelSubPriority = 0; /亚优先级为0 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; /使能中断向量 NVIC_Init(&NVIC_InitStructure); /完成初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQChannel; /KEY1外部中断 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);TIM模块/* Function Name : vo

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1