【基于单片机智能红绿灯控制系统的LED信号灯模块、数码管模块和蓝牙模块设计案例5100字】_第1页
【基于单片机智能红绿灯控制系统的LED信号灯模块、数码管模块和蓝牙模块设计案例5100字】_第2页
【基于单片机智能红绿灯控制系统的LED信号灯模块、数码管模块和蓝牙模块设计案例5100字】_第3页
【基于单片机智能红绿灯控制系统的LED信号灯模块、数码管模块和蓝牙模块设计案例5100字】_第4页
【基于单片机智能红绿灯控制系统的LED信号灯模块、数码管模块和蓝牙模块设计案例5100字】_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于单片机智能红绿灯控制系统的LED信号灯模块、数码管模块和蓝牙模块设计案例目录TOC\o"1-3"\h\u261191LED信号灯模块 1203461.1LED驱动电路 1235011.2LED初始化程序 219222数码管模块 3210622.1数码管模块介绍 321782.2数码管驱动电路 4249952.3数码管显示程序 5257133蓝牙模块 6277473.1HC-05蓝牙模块介绍 6129753.2串口通信 822486附录 101LED信号灯模块1.1LED驱动电路图SEQ图\*ARABIC10LED驱动电路LED灯本质上是具有单向导电性的发光二极管。此设计中的12个不同颜色的LED灯的正极直接连接到3.3V电源,负极再各通过一个470R的限流电阻接到STM32单片机的GPIO口上,限流电阻的作用主要是限制电流。因为LED灯的功率很小,如果不加任何电阻直接连的话可能会电流过大烧坏STM32单片机和LED灯。由图10可知,单片机位高电平时LED灯正负极电压相同,小灯不亮。当STM32单片机的引脚输出低电平时,在小灯正负极之间产生一个电势差,电流通过小灯从正极流到负极,小灯发光。所以单片机通过不断切换IO口的高低电平就可以实现LED的亮灭。这种直接灌电流的驱动方式对于小功率LED器件可以使用,但是当器件过多或者稍微的大功率器件都不建议使用,最好使用MOS管驱动或者采用光耦隔离的方式,单片机的高低电平只控制MOS管或者光耦的开光,可以很好的保护电路不被烧坏。1.2LED初始化程序LED模块我们主要用到的固件库文件是:stm32f10x_gpio.c/stm32f10x_gpio.hstm32f10x_rcc.c/stm32f10x_rcc.hmisc.c/misc.h由于本次设计采用的是库函数的方法。库函数就是官方将各种寄存器的配置封装在不同的函数里。这样在编程时就不用去配置寄存器,直接去调用官方给的库函数即可。这样一来,使编程更加简单和高效。所以可以在stm32f10x_rcc.c源文件中找到关于时钟配置的相关函数。在stm32f10x_gpio.c源文件中可以找到单片机GPIO口相关的配置函数。为了增加程序的可读性,在每个模块都编写一个C文件和一个H文件,使程序模块化,本文中LED模块的程序,以bsp_led.c和bsp_led.h来命名。在硬件连接上南北方向的红、黄、绿的三个灯分别由GPIOA10、GPIOA12、GPIOA11来控制,在东西方向上的红、黄、绿三个灯灯分别由GPIOA7、GPIOA9、GPIOA8来控制。首先在H文件中对输出的IO口进行宏定义,以GPIOA10端口为例:#defineTrafficLightsSN_R_PORT GPIOA #defineTrafficLightsSN_R_CLK RCC_APB2Periph_GPIOA #defineTrafficLightsSN_R_PIN GPIO_Pin_10TrafficLightsSN_R_PORT代表GPIOA端口,TrafficLightsSN_R_CLK代表GPIOA端口的时钟,TrafficLightsSN_R_PIN代表端口的引脚号。其他的LED控制引脚都如同上述方法进行宏定义。同时在H文件下也包含了三个函数的声明,具体函数如下:voidLED_SN_GPIO_Config(void);voidLED_EW_GPIO_Config(void);voidTrafficLightsConfig(void);这三个函数的的具体内容是在C文件下完成的。其中voidLED_SN_GPIO_Config(void)是南北方向IO控制端口的初始化函数,voidLED_EW_GPIO_Config(void)对东西方向IO口直端口的初始化函数。这两个函数的作用就对控制LED小灯的几个GPIO口进行配置,具体内容包括开启该GPIO的时钟、确定是哪几个接口、接口的输出模式输出速度和GPIO口初始的电平状态。在这里特别强调的是,STM32单片机在配置任何外设的时候外设的时候,都应该先使能其对应时钟线上的时钟,否则GPIO无法正常输入输出。文件中最后一个函数就是对上面两个函数的声明,当需要对LED控制函数初始化的时候只需调用第三个函数,这样是程序更加简单易读。2数码管模块2.1数码管模块介绍数码管是我们日常生活中很常见到的电子显示元器件,通常情况下,共有八个段,分别对应于A,B,C,D,E,F,G,DP。数字管的每个部分都是一个发光二极管。如果所有灯都点亮,将显示一个八字和一个小数点。根据内部结构的不同,数码管分为共阳极和共阴极,公共阳极将八个发光二极管的所有阳极连接在一起以形成公共端口REF_Ref22722\r[6]。当使用该器件时,将这个公共的阳极接在电源的正极,其他的八个二极管的负极接在控制端口。当需要显示某个字符或者数字时,就改变控制端电平的组合状态。例如:需要显示数字八,只需要将DP置为高电平,其他七个控制端口都置为低电平。因为共阳极数码管,低电平时会产生电势差,电流流过二极管,从而发亮。而高电平时,二极管两端电势相同,所以不亮。共阴极数字管与共阳极数字管相对。它将八个二极管的阴极连接在一起以形成一个公共端子。正极用作显示不同数字的控制端子。因此,对于普通阴极数字管,仅当控制端子处于高电平时才产生电势差。二极管的相应对应部分才发光。本次交通灯的设计采用的是4个0.28寸的两位共阳极数码管显示倒计时,如图10所示:图SEQ图\*ARABIC11数码管如图10所示,6、9号引脚分别对应的是片选端,其它A、B、C、D、E、F、G引脚分别连接单片机的GPIOB8、GPIOB9、GPIOB10、GPIOB11、GPIOB12、GPIOB13、GPIOB14。数码管占用的GPIO口比较多,为了使设计更加简单稳定节省,因此,采用了动态显示的方法。该方法是将这四个数字管的段代码线的相应段并行连接,由单片机的八个IO口控制,而各显示位的公共端则有另外的IO口控制。所谓动态显示就是每时每刻只有一位片选有效,即,显示所选的数码管,而不显示其他未选择的数码管。因为每个间隔都很短,所以要定期以规则的间隔逐个点亮每个数码管。由于每次间隔的时间都很短,人眼无法识别是依次点亮,以为多个数码管在同时发光。这种效果也被称为余晖效应。2.2数码管驱动电路一般情况下STM32单片机的电流输出能力都很差,可能直接驱动少量数码管效果还行,但是如果用单片机直接驱动多个数码管,会导致单片机电流过小,从而导致数码管亮度不足,甚至无法发光。所以本次设计采用P型MOS管SS8550来驱动数码管,单片机通过控制MOS管的开关,从而控制数码管。图SEQ图\*ARABIC12数码管驱动电路如图11所示,为数码管片选端的驱动电路,S1、S2、S3、S4分别连接单片机的GPIOB4、GPIOB5、GPIOB6、GPIOB7。因为南北方向上的两个数码管与东西方向上的两个数码管是分别同步的。所以,南北方向由相同的片选端S1、S2控制,东西方向由相同的片选端S3、S4控制。当STM32微控制器的GPIO输出高电平时,P型MOS管的栅极电压为3.3VREF_Ref24906\r[7],因此Vgs=0V,PMOS管截止,片选端为低电平。当STM32微控制器的GPIO输出低电平时,P型MOS管的栅极电压为0V,Vgs=-3.3V,PMOS管导通REF_Ref24906\r[7],片选端为高电平。从而驱动数码管。2.3数码管显示程序数码管程序主要放在ntube.c和ntube.h文件中,数码管的A、B、C、D、E、F、G端口分别对应单片机的GPIOB8——GPIOB14,在ntube.h文件中宏定义为:#defineNtube_Dis_Port GPIOB #defineAllNtube_DIS_Clk RCC_APB2Periph_GPIOB #defineAllNtube_DIS_Pin GPIO_Pin_8| GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14数码管的四个片选端对应的单片机接口为GPIOB4——GPIOB7在ntube.h文件中宏定义为:#defineNtube_CS_Port GPIOB #defineAllNtube_CS_Clk RCC_APB2Periph_GPIOB #defineAllNtube_CS_PinGPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7在ntube.c文件中主要包含以下六个函voidNTUBE_DIS_GPIO_Config(void);voidNTUBE_CS_GPIO_Config(void);voidNTUBE_GPIO_Config(void);voidNtube_DisplayEWSN(void);voidDisplay(uint16_tDATAa,uint16_tDATAb,uint16_tDATAc,uint16_tDATAd);其中函数voidNTUBE_DIS_GPIO_Config(void)是对单片机连接的数码管对应的A、B、C、D、E、F、G引脚的初始化。VoidNTUBE_CS_GPIO_Config(void)函数是对数码管四个片选端引脚的初始化。主要包含引脚的输出模式,输出速度和初始状态下引脚的电平状态。voidNTUBE_GPIO_Config(void)是将上面的两个函数包含在内,增加程序的可读性。函数voidNtube_DisplayEWSN(void)和函数voidDisplay(uint16_tDATAa,uint16_tDATAb,uint16_tDATAc,uint16_tDATAd)编写的是东西南北方向数码管的显示函数。具体函数见附录三。3蓝牙模块3.1HC-05蓝牙模块介绍本次交通灯的设计在特殊情况下可以实现手机远程对交通灯的控制。根据需求无线控制模块采用的是JDY-30蓝牙模块,根据数据手册可知,该模块是基于蓝牙3.0的协议标准,不仅性能稳定,而且数据传输快且信号强。它的工作频率2.4GHZ。图SEQ图\*ARABIC13蓝牙实物图如上图13所示,是本次设计所需蓝牙的实物图,该产品功能强大,带有内置PCB天线,同时支持UART接口,支持与SPP主蓝牙模块,Android手机SPP和计算机SSP蓝牙进行通信。此外,它还符合蓝牙SPP串行端口协议,其传输速率可以达到每秒8K以上。产品原理图14所示:图SEQ图\*ARABIC14蓝牙模块原理图尽管模块有许多引脚,但与STM32F103C8T6通信时仅使用了四个引脚,即TX,RX,VCC和GND。其中,VCC和GND是蓝牙模块的电源引脚,分别连接到电源的正极和负极。TX是发送数据线,连接到STM32串行端口的接收数据线RX。RX是接收数据线,与STM32微控制器串行端口的发送数据线连接。此外,蓝牙模块实现串口通信之前,还需要提前通过AT指令对蓝牙的各项参数进行设置。不同型号的的蓝牙其对应的AT指令集也有所不同。可根据数据手册查询。以本蓝牙为例:例子:设置配置密码为1234发送:AT+PIN1234\r\n返回:+PIN=1234此时表示配对密码已经配置成1234例子:设置115200波特率发送:AT+BAUD8\r\n返回:+BAUD=8此时模块波特率已经设置成115200波特率根据以上例子依次用AT对蓝牙进行名称、密码、波特率等的设置蓝牙就可以和单片机连接使用了。3.2串口通信串口是微型计算机重要的外部接口之一,在软件调试和程序下载过程中起着很重要的作用。现在使用的微型计算机基本上都带有串口,当然STM32单片机也不例外。STM32F103C8T6拥有USART1、USART2和USART3三路串口。串口是异步通信,在使用时只用到了三个引脚,分别包括TX、RX和GND。本次交通灯远程通信模块的设计用到的是STM32C8T6单片机的串口二和蓝牙模块连接,即单片机的TX(GPIOA2)和蓝牙模块的RX连接,单片机的RX(GPIOA3)和蓝牙模块的TX连接REF_Ref25354\r[8]REF_Ref25638\r[9]。STM32单片机在使用库函数开发时,不需要去配置寄存器,直接在库函数中去调用相关函数。在stm32f10x_usart.c和stm32f10x_usart.h这两个文件中包含了串口相关的函数。本设计中和串口相关的函数主要在bsp_usart.c和bsp_usart.h这两个文件中。在C文件下主要包含了两个函数,一个是串口初始化函数voidbsp_USART2_Init(u32bound);另一个是串口中断服务函数voidbsp_USART2_IRQHandler(void);串口初始化函数,在上面已经做了基本的概述,主要是配置对引脚的输入输出模式,端口的分时复用和串口模式和基本参数的设置,函数如下:NVIC_InitTypeDefNVIC_InitStructure;GPIO_InitTypeDefGPIO_InitStructure;USART_InitTypeDefUSART_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//GPIOA时钟RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE);USART_DeInit(USART2);//复位串口1//USART2_TXPA.2GPIO_InitStructure.GPIO_Pin=GPIO_Pin_2;//PA.2GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; //复用推挽输出GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化PA2//USART2_RX PA.3GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//浮空输入GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化通过蓝牙远程控制交通灯,主要是在串口二的中断服务函数里面实现的,当单片机接收到数据进入中断,根据接收到的命令执行相应的函数,函数如下:Voidbsp_USART2_IRQHandler(void){charRes;if(USART_GetFlagStatus(USART2,USART_FLAG_ORE)!=RESET){ USART_ReceiveData(USART2);} if(USART_GetITStatus(USART2,USART_IT_RXNE)!=RESET) { USART_ClearITPendingBit(USART2,USART_IT_RXNE); Res=USART_ReceiveData(USART2); //赋值 switch(Res) { case0X01:Action1();break;//夜间,全黄 case0X02:Action2();break; //禁止,全红 case0X03:Action3();break;//南北通行,南北绿,东西禁止,东西红 case0X04:Action4();break; //南北禁止,南北红,东西通行,东西绿 case0X05:Action5();break; //复位 default:break; }}}由上述程序可知,当蓝牙收到0X01—0X05指令时,分别执行函数Action1()—Action5()。其中Action1()函数是夜间模式的函数,主要内容倒计时显示0秒,同时所有路口只有黄色灯亮,当第二次接收到0X01指令时,退出该模式。Action2()函数是禁止通行,当单片机收到0X02指令时,所有路口都是红灯,同时倒计时显示99秒,当第二次接收到该指令时退出该模式。Action3()和Action4()两个函数分别显示的是南北通行和东西通行。当接收到0X03命令时,南北方向的LED显示绿灯,东西方向的LED显示红灯,同时数码管显示99。当接收到0X04命令时,东西方向的LED显示绿灯,南北方向的LED显示红灯,同时数码管显示99。同样当第二次接收到该指令时退出模式。Action5()是复位函数,主要目的是防止程序在运行过程中出错,让函数重新回到主函数中去执行正常操作。具体函数见附录三。附录附录一PCB图附录二部分重要程序主函数#include"stm32f10x.h"#include"bsp_SysTick.h"#include"bsp_led.h"#include"ntube.h"#include"bsp_SysTick.h"#include"bsp_usart.h"externuint32_tTimingDelay;intmain(void){ NTUBE_GPIO_Config(); SysTick_Init(); TrafficLightsConfig(); TimingDelay=1000; USART2_Init(9600); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组2:2位抢占优先级,2位响应优先级while(1){ /*南北方向——红灯东西方向——绿灯*/LED_SN_R(ON);LED_SN_Y(OFF);LED_SN_G(OFF);LED_EW_R(OFF);LED_EW_Y(OFF);LED_EW_G(ON);Display(DATA2,DATA3,DATA2,DATA0);Display(DATA2,DATA2,DATA1,DATA9);Display(DATA2,DATA1,DATA1,DATA8);Display(DATA2,DATA0,DATA1,DATA7);Display(DATA1,DATA9,DATA1,DATA6);Display(DATA1,DATA8,DATA1,DATA5);Display(DATA1,DATA7,DATA1,DATA4);Display(DATA1,DATA6,DATA1,DATA3);Display(DATA1,DATA5,DATA1,DATA2);Display(DATA1,DATA4,DATA1,DATA1);Display(DATA1,DATA3,DATA1,DATA0);Display(DATA1,DATA2,DATA0,DATA9);Display(DATA1,DATA1,DATA0,DATA8);Display(DATA1,DATA0,DATA0,DATA7);Display(DATA0,DATA9,DATA0,DATA6);Display(DATA0,DATA8,DATA0,DATA5);Display(DATA0,DATA7,DATA0,DATA4);Display(DATA0,DATA6,DATA0,DATA3);Display(DATA0,DATA5,DATA0,DATA2);Display(DATA0,DATA4,DATA0,DATA1);/*南北方向——红灯东西方向——黄灯*/LED_SN_R(ON);LED_SN_Y(OFF);LED_SN_G(OFF);LED_EW_R(OFF);LED_EW_Y(ON);LED_EW_G(OFF);Display(DATA0,DATA3,DATA0,DATA3);Display(DATA0,DATA2,DATA0,DATA2);Display(DATA0,DATA1,DATA0,DATA1);/*南北方向——绿灯东西方向——红灯*LED_SN_R(OFF);LED_SN_Y(OFF);LED_SN_G(ON);LED_EW_R(ON);LED_EW_Y(OFF);LED_EW_G(OFF);Display(DATA2,DATA0,DATA2,DATA3);Display(DATA1,DATA9,DATA2,DATA2);Display(DATA1,DATA8,DATA2,DATA1);Display(DATA1,DATA7,DATA2,DATA0);Display(DATA1,DATA6,DATA1,DATA9);Display(DATA1,DATA5,DATA1,DATA8);Display(DATA1,DATA4,DATA1,DATA7);Display(DATA1,DATA3,DATA1,DATA6);Display(DATA1,DATA2,DATA1,DATA5);Display(DATA1,DATA1,DATA1,DATA4);Display(DATA1,DATA0,DATA1,DATA3);Display(DATA0,DATA9,DATA1,DATA2);Display(DATA0,DATA8,DATA1,DATA1);Display(DATA0,DATA7,DATA1,DATA0);Display(DATA0,DATA6,DATA0,DATA9);Display(DATA0,DATA5,DATA0,DATA8);Display(DATA0,DATA4,DATA0,DATA7);Display(DATA0,DATA3,DATA0,DATA6);Display(DATA0,DATA2,DATA0,DATA5);Display(DATA0,DATA1,DATA0,DATA4);LED_SN_R(OFF);LED_SN_Y(ON);LED_SN_G(OFF);LED_EW_R(ON);LED_EW_Y(OFF);LED_EW_G(OFF);Display(DATA0,DATA3,DATA0,DATA3);Display(DATA0,DATA2,DATA0,DATA2);Display(DATA0,DATA1,DATA0,DATA1);}串口中断服务函数voidUSART2_IRQHandler(void){charRes;if(USART_GetFlagStatus(USART2,USART_FLAG_ORE)!=RESET) { USART_ReceiveData(USART2); }if(USART_GetITStatus(USART2,USART_IT_RXNE)!=RESET) //接收中断(接收到的数据必须是0x0d0x0a结尾) { USART_ClearITPendingBit(USART2,USART_IT_RXNE); Res=USART_ReceiveData(USART2); //USART1->DR,读取接收到的数据 switch(Res) { case0X01:Action1(); break;//夜间,全黄,00 case0X02:Action2();break; //禁止,全红,99 case0X03:Action3();break;//南北通行,南北绿99,东西禁止,东西红,00 case0X04:Action4();break; //南北禁止,南北红00,东西通行,东西绿,00 case0X05:Action5();break; //复位 default:break; }}}特殊状态下功能函数:voidAction1()//夜间,全黄,00{ while(1) {charRes;if(USART_GetFlagStatus(USART2,USART_FLAG_ORE)!=RESET) { USART_ReceiveData(USART2); } if(USART_GetITStatus(USART2,USART_IT_RXNE)!=RESET) //接收中断(接收到的数据必须是0x0d0x0a结尾) {USART_ClearITPendingBit(USART2,USART_IT_RXNE); Res=USART_ReceiveData(USART2); if(Res==0x01) break; }GPIO_ResetBits(GPIOA,TrafficLightsSN_Y_PIN|TrafficLightsEW_Y_case0X01:Action1(); break;00case0X02:Action2();break; 99case0X03:Action3();break;9900 case0X04:Action4();break; 0000 case0X05:Action5();break;default:break;voidAction1()/00{ while(1) {charRes;if(USART_GetFlagStatus(USART2,USART_FLAG_ORE)!=RESET) { USART_ReceiveData(USART2);if(USART_GetITStatus(USART2,USART_IT_RXNE)!=RESET) {USART_ClearITPendingBit(USART2,USART_IT_RXNE); Res=USART_ReceiveData(USART2); if(Res==0x01) break; }GPIO_ResetBits(GPIOA,TrafficLightsSN_Y_PIN|TrafficLightsEW_Y_PIN);//两边黄灯亮PIN);//两边黄灯亮GPIO_SetBits(GPIOA,TrafficLightsSN_R_PIN|TrafficLightsSN_G_PIN|TrafficLightsEW_R_PIN|TrafficLightsEW_G_PIN);//两边红绿灯灭GPIO_SetBits(Ntube_CS_Port,AllNtube_CS_Pin);//片选端置1GPIO_SetBits(GPIOB,AllNtube_DIS_Pin);//所有位置1GPIO_ResetBits(GPIOB,DATA0);//显示0 }}voidAction2()//禁止,全红,99{while(1) {charRes;if(USART_GetFlagStatus(USART2,USART_FLAG_ORE)!=RESET) { USART_ReceiveData(USART2); }if(USART_GetITStatus(USART2,USART_IT_RXNE)!=RESET) //接收中断(接收到的数据必须是0x0d0x0a结尾) {USART_ClearITPendingBit(USART2,USART_IT_RXNE); Res=USART_ReceiveData(USART2); if(Res==0x02) break; } GPIO_ResetBits(GPIOA,TrafficLightsSN_R_PIN|TrafficLightsEW_R_PIN);//两边红灯亮 GPIO_SetBits(GPIOA,TrafficLightsSN_Y_PIN|TrafficLightsSN_G_PIN|TrafficLightsEW_Y_PIN|TrafficLightsEW_G_PIN);//两边黄绿灯灭 GPIO_SetBits(Ntube_CS_Port,AllNtube_CS_Pin);//片选端置1 GPIO_SetBits(GPIOB,AllNtube_DIS_Pin);//所有位置1 GPIO_ResetBits(GPIOB,DATA9);//显示9} }voidAction3()//南北通行,南北绿99,东西禁止,东西红,99{while(1) {charRes;if(USART_GetFlagStatus(USART2,USART_FLAG_ORE)!=RESET) { USART_ReceiveData(USART2); }if(USART_GetITStatus(USART2,USART_IT_RXNE)!=RESET) //接收中断(接收到的数据必须是0x0d0x0a结尾){USART_ClearITPendingBit(USART2,USART_IT_RXNE);Res=USART_ReceiveData(USART2); if(Res==0x03) break; }GPIO_ResetBits(GPIOA,TrafficLightsSN_G_PIN|TrafficLightsEW_R_PIN);//南北绿,东西红GPIO_SetBits(GPIOA,TrafficLightsSN_R_PIN|TrafficLightsSN_Y_PIN|TrafficLightsEW_Y_PIN|TrafficLightsEW_G_PIN);//其他灯灭GPIO_SetBits(Ntube_CS_Port,AllNtube_CS_Pin);//片选端置1GPIO_SetBits(GPIOB,AllNtube_DIS_Pin);//所有位置1GPIO_ResetBits(GPIOB,DATA9);//显示9} }voidAction4()//南北禁止,南北红99,东西通行,东西绿,99{while(1) { charRes;if(USART_GetFlagStatus(USART2,USART_FLAG_ORE)!=RESET) { USART_ReceiveData(USART2); } if(USART_GetITStatus(USART2,USART_IT_RXNE)!=RESET) //接收中断(接收到的数据必须是0x0d0x0a结尾) {USART_ClearITPendingBit(USART2,USART_IT_RXNE); Res=USART_ReceiveData(USART2); if(Res==0x04) break; }GPIO_ResetBits(GPIOA,TrafficLightsSN_R_PIN|TrafficLightsEW_G_PIN);//南北红,东西绿GPIO_SetBits(GPIOA,TrafficLightsSN_G_PIN|TrafficLightsSN_Y_PIN|TrafficLightsEW_Y_PIN|TrafficLightsEW_R_PIN);//其他灯灭GPIO_SetBits(Ntube_CS_Port,AllNtube_CS_Pin);//片选端置1GPIO_SetBits(GPIOB,AllNtube_DIS_Pin);//所有位置1GPIO_ResetBits(GPIOB,DATA9);//显示9} }voidAction5()//复位{__set_FAULTMASK(1); NVIC_SystemReset(); }数码管显示程序voidNTUBE_DIS_GPIO_Config(void){GPIO_InitTypeDefNTUBE_DIS_GPIO_Config;RCC_APB2PeriphClockCmd(AllNtube_DIS_Clk,ENABLE);NTUBE_DIS_GPIO_Config.GPIO_Pin=AllNtube_DIS_Pin;NTUBE_DIS_GPIO_Config.GPIO_Mode=GPIO_Mode_Out_PP;NTUBE_DIS_GPIO_Config.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(Ntube_Dis_Port,&NTUBE_DIS_GPIO_Config); GPIO_SetBits(Ntube_Dis_Port,AllNtube_DIS_Pin); } /*共阴极数码片选CS_GPIO初始化*/voidNTUBE_CS_G

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论