栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

STM32—交通灯(人行道)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

STM32—交通灯(人行道)

 数码管的使用看这里→STM32-4位数码管动态显示0~9999

源码和仿真下载https://download.csdn.net/download/jzkj201/85445794

目录

 代码

按键

相关灯的亮灭 

数码管显示倒计时 

1.现象说明当有行人过马路的时候,按下按钮,黄灯闪烁5次,人行道变绿灯,车行道变红灯,并进行15S倒计时

2.使用的STM32F103R8C8芯片,可以参考资源内部的配置文件,来进行配置其他STM32的芯片 3.可扩展为十字路口的红绿灯

这里的程序用的HAL库编写

Proteus仿真

 代码

按键

用中断来触发按键

//这里的按键用的中断来触发的
int key=0;//中断标记
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)//中断处理函数
{
		key=1;
}

延迟函数的目的是为了帮助数码管实现快刷,可以利用定时器来完成。

void delay(int time)//延时函数
{
uint16_t k,l;
  for(k=0;k 

相关灯的亮灭  

这里是通过给对应端口写高低电平实现的亮灭,可以使用位操作来简化代码 

位操作:

        基本位操作运算符:与运算:&;或运算:|;取反: ~;异或: ^;左移: <<;右移: >> 

//人行道
void Sidewalk_Red(){
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,0);
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_1,1);
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_2,1);
}
void Sidewalk_Yellow(){
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,1);
	HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_1);
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_2,1);
}
void Sidewalk_Green(){
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_0,1);
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_1,1);
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_2,0);
}
//车行道
void Road_Red(){
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3,0);
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_4,1);
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_5,1);
}
void Road_Yellow(){
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3,1);
	HAL_GPIO_TogglePin(GPIOC,GPIO_PIN_4);
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_5,1);
}
void Road_Green(){
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_3,1);
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_4,1);
	HAL_GPIO_WritePin(GPIOC,GPIO_PIN_5,0);
}

数码管显示倒计时 
//数码管显示
void display(uint8_t num1){
uint8_t SEC_tab_cc[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管显示
	uint8_t WEI_tab[]={0x0e,0x0d,0x0b,0x07};//数码管选段
	uint8_t Number_for_show;
	uint8_t shi,ge;
  while (1)
  {
		shi=num1/10;
		ge=num1%10;
		uint8_t Disp_tab[]={0xff,0xff,shi,ge};
			for(int i=0;i<50;i++){//显示时间
	for(uint8_t i=0;i<4;i++)
		{
			Number_for_show=Disp_tab[i];
			GPIOA->ODR=(GPIOA->ODR&0xffffff00)|SEC_tab_cc[Number_for_show]|WEI_tab[i]<<8;
			GPIOA->ODR=(GPIOA->ODR&0xfffff0ff)|WEI_tab[i]<<8;
		  delay(100);//快刷,消影
				}
			}
   	 break;
    }
}

主函数

	int j;
		if (key==1){
			HAL_Delay(3000);
				for(j=5;j>0;j--){
				Sidewalk_Yellow();
                Road_Yellow();
				GPIOA->ODR=0x00;//关闭数码管
				HAL_Delay(1000);
			}
				Sidewalk_Green();
				Road_Red();
			for(j=15;j>=0;j--){
				display(j);
				}
		for(j=5;j>0;j--){
				Sidewalk_Yellow();
				Road_yellow();
				GPIOA->ODR=0x00;//关闭数码管
				HAL_Delay(1000);
			}
			key=0;
		}
		else
			{
			GPIOA->ODR=0x00;
			Road_green();
			Sidewalk_Red();
		}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/925906.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号