基于STM32的红绿灯设计

这篇具有很好参考价值的文章主要介绍了基于STM32的红绿灯设计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基于protrus8设计电路原理图

基于STM32的红绿灯设计

先要思考明白十字路口红绿灯的逻辑

东西是一样的,南北是一样的。

东西红灯,南北就是绿灯,反之一样的,弄明白这些写代码就有思路了

中间的两个数码管是模拟真实红绿灯倒计时的用的,放置4个也行,但是为了方便观看就放一个了

下面放几张运行效果图,方便大家思考,我设计的是红绿灯都是倒计时30秒,黄灯倒计时3秒

基于STM32的红绿灯设计 基于STM32的红绿灯设计 基于STM32的红绿灯设计

代码

(注释在里面要好好思考,化为己用)

(这个小项目的代码稍微有点多,采用的是模块化编程,所以自己写程序的时侯要仔细,再认真理解,不要搞错了)

主函数 main.c

#include "stm32f10x.h"
#include "smg.h"
#include "Delay.h"
#include "led.h"

uint16_t table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uint16_t disp[2];
uint16_t temp,i;

void zxm_Init(void)							//字形码函数
{
			SMG_Init();								//数码管初始化
			disp[1] = table[i/10];				//数码管显示十位数字的字形码
			disp[0] = table[i%10];				//数码管显示个位数字的字形码
			temp = (disp[1]<<8)|(disp[0]&0x0ff);	//十位数的字形码左移8位,然后与个位数的字形码合并
			GPIO_Write(GPIOC,temp);
			Delay(100);
}	

int main(void)
{
	LED_Init();			//led初始化

	while(1)
	{
		for(i=30;i>0;i--)			//数码管从30开始自减,到0结束
		{
			LED1_ON();					//东西红灯亮
			LED6_ON();					//南北绿灯亮
			zxm_Init();
		}
		for(i=3;i>0;i--)			//上一个循环结束进入下一个,黄灯开始倒计时
		{
				LED1_OFF();				//东西红灯灭
				LED6_OFF();				//南北绿灯灭
				LED2_ON();				//东西黄灯亮
				LED5_ON();				//南北黄灯亮
				zxm_Init();
		}
		for(i=30;i>0;i--)
		{
			LED2_OFF();					//东西黄灯灭
			LED5_OFF();					//南北黄灯灭
			LED3_ON();					//东西绿灯亮
			LED4_ON();					//南北红灯亮;
			zxm_Init();
		}
		for(i=3;i>0;i--)
		{
			LED3_OFF();					//东西绿灯灭
			LED4_OFF();					//南北红灯灭
			LED2_ON();					//东西黄灯亮
			LED5_ON();					//南北黄灯亮
			zxm_Init();
		}
		LED2_OFF();					//东西黄灯灭
		LED5_OFF();					//南北黄灯灭
		
		//这样就结束了一个完整的循环,最后把黄灯灭掉,让程序一直在while里循环
	}
}


 数码管函数

smg.c

#include "stm32f10x.h"
#include "smg.h"

void SMG_Init(void)
{
	GPIO_InitTypeDef  GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); 	//使能GPIOC时钟
	GPIO_InitStructure.GPIO_Pin = 0xffff;			    //引脚配置
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   	//配置引脚为推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   //GPIOB速度为50MHz
    GPIO_Init(GPIOC, &GPIO_InitStructure);				//初始化
	
}

smg.h

#ifndef __SMG_H
#define __SMG_H

void SMG_Init(void);
#endif

LED灯函数

led.c

#include "stm32f10x.h"
#include "led.h"

void LED_Init(void)
{
	GPIO_InitTypeDef  GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); 	
	GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2                             
                                    |GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;			
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;   
    GPIO_Init(GPIOB, &GPIO_InitStructure);				
	

}
void LED1_ON(void)
{
	GPIO_SetBits(GPIOB,GPIO_Pin_0);
}
void LED1_OFF(void)
{
	GPIO_ResetBits(GPIOB,GPIO_Pin_0);
}
void LED2_ON(void)
{
	GPIO_SetBits(GPIOB,GPIO_Pin_1);
}
void LED2_OFF(void)
{
	GPIO_ResetBits(GPIOB,GPIO_Pin_1);
}
void LED3_ON(void)
{
	GPIO_SetBits(GPIOB,GPIO_Pin_2);
}
void LED3_OFF(void)
{
	GPIO_ResetBits(GPIOB,GPIO_Pin_2);
}
void LED4_ON(void)
{
	GPIO_SetBits(GPIOB,GPIO_Pin_3);
}
void LED4_OFF(void)
{
	GPIO_ResetBits(GPIOB,GPIO_Pin_3);
}
void LED5_ON(void)
{
	GPIO_SetBits(GPIOB,GPIO_Pin_4);
}
void LED5_OFF(void)
{
	GPIO_ResetBits(GPIOB,GPIO_Pin_4);
}
void LED6_ON(void)
{
	GPIO_SetBits(GPIOB,GPIO_Pin_5);
}
void LED6_OFF(void)
{
	GPIO_ResetBits(GPIOB,GPIO_Pin_5);
}

led.h

#ifndef __LED_H
#define __LED_H

void LED_Init(void);

