版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上列出这个设计中要用到的STM32的各个引脚及实际用途如表(1)所示,硬件电路图如图(2)所示。控制要求1 总体控制要求:电梯由安装在各楼层电梯口的上升下降呼叫按钮(U1、U2、U3、D2、D3、D4),电梯轿厢内楼层选择按钮(S1、S2、S3、S4),上升下降指示(UP、DOWN),各楼层到位行程开关(SQ1、SQ2、SQ3、SQ4)组成。电梯自动执行呼叫。2 电梯在上升的过程中只响应向上的呼叫,在下降的过程中只响应向下的呼叫,电梯向上或向下的呼叫执行完成后再执行反向呼叫。3 电梯停止运行等待呼叫时,同时有不同呼叫时,谁先呼叫执行谁。4 具有呼叫记忆、内选呼叫指示功能
2、。5 具有楼层显示、方向指示、到站声音提示功能。 设计中用到的各引脚分布:输入B11->B14一层到四层的内选按钮输入B8->B10二层到四层的下呼按钮输入B5->B7一层到三层的上呼按钮输入B1->B4行程控制输出C12->C15当前楼层指示输出C11桥箱下降指示输出C10桥箱上升指示输出C6->C9一层到四层的内选指示灯输出C3->C5二层到四层的下呼指示灯输出C0->C2一层到三层的上呼指示灯输出D12八音盒,到站声输出D8->D11数码管的控制端子 表(1)硬件电路图如下图所示: 图(2)程序的流程图如图(3): 图(3)程序代码如
3、下:#include "stm32f10x_lib.h"#include "stdio.h"void RCC_Configuration(void); /时钟配置函数void GPIO_Configuration(void); /通用I/O口配置函数void ask_Scan(void);void delay(vu32 Count); /延时unsigned char inslt4=0,dnask3=0,upask3=0,fnow4=0;signed char nnum=0,dnnum=0,upnum=0,innum=0,i=0;/inslt4四层内选,
4、dnask下呼请求,upask3上呼请求,fnow当前楼层;u8 updnFlag=0;/上呼与下呼标main (void) #ifdef DEBUG debug(); #endif RCC_Configuration(); GPIO_Configuration(); GPIO_ResetBits(GPIOC, GPIO_Pin_0); GPIO_ResetBits(GPIOC, GPIO_Pin_1); GPIO_ResetBits(GPIOC, GPIO_Pin_2); /各层的上呼请求清零 GPIO_ResetBits(GPIOC, GPIO_Pin_3); GPIO_ResetBits
5、(GPIOC, GPIO_Pin_4); GPIO_ResetBits(GPIOC, GPIO_Pin_5); /各层的下呼请求清零 GPIO_ResetBits(GPIOC, GPIO_Pin_6); GPIO_ResetBits(GPIOC, GPIO_Pin_7); GPIO_ResetBits(GPIOC, GPIO_Pin_8); GPIO_ResetBits(GPIOC, GPIO_Pin_9); /各层的内选请求清零 GPIO_ResetBits(GPIOC, GPIO_Pin_10); /桥箱上升请求清零 GPIO_ResetBits(GPIOC, GPIO_Pin_11);
6、/ 桥箱下降请求清零 GPIO_ResetBits(GPIOC, GPIO_Pin_12); GPIO_ResetBits(GPIOC, GPIO_Pin_13); GPIO_ResetBits(GPIOC, GPIO_Pin_14); GPIO_ResetBits(GPIOC, GPIO_Pin_15); /当前楼层指示清零 GPIO_ResetBits(GPIOD, GPIO_Pin_8); GPIO_ResetBits(GPIOD, GPIO_Pin_9); GPIO_ResetBits(GPIOD, GPIO_Pin_10); GPIO_ResetBits(GPIOD, GPIO_Pi
7、n_11); /当前楼层显示清零 GPIO_ResetBits(GPIOD, GPIO_Pin_12); /到站声清零while(1) void wait_display_scan(void) / 等待状态扫描 void nowfloor_scan(void)/扫描当前电梯所在的楼层 if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)=1)fnow0=1; nnum=1; if(GPIO_ReadIntputDataBit(GPIOB,GPIO_Pin_2)=1)fnow1=1;nnum=2; if(GPIO_ReadIntputDataBit(GPIOB,G
8、PIO_Pin_3)=1)fnow2=1;nnum=3; if(GPIO_ReadIntputDataBit(GPIOB,GPIO_Pin_4)=1)fnow3=1;nnum=4; void nowfloor_display(void) switch(nnum) case 1: GPIO_SetBits(GPIOC, GPIO_Pin_6); /第一层指示灯亮 GPIO_Write(GPIOD,0x01<<8); / 显示第一层 break; case 2: GPIO_SetBits(GPIOC, GPIO_Pin_7); /第2层指示灯亮 GPIO_Write(GPIOD,0x0
9、2<<8); / 显示第2层 break; case 3: GPIO_SetBits(GPIOC, GPIO_Pin_8); /第3层指示灯亮 GPIO_Write(GPIOD,0x03<<8); / 显示第3层 break; case 4: GPIO_SetBits(GPIOC, GPIO_Pin_9); /第4层指示灯亮GPIO_Write(GPIOD,0x04<<8); / 显示第4层 break; void ask_scan(void) /判断有没有上呼、下呼、内选请求 if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_
10、5)=1)upask0=1;upnum=1;updnFlag=0; if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_6)=1)upask1=1;upnum=2;updnFlag=0; if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7)=1)upask1=1;upnum=3;updnFlag=0; if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8)=1)dnask0=1;upnum=2;updnFlag=1; if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)=1
11、)dnask1=1;upnum=3;updnFlag=1; if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10)=1)dnask2=1;upnum=4;updnFlag=1; if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)=1)inslt0=1;innum=1; if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)=1)inslt1=1;innum=2; if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)=1)inslt2=1;innum=3; if(
12、GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)=1)inslt3=1;innum=4; void ask_display(void) switch(upnum) case 1: GPIO_SetBits(GPIOC, GPIO_Pin_0); /第1层上呼指示灯亮 break; case 2 GPIO_SetBits(GPIOC, GPIO_Pin_1); /第2层上呼指示灯亮 break; case 3: GPIO_SetBits(GPIOC, GPIO_Pin_2); /第3层上呼指示灯亮 break; switch(dnnum) case 2: GPIO
13、_SetBits(GPIOC, GPIO_Pin_3); /第2层下呼指示灯亮 break; case 3: GPIO_SetBits(GPIOC, GPIO_Pin_4); /第3层下呼指示灯亮 break; case 4: GPIO_SetBits(GPIOC, GPIO_Pin_5); /第4层下呼指示灯亮 break; switch(innum) case 1: GPIO_SetBits(GPIOC, GPIO_Pin_6); /第1层内选指示灯亮 break; case 2: GPIO_SetBits(GPIOC, GPIO_Pin_7); /第2层内选指示灯亮 break; cas
14、e 3: GPIO_SetBits(GPIOC, GPIO_Pin_8); /第3层内选指示灯亮 break; case 4: GPIO_SetBits(GPIOC, GPIO_Pin_9); /第3层内选指示灯亮 break; if(upnum=0|dnnum=0|innum=0) /如果没有呼叫请求 void wait_display_scan(void); /等待并显示当前楼层 else switch(updnFlag) case(0) void upask_dispose(void) if(nnun=upnum|nnum=innum) GPIO_setBits(GPIOD, GPIO_
15、Pin_12); /开门、警报到站 void nowfloor_display(void) ; void delay(vu32 Count); /开门延时 else for (i=nnum+1;i<=4;i+) if(upnumi=1|dnnumi=1|inslti=1) /当前层的上面有请求,上移一层,在看是否是 nnum+; /想要去的层或呼叫层void nowfloor_display(void) ;void ask_display(void);void upask_dispose(void); else updnFlag=1 void wait_display_scan(void
16、); /若下面没有请求了,反向 GPIO_SetBits(GPIOC, GPIO_Pin_11); /桥箱下降指示灯亮 break; case(1) void dnask_dispose(void) if(nnun=dnnum|nnum=innum) GPIO_setBits(GPIOD, GPIO_Pin_12); /开门、警报到站 void nowfloor_scan(void) ; void delay(vu32 Count); /开门延时 else for (i=nnum-1;i>=1;i-)if(upnumi=1|dnnumi=1|inslti=1) /当前层的下面有请求,下移
17、一层,在看是否是 nnum-; /想要去的层或呼叫层void ask_display(void);void nowfloor_display(void) ;void dnask_dispose(void); elseupdnFlag=0void wait_display_scan(void); /若下面没有请求了,反向GPIO_SetBits(GPIOC, GPIO_Pin_10); /桥箱上升指示灯亮 break;void RCC_Configuration(void)/时钟配置函数 ErrorStatus HSEStartUpStatus; u8 SYSCLKSourceValue; RC
18、C_DeInit(); /对RCC复位 RCC_HSEConfig(RCC_HSE_ON);/使能HSE时钟 HSEStartUpStatus=RCC_WaitForHSEStartUp();/取HSE是否准备好标志 if(HSEStartUpStatus=SUCCESS)/判断HSE是否准备好 /* Enable Prefetch Buffer */ FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); /* Flash 2 wait state */ FLASH_SetLatency(FLASH_Latency_2); RCC_HCLK
19、Config(RCC_SYSCLK_Div1); /配置AHB时钟为系统时钟 RCC_PCLK1Config(RCC_HCLK_Div2);/配置低速APB1时钟为系统时钟的一半 RCC_PCLK2Config(RCC_HCLK_Div2);/配置高速APB2时钟为系统时钟的一半 RCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9); /对HSE进行倍频,倍频因子为9,倍频后时钟频率为72MHZ RCC_PLLCmd(ENABLE); /使能倍频后的时钟 while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) = RES
20、ET)/等待PLL时钟启用成功 RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);/将倍频后的时钟设置为系统时钟 SYSCLKSourceValue=RCC_GetSYSCLKSource();/取时钟频率值 while(SYSCLKSourceValue != 0x08) /判断系统时钟是否为倍频后的时钟 /- 0x00: HSI used as system clock /- 0x04: HSE used as system clock /- 0x08: PLL used as system clock RCC_APB2PeriphClockCmd(RCC
21、_APB2Periph_GPIOC| RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOB, ENABLE); /使能APB2的外设GPIOA和GPIOC的时钟void GPIO_Configuration(void) /通用I/O端口配置函数 GPIO_InitTypeDef GPIO_InitStructure; /* Configure GPIOC pin0, pin1, pin2 and pin3 as Output push-pull */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1| GPIO_Pin_2| GPIO_Pin_3| GPIO_Pin_4| GPIO_Pin_5| GPIO_Pin_6| GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12| GPIO_Pin_13|GPIO_Pin_14; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; GPIO_InitStruc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 个人咨询合作合同书范本(专业版)
- 2024技术开发服务合同范文
- 16大家一起来合作(说课稿)统编版道德与法治一年级下册
- 专用酒店家具上漆协议范例
- 个人二零二四年度汽车租赁合同6篇
- 职业学院车辆准停准行办理申请表
- 福建省南平市武夷山上梅中学2021-2022学年高三物理测试题含解析
- 2024年货车司机雇佣合同文本
- 商务礼仪助力销售
- 品质之路:时尚生活探索
- 通信线路维护安全培训
- 广东省广州市2023-2024高二上学期期末语文试题
- 2024年土石方工程合同模板(三篇)
- 专业微信小程序开发协议范例版
- 港口液体危化品装卸管理人员理论考试题库-上(单选题)
- 2024年新北师大版一年级上册数学教学课件 总复习(1) 数与代数
- 2024年人教版小学六年级英语(上册)期末考卷及答案
- 小学二年级数学100以内加减法竖式计算单元练习习题
- 《文化研究导论》全套教学课件
- 苏教版五年级上册数学计算题大全1000道带答案
- 劳保用品发放记录
评论
0/150
提交评论