【基于單片機智能紅綠燈控制系統的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

提交評論