void LED1_ON(void);
void LED1_OFF(void);
void LED2_ON(void);
void LED2_OFF(void);
void LED3_ON(void);
void LED3_OFF(void);
void LED4_ON(void);
void LED4_OFF(void);
void LED5_ON(void);
void LED5_OFF(void);
void LED6_ON(void);
void LED6_OFF(void);
#endif

延时函数

Delay.c

#include "stm32f10x.h"

void Delay(unsigned int count)						 
{
	unsigned int i;
	for(;count!=0;count--)
	{
		i=5000;
		while(i--);
	}	
}

Delay.h文章来源地址https://www.toymoban.com/news/detail-506882.html

#ifndef __DELAY_H
#define __DELAY_H

void Delay(unsigned int count);
#endif

到了这里,关于基于STM32的红绿灯设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 交通信号灯课程设计(红绿灯)

    一、设计指标 1.1对设计课题进行简要阐述        由一条主干道和一条支干道的汇合点形成十字交叉路口,为确保车辆安全、迅速地通行,在交叉路口的每个人口处设置了红、绿、黄三色信号灯。        (1)用红、绿、黄三色发光二极管作信号灯,用传感器或逻辑开关

    2024年02月09日
    浏览(50)
  • 基于OpenCV的红绿灯识别

    为了实现轻舟航天机器人实现红绿灯的识别,决定采用传统算法OpenCV视觉技术。 航天机器人的红绿灯识别主要基于传统计算机视觉技术,利用OpenCV算法对视频流进行处理,以获取红绿灯的状态信息。具体而言,该系统通过连接工控机摄像头读取视频流,将视频帧转换成HSV色彩

    2024年02月15日
    浏览(39)
  • 红绿灯交通灯控制逻辑电路设计

    最近无聊整理一下以前的笔记之类的,发现以前的课设,简陋粗糙,还是记录下吧。 此设计有具体接线说明 实验箱大概如下图 课设任务及要求 1、满足如图 1 顺序工作流程 t为时间单位 2、满足两个方向的工作时序 即东西方向亮红灯时间应等于南北方向亮黄、绿灯时间之和,

    2024年02月10日
    浏览(52)
  • 基于51单片机的简易红绿灯电路

            单片机P1口控制数码管段选,P2口控制数码管位选,P0口控制两边的灯光。         首先是数码管控制函数,声明一个变量shift作为数码管位移量,首先进行位选,这里数码管使用的是共阴极数码管,所以位选脚为低时点亮,因为位移时除了置1的位保持1,其他的

    2024年02月11日
    浏览(36)
  • C51单片机 简单的交通红绿灯设计一

    各位读者朋友们你们好,感谢你们能点开这篇文章,作为一个非硬件专业的学生,我没有扎实的硬件基础,很担心自己所写内容没有理论基础或者存有漏洞,如果有不对的地方,期待您能指正,一起学习。交通红绿灯的设计算是51的小入门。涉及仅有数码管,LED交通灯,Dela

    2023年04月27日
    浏览(40)
  • 基于51单片机十字路口红绿灯交通灯+紧急模式

    +无黄灯+紧急 仿真:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:J010 十字路口交通灯由红、绿两色LED显示器组成,LED显示器显示切换倒计时,以秒为单位,每秒更新一次;为确保安全,绿LED计数到0转红,经5秒延时(显示红色0)后,另一道开始绿色倒计时。

    2024年02月04日
    浏览(58)
  • 深度学习之基于Yolov5闯红灯及红绿灯检测系统

    欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。    基于Yolov5的闯红灯及红绿灯检测系统是一种使用计算机视觉和深度学习技术实现的交通监控系统。它能够检测交通信号灯的状态(红灯、黄灯、绿灯),并识别车辆是否违反交通信号(闯红

    2024年02月06日
    浏览(38)
  • vivado交通灯设计verilog代码ego1板红绿灯时间可修改

    名称:vivado交通灯设计verilog代码ego1板红绿灯时间可修改 软件:VIVADO 语言:Verilog 代码功能: 十字路口红绿灯设计; 1、每次通行时间可在0-99秒内设定,可以通过按键修改通行时间。 2、路口四边均设红黄绿三色信号灯和用于计时的两位数码管显示时间(十进制数)。 3、黄灯亮

    2024年02月04日
    浏览(41)
  • 《数字电子电路》 课程设计:十字路口红绿灯自动控制系统(下)(multisim仿真及PCB实现)

    书接上篇,本片笔者将进行multisim仿真和AD20的PCB实现 五、仿真及结果 1、单元电路仿真结果 ⑴ 脉冲信号发生器: 将NE555独立测试,周期为998.17ms,近似为1s,满足设计指标。 ⑵ 倒计时计数器: 先将25进制倒计时计数器搭好,仿真验证其功能正常,如下图所示 :   2、 整体仿

    2024年02月04日
    浏览(54)
  • 【红绿灯识别】计算机视觉红绿灯识别【含GUI Matlab源码 2713期】

    ✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。 🍎个人主页:海神之光 🏆代码获取方式: 海神之光Matlab王者学习之路—代码获取方式 ⛳️座右铭:行百里者,半于九十。 更多Matlab仿真内容点击👇 Matlab图像处理(进阶版) 路径规划

    2024年01月19日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包