交通灯功能实现:
1. 交通灯基本功能:包括绿灯倒计时、红灯倒计时、绿灯常亮、绿灯闪烁、黄灯亮、黄灯闪烁、红灯亮、红灯闪烁等功能及其衔接;
2. 要求在任意时刻,可以通过按键设置任意方向为红灯(或绿灯);
3. 红、绿灯持续时间可以通过按键设置;
4. 交通灯能够关闭,关闭类型有两种:
a) 所有灯全不亮;
b) 所有黄灯闪烁、其余灯不亮。
5. 模拟人行过街红绿灯(作为独立功能测试
a) 按下按键,对应方向车道开始绿灯倒计时(倒计时时间可以设置),时间到后,变黄灯,再变红灯;
b) 红灯倒计时时长可设置;
c) 红灯重新变为绿灯后,必选间隔特定时间(可设置)后,才能再次响应按键,否则不响应。
STM32F103单片机源程序如下:
- #include "traffic.h"
- #include "systick.h"
- #include "sys.h"
- u16 m=1000;//定义一个变量来设置交通灯时间加减
- void traffic_init(void)//初始化IO
- {
-
- //定义一个GPIO_InitTypeDef类型的结构体
- GPIO_InitTypeDef GPIO_InitStructure;
- //开启GPIOC的外设时钟
- RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOE, ENABLE );
- //选择需要控制的GPIO引脚
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
- //设置引脚模式为通用推挽输出
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
- //设置引脚速率为50MHz
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- //调用函数库,初始化GPIO
- GPIO_Init( GPIOE, &GPIO_InitStructure );
-
- GPIO_ResetBits(GPIOE, GPIO_Pin_All);
-
-
- }
- void traffic_display(void) //交通灯显示子函数
- {
-
-
- R1=1;G2=1;
- delay_ms(m); delay_ms(m); delay_ms(m);
- delay_ms(m); delay_ms(m); delay_ms(m);
-
- Y2=1;delay_ms(1000);
- Y2=0;delay_ms(1000);
- Y2=1;delay_ms(1000);
- Y2=0;delay_ms(1000);
- Y2=1;delay_ms(1000);
- Y2=0;delay_ms(1000);
-
- R1=0;G2=0;
-
-
- R2=1;G1=1;
- delay_ms(m); delay_ms(m); delay_ms(m);
- delay_ms(m); delay_ms(m); delay_ms(m);
- Y1=1;delay_ms(1000);
- Y1=0;delay_ms(1000);
- Y1=1;delay_ms(1000);
- Y1=0;delay_ms(1000);
- Y1=1;delay_ms(1000);
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码 仿真电路:无
原理图:无
Keil代码下载:
Test 6.rar
(280.17 KB, 下载次数: 291)
|