基于STM32的红绿灯设计
基于protrus8设计电路原理图
先要思考明白十字路口红绿灯的逻辑
东西是一样的,南北是一样的。
东西红灯,南北就是绿灯,反之一样的,弄明白这些写代码就有思路了
中间的两个数码管是模拟真实红绿灯倒计时的用的,放置4个也行,但是为了方便观看就放一个了
下面放几张运行效果图,方便大家思考,我设计的是红绿灯都是倒计时30秒,黄灯倒计时3秒
代码
(注释在里面要好好思考,化为己用)
(这个小项目的代码稍微有点多,采用的是模块化编程,所以自己写程序的时侯要仔细,再认真理解,不要搞错了)
主函数 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速度为50MHzGPIO_Init(GPIOC, &GPIO_InitStructure); //初始化}
smg.h
#ifndef __SMG_H
#define __SMG_Hvoid 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_Hvoid 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
#ifndef __DELAY_H
#define __DELAY_Hvoid Delay(unsigned int count);
#endif
基于STM32的红绿灯设计相关推荐
- 基于stm32无线充电器设计
目录 一.项目描述 二.原理图 三.实物 四.论文 五.程序 六.资料清单 资料下载地址:基于STM32无线充电器设计 一.项目描述 本项目设计了一款用于小功率电子设备的无线充电器,该充电器由发送控制 ...
- 基于STM32指纹密码锁设计
基于STM32指纹密码锁设计 程序.仿真.原文 本设计主要由stm32f103rct6单片机.AS608指纹模块.LCD1602显示屏.AT24C02存储模块.继电器和指示灯组成,该指纹密码锁是以st ...
- 基于STM32的课程设计(毕业设计)——篮球记分器
写在前面-- 文章将介绍一个基于STM32的课程设计--篮球记分器.本设计由QFNU'2019级电子信息工程的CHQ小组完成.从开始到完成一共用了3个周的课余时间.C同学完成了作品的整体思路构建与程序 ...
- 基于STM32智能窗帘设计proteus仿真
本设计: 基于STM32智能窗帘设计(含源程序+proteus仿真) 仿真:proteus8.11 程序编译器:keil 5 编程语言:C语言 编号C0007 [腾讯文档]C0007 网盘链接 资料下 ...
- 基于stm32单片机电子秤设计
基于stm32电子秤设计 基于STM32F103C8T6计价电子秤 模块:采用STM32F103C8T6+LCD1602液晶显示+4*4矩阵按键+电子秤+hx711压力传感器 设计功能: 1.液晶显示 ...
- 基于stm32电子时钟设计
电子万年历的链接 基于STM32的电子万年历设计 摘 要 随着社会的发展,我们生活中充满了电子产品,我们IT信息人才就是要解决问题的.我们日常生活中需要了解时间,日期温度等模拟量,那么我们平时也可以看 ...
- 基于STM32的倾斜仪设计(一)—— 硬件设计(1)
开一篇博客记录一下自己的毕设工作. 在此次设计中,我们选用stm32作为控制核心和处理核心,并辅以485通信,可以实现倾斜仪与上位机的通信功能. 在设计完成之后,我们将其应用于工业现场,测量吊篮的倾斜 ...
- 基于STM32的数显温度计设计
一.设计目的 利用STM32完成数显温度计的制作,功能包括实时温度显示(摄氏度与华氏度),高温与低温报警,以及温区设置. 二.设计方案 系统采用STM2F103C8T6芯片实现,温度传感器采用DS18 ...
- 基于STM32的倾斜仪设计(二)—— 硬件设计(2)
2.4控制电路 本实验中选用的控制核心是STM32系列单片机,具体型号为STM32F103R8T6.STM32F103R8T6是一款嵌入式-微控制器集成电路,是ST旗下的一款常用的增强型系列微控制器. ...
最新文章
- 关于hql一些不常见但好用的技巧(个人总结)
- windows平台实现dll远程注入的简单例子
- Js获取地址栏参数值
- 新版SVT-AVS3发布 编码效率提升并提供更灵活的编码工具
- Swift--字符串和字符(二)
- glog日志库使用笔记
- 单例在多线程中的使用
- 酒驾、超速、加塞、路怒、拒载?来吧,我们专治各种不服
- Linux下完全删除用户
- 录录录屏(video321)--1款亲测好用的免费高清录屏软件。你一定无法拒绝(附使用教程)
- java 10的 6次方_【Java】 剑指offer(15) 数值的整数次方
- ***测试执行标准(Penetration Testing Execution Standard:PTES)
- 这游戏全服只有一个玩家,硬是坚挺了18年,官方竟还推新版本?
- 迷你迅雷+SqlServer2008r2下载
- bad substitution
- spark(1)---概述
- 2019全国计算机模拟题,2019年全国计算机二级Java考试模拟习题3
- PCB:FPC原材料,设计,加工,组装终极解决方案
- 《MLB棒球创造营》:走近棒球运动·华盛顿国民队
- Ten Places to Go for SharePoint Development Information
热门文章
- 从 keynote 大神到语雀画图大神,她是怎么做的?
- 《伤寒杂病论》序——张仲景
- 冒泡排序 (C语言)
- 上海全栈开发学院8月《专业二》第一周周考技能
- influxdb 笔记: Continuous Queries - CQs
- Python 快速排序算法【简单易懂,代码直接运行】
- 上传excel文件到服务器
- Eclipse,静态,继承,封装,this,super,重写,重载,多态,final,冒泡排序,选择排序,抽象类,接口,内部类
- 剧本翻译之SHUFFLE 6月23日
- JavaScript中的组合继承