熱乎乎的交通燈來了,基于stm32的交通燈,有仿真和源代碼,歡迎大家下載---加油中國
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
51hei.gif (92.15 KB, 下載次數: 17)
下載附件
2023-5-9 16:22 上傳
51hei.png (31.83 KB, 下載次數: 53)
下載附件
2020-11-28 21:51 上傳
單片機源程序如下:
- #include "stm32f103_config.h"
- #define LED595_DATA PBout(7)
- #define LED595_CLK PBout(8)
- #define LED595_LATCH PBout(9)
- #define DXR PBout(0)
- #define DXG PBout(1)
- #define DXY PBout(10)
- #define NBR PBout(11)
- #define NBG PBout(12)
- #define NBY PBout(13)
- unsigned char duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- void io_Init(void)//初始化GPIO
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; //GPIO_PIN0-16
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOB, &GPIO_InitStructure);
- GPIO_ResetBits(GPIOB,GPIO_Pin_All);
- }
- void _delay_ms(int i)//延時函數
- {
- u16 j;
- while(i--)
- {
- for(j=0;j<5600;j++);
- }
- }
- void _delay_us(int i)//延時函數
- {
- u16 j;
- while(i--)
- {
- for(j=0;j<5;j++);
- }
- }
- void inp(unsigned char OutData)
- {
- unsigned char i;
- for(i=0; i<8; i++) //將8位數據按位發送,先發送高字節后發送低字節
- {
- LED595_CLK=0;//時鐘線低電平
- _delay_us(1);
- if( (OutData & 0x80) == 0x80)//判斷數據高低位
- {
- LED595_DATA=1; //數據線高電平
- }
- else
- {
- LED595_DATA=0; //數據線低電平
- }
- _delay_us(1);
- OutData = OutData << 1; //數據左移1位
- LED595_CLK=1; //時鐘線高電平
- _delay_us(1);
- }
- }
- void LED595SendData(int a,int b)
- {
- inp(duan[b%10]);
- inp(duan[b/10]);
-
- inp(duan[a%10]);
- inp(duan[a/10]);
-
- LED595_LATCH=0;
- _delay_us(1);
- LED595_LATCH=1;
- _delay_us(1);
- }
- int main(void)//主函數
- {
- int state=0;
- int num=30;
-
-
- RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_5);//系統時鐘初始化
- io_Init();//引腳初始化
- uart_init(9600);//串口初始化
- sendDat(0x02);sendDat(0x04);
- while(1)
- {
- num--;//倒計時
- if(num==0)
- {
- state++;if(state==4)state=0;//四種模式對應
- /*
- (1)南北紅燈 東西綠燈(30秒)
- (2)南北紅燈 東西黃燈(05秒)
- (3)南北綠燈 東西紅燈(30秒)
- (4)南北黃燈 東西紅燈(05秒)
- */
- switch (state)//更新時間
- {
- case 0: num=30;sendDat(0x02);sendDat(0x04);break;
- case 1: num= 5;sendDat(0x03);sendDat(0x04);break;
- case 2: num=30;sendDat(0x01);sendDat(0x05);break;
- case 3: num= 5;sendDat(0x01);sendDat(0x06);break;
- }
- }
-
- switch (state)//根據狀態點亮LED
- {
- case 0: DXR=0;DXY=0;DXG=1;NBR=1;NBY=0;NBG=0;break;
- case 1: DXR=0;DXY=1;DXG=0;NBR=1;NBY=0;NBG=0;break;
- case 2: DXR=1;DXY=0;DXG=0;NBR=0;NBY=0;NBG=1;break;
- case 3: DXR=1;DXY=0;DXG=0;NBR=0;NBY=1;NBG=0;break;
- }
-
- switch (state)//根據狀態顯示當前倒計時
- {
- case 0: LED595SendData(num,num+5);break;
- case 1: LED595SendData(num,num);break;
- case 2: LED595SendData(num+5,num);break;
- case 3: LED595SendData(num,num);break;
- }
-
- _delay_ms(100);//延時 速度快慢調這里
- }
- }
復制代碼
所有資料51hei提供下載:
stm32交通燈.7z
(265.03 KB, 下載次數: 231)
2020-11-28 21:52 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|