当前位置:首页 > 商业/管理/HR > 管理学资料 > stm32控制地四层电梯设计原理与程序代码
实用标准文案精彩文档列出这个设计中要用到的STM32的各个引脚及实际用途如表(1)所示,硬件电路图如图(2)所示。控制要求1总体控制要求:电梯由安装在各楼层电梯口的上升下降呼叫按钮(U1、U2、U3、D2、D3、D4),电梯轿厢内楼层选择按钮(S1、S2、S3、S4),上升下降指示(UP、DOWN),各楼层到位行程开关(SQ1、SQ2、SQ3、SQ4)组成。电梯自动执行呼叫。2电梯在上升的过程中只响应向上的呼叫,在下降的过程中只响应向下的呼叫,电梯向上或向下的呼叫执行完成后再执行反向呼叫。3电梯停止运行等待呼叫时,同时有不同呼叫时,谁先呼叫执行谁。4具有呼叫记忆、内选呼叫指示功能。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):fnow1fnow2fnow3fnow4upingdown4downinginslt4inslt3inslt2inslt1up1up2up3down2down3c0c1c2c3c4c5c6c7c8c9c10c11c12c13c14c15c12c13c14c15reachfBELLgo1go2go3inslt1go4up1up2up3down4down3down2inslt2inslt3inslt4b1b2b3b4b5b6b7b8b9b10b11b12b13b14d8d9d10d11b11b12b13b14b5b6b7b8b9b10b1b2b3b4c6c7c8c9c10c11c0c1c2c3c4c520k1053.3vnrestnrest3.3vC0C1C2C3C4C5C6C7C8C9C10C11C12C13C14C15VSSAVDDAB1B2B3B4B5B6B7B8B9B10B11B12B13B14D12D8D9D10D11D0/OSC1ND1/OSCOUTnRSTVDDVSSstm32stm32A7B1C2D6LT3BI/RBO4RBI5a13b12c11d10e9f15g1474LS48abfcgdeDPY[LEDgn]1234567abcdefgDS3abfcgdeDPY[LEDgn]1234567abcdefgDS2abfcgdeDPY[LEDgn]1234567abcdefgDS1abfcgdeDPY[LEDgn]1234567abcdefgDS4abcdefgabcdefgabcdefgabcdefgVCCVCCVCC实用标准文案精彩文档图(3)开始程序的初始化有无需要电梯的楼层电梯的当前方向当前层是不是欲至层或上呼层当前层是不是欲至层或下呼层上面层有无需要电梯的楼层下面层有无需要电梯的楼层上移一层并显示下移一层并显示开门延时并显示开门延时并显示反向反向NYYYYYNNNN上下NNNNYYYY判断电梯当前的楼层并显示实用标准文案精彩文档程序代码如下:#includestm32f10x_lib.h#includestdio.hvoidRCC_Configuration(void);//时钟配置函数voidGPIO_Configuration(void);//通用I/O口配置函数voidask_Scan(void);voiddelay(vu32Count);//延时unsignedcharinslt[4]={0},dnask[3]={0},upask[3]={0},fnow[4]={0};signedcharnnum=0,dnnum=0,upnum=0,innum=0,i=0;//inslt[4]四层内选,dnask下呼请求,upask[3]上呼请求,fnow当前楼层;u8updnFlag=0;//上呼与下呼标main(void){#ifdefDEBUGdebug();#endifRCC_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(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);//桥箱下降请求清零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_Pin_11);//当前楼层显示清零GPIO_ResetBits(GPIOD,GPIO_Pin_12);//到站声清零while(1){voidwait_display_scan(void)//等待状态扫描{voidnowfloor_scan(void)//扫描当前电梯所在的楼层{if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==1){fnow[0]=1;nnum=1;}if(GPIO_ReadIntputDataBit(GPIOB,GPIO_Pin_2)==1){fnow[1]=1;nnum=2;}if(GPIO_ReadIntputDataBit(GPIOB,GPIO_Pin_3)==1){fnow[2]=1;nnum=3;}if(GPIO_ReadIntputDataBit(GPIOB,GPIO_Pin_4)==1){fnow[3]=1;nnum=4;}}voidnowfloor_display(void){switch(nnum)实用标准文案精彩文档{case1:GPIO_SetBits(GPIOC,GPIO_Pin_6);//第一层指示灯亮GPIO_Write(GPIOD,0x018);//显示第一层break;case2:GPIO_SetBits(GPIOC,GPIO_Pin_7);//第2层指示灯亮GPIO_Write(GPIOD,0x028);//显示第2层break;case3:GPIO_SetBits(GPIOC,GPIO_Pin_8);//第3层指示灯亮GPIO_Write(GPIOD,0x038);//显示第3层break;case4:GPIO_SetBits(GPIOC,GPIO_Pin_9);//第4层指示灯亮GPIO_Write(GPIOD,0x048);//显示第4层break;}}voidask_scan(void)//判断有没有上呼、下呼、内选请求{if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_5)==1){upask[0]=1;upnum=1;updnFlag==0;}if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_6)==1){upask[1]=1;upnum=2;updnFlag==0;}实用标准文案精彩文档if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7)==1){upask[1]=1;upnum=3;updnFlag==0;}if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8)==1){dnask[0]=1;upnum=2;updnFlag==1;}if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9)==1){dnask[1]=1;upnum=3;updnFlag==1;}if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10)==1){dnask[2]=1;upnum=4;updnFlag==1;}if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_11)==1){inslt[0]=1;innum=1;}if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_12)==1){inslt[1]=1;innum=2;}if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)==1){inslt[2]=1;innum=3;}if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_14)==1){inslt[3]=1;innum=4;}}voidask_display(void){switch(upnum){case1:GPIO_SetBits(GPIOC,GPIO_Pin_0);//第1层上呼指示灯亮break;case2GPIO_SetBits(GPIOC,GPIO_Pin_1);//第2层上呼指示灯亮break;case3:GPIO_SetBits(GPIOC,GPIO_Pin_2);//第3层上呼指示灯亮break;}实用标准文案精彩文档switch(dnnum){case2:GPIO_SetBits(GPIOC,GPIO_Pin_3);//第2层下呼指示灯亮break;case3:GPIO_SetBits(GPIOC,GPIO_Pin_4);//第3层下呼指示灯亮break;case4:GPIO_SetBits(GPIOC,GPIO_Pin_5);//第4层下呼指示灯亮break;}switch(innum){case1:GPIO_SetBits(GPIOC,GPIO_Pin_6);//第1层内选指示灯亮break;case2:GPIO_SetBits(GPIOC,GPIO_Pin_7);//第2层内选指示灯亮break;case3:GPIO_SetBits(GPIOC,GPIO_Pin_8);//第3层内选指示灯亮break;case4:GPIO_SetBits(GPIOC,GPIO_Pin_9);//第3层内选指示灯亮实用标准文案精彩文档break;}}if(upnum==0|dnnum==0|innum==0)//如果没有呼叫请求voidwait_display_scan(void);//等待并显示当前楼层elseswitch(updnFlag){case(0){voidupask_dispose(void){if(nnun==upnum|nnum==innum){GPIO_setBits(GPIOD,GPIO_Pin_12);//开门、警报到站voidnowfloor_display(void);vo
本文标题:stm32控制地四层电梯设计原理与程序代码
链接地址:https://www.777doc.com/doc-5755601 .html