基于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的红绿灯设计相关推荐

  1. 基于stm32无线充电器设计

    目录 一.项目描述 二.原理图 三.实物 四.论文 五.程序 六.资料清单 资料下载地址:基于STM32无线充电器设计 一.项目描述 本项目设计了一款用于小功率电子设备的无线充电器,该充电器由发送控制 ...

  2. 基于STM32指纹密码锁设计

    基于STM32指纹密码锁设计 程序.仿真.原文 本设计主要由stm32f103rct6单片机.AS608指纹模块.LCD1602显示屏.AT24C02存储模块.继电器和指示灯组成,该指纹密码锁是以st ...

  3. 基于STM32的课程设计(毕业设计)——篮球记分器

    写在前面-- 文章将介绍一个基于STM32的课程设计--篮球记分器.本设计由QFNU'2019级电子信息工程的CHQ小组完成.从开始到完成一共用了3个周的课余时间.C同学完成了作品的整体思路构建与程序 ...

  4. 基于STM32智能窗帘设计proteus仿真

    本设计: 基于STM32智能窗帘设计(含源程序+proteus仿真) 仿真:proteus8.11 程序编译器:keil 5 编程语言:C语言 编号C0007 [腾讯文档]C0007 网盘链接 资料下 ...

  5. 基于stm32单片机电子秤设计

    基于stm32电子秤设计 基于STM32F103C8T6计价电子秤 模块:采用STM32F103C8T6+LCD1602液晶显示+4*4矩阵按键+电子秤+hx711压力传感器 设计功能: 1.液晶显示 ...

  6. 基于stm32电子时钟设计

    电子万年历的链接 基于STM32的电子万年历设计 摘 要 随着社会的发展,我们生活中充满了电子产品,我们IT信息人才就是要解决问题的.我们日常生活中需要了解时间,日期温度等模拟量,那么我们平时也可以看 ...

  7. 基于STM32的倾斜仪设计(一)—— 硬件设计(1)

    开一篇博客记录一下自己的毕设工作. 在此次设计中,我们选用stm32作为控制核心和处理核心,并辅以485通信,可以实现倾斜仪与上位机的通信功能. 在设计完成之后,我们将其应用于工业现场,测量吊篮的倾斜 ...

  8. 基于STM32的数显温度计设计

    一.设计目的 利用STM32完成数显温度计的制作,功能包括实时温度显示(摄氏度与华氏度),高温与低温报警,以及温区设置. 二.设计方案 系统采用STM2F103C8T6芯片实现,温度传感器采用DS18 ...

  9. 基于STM32的倾斜仪设计(二)—— 硬件设计(2)

    2.4控制电路 本实验中选用的控制核心是STM32系列单片机,具体型号为STM32F103R8T6.STM32F103R8T6是一款嵌入式-微控制器集成电路,是ST旗下的一款常用的增强型系列微控制器. ...

最新文章

  1. 关于hql一些不常见但好用的技巧(个人总结)
  2. windows平台实现dll远程注入的简单例子
  3. Js获取地址栏参数值
  4. 新版SVT-AVS3发布 编码效率提升并提供更灵活的编码工具
  5. Swift--字符串和字符(二)
  6. glog日志库使用笔记
  7. 单例在多线程中的使用
  8. 酒驾、超速、加塞、路怒、拒载?来吧,我们专治各种不服
  9. Linux下完全删除用户
  10. 录录录屏(video321)--1款亲测好用的免费高清录屏软件。你一定无法拒绝(附使用教程)
  11. java 10的 6次方_【Java】 剑指offer(15) 数值的整数次方
  12. ***测试执行标准(Penetration Testing Execution Standard:PTES)
  13. 这游戏全服只有一个玩家,硬是坚挺了18年,官方竟还推新版本?
  14. 迷你迅雷+SqlServer2008r2下载
  15. bad substitution
  16. spark(1)---概述
  17. 2019全国计算机模拟题,2019年全国计算机二级Java考试模拟习题3
  18. PCB:FPC原材料,设计,加工,组装终极解决方案
  19. 《MLB棒球创造营》:走近棒球运动·华盛顿国民队
  20. Ten Places to Go for SharePoint Development Information

热门文章

  1. 从 keynote 大神到语雀画图大神,她是怎么做的?
  2. 《伤寒杂病论》序——张仲景
  3. 冒泡排序 (C语言)
  4. 上海全栈开发学院8月《专业二》第一周周考技能
  5. influxdb 笔记: Continuous Queries - CQs
  6. Python 快速排序算法【简单易懂,代码直接运行】
  7. 上传excel文件到服务器
  8. Eclipse,静态,继承,封装,this,super,重写,重载,多态,final,冒泡排序,选择排序,抽象类,接口,内部类
  9. 剧本翻译之SHUFFLE 6月23日
  10. JavaScript中的组合继承