stm32控制地四層電梯設(shè)計原理與程序代碼_第1頁
stm32控制地四層電梯設(shè)計原理與程序代碼_第2頁
stm32控制地四層電梯設(shè)計原理與程序代碼_第3頁
stm32控制地四層電梯設(shè)計原理與程序代碼_第4頁
stm32控制地四層電梯設(shè)計原理與程序代碼_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上列出這個設(shè)計中要用到的STM32的各個引腳及實際用途如表(1)所示,硬件電路圖如圖(2)所示??刂埔? 總體控制要求:電梯由安裝在各樓層電梯口的上升下降呼叫按鈕(U1、U2、U3、D2、D3、D4),電梯轎廂內(nèi)樓層選擇按鈕(S1、S2、S3、S4),上升下降指示(UP、DOWN),各樓層到位行程開關(guān)(SQ1、SQ2、SQ3、SQ4)組成。電梯自動執(zhí)行呼叫。2 電梯在上升的過程中只響應(yīng)向上的呼叫,在下降的過程中只響應(yīng)向下的呼叫,電梯向上或向下的呼叫執(zhí)行完成后再執(zhí)行反向呼叫。3 電梯停止運行等待呼叫時,同時有不同呼叫時,誰先呼叫執(zhí)行誰。4 具有呼叫記憶、內(nèi)選呼叫指示功能

2、。5 具有樓層顯示、方向指示、到站聲音提示功能。 設(shè)計中用到的各引腳分布:輸入B11->B14一層到四層的內(nèi)選按鈕輸入B8->B10二層到四層的下呼按鈕輸入B5->B7一層到三層的上呼按鈕輸入B1->B4行程控制輸出C12->C15當前樓層指示輸出C11橋箱下降指示輸出C10橋箱上升指示輸出C6->C9一層到四層的內(nèi)選指示燈輸出C3->C5二層到四層的下呼指示燈輸出C0->C2一層到三層的上呼指示燈輸出D12八音盒,到站聲輸出D8->D11數(shù)碼管的控制端子 表(1)硬件電路圖如下圖所示: 圖(2)程序的流程圖如圖(3): 圖(3)程序代碼如

3、下:#include "stm32f10x_lib.h"#include "stdio.h"void RCC_Configuration(void); /時鐘配置函數(shù)void GPIO_Configuration(void); /通用I/O口配置函數(shù)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四層內(nèi)選,

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); /各層的內(nèi)選請求清零 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) / 等待狀態(tài)掃描 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) /判斷有沒有上呼、下呼、內(nèi)選請求 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層內(nèi)選指示燈亮 break; case 2: GPIO_SetBits(GPIOC, GPIO_Pin_7); /第2層內(nèi)選指示燈亮 break; cas

14、e 3: GPIO_SetBits(GPIOC, GPIO_Pin_8); /第3層內(nèi)選指示燈亮 break; case 4: GPIO_SetBits(GPIOC, GPIO_Pin_9); /第3層內(nèi)選指示燈亮 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)/時鐘配置函數(shù) ErrorStatus HSEStartUpStatus; u8 SYSCLKSourceValue; RC

18、C_DeInit(); /對RCC復(fù)位 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時鐘為系統(tǒng)時鐘 RCC_PCLK1Config(RCC_HCLK_Div2);/配置低速APB1時鐘為系統(tǒng)時鐘的一半 RCC_PCLK2Config(RCC_HCLK_Div2);/配置高速APB2時鐘為系統(tǒng)時鐘的一半 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);/將倍頻后的時鐘設(shè)置為系統(tǒng)時鐘 SYSCLKSourceValue=RCC_GetSYSCLKSource();/取時鐘頻率值 while(SYSCLKSourceValue != 0x08) /判斷系統(tǒng)時鐘是否為倍頻后的時鐘 /- 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的外設(shè)GPIOA和GPIOC的時鐘void GPIO_Configuration(void) /通用I/O端口配置函數(shù) 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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論