STM32简易交通灯设计(定时可调)

发布者:数字行者最新更新时间:2015-06-23 来源: 51hei关键字:STM32  交通灯设计  定时可调 手机看文章 扫描二维码
随时随地手机看文章
//按键key1 设置红灯时间
  按键key2 设置绿灯时间
  按键key3 设置黄灯时间
 
#include
#include "sys.h"

 
#include "delay.h"
#include "usart.h"
#include "stdlib.h"

 
static int G=0,R=0,Y=0;   //设置绿,红,黄灯时间变量

 
#include "lcd.h"
#include "key.h"
#include "time.h"

 
//-----------  按键函数----------
void scan_key1()
{
static u8 i,j;
if(key1==0)
{
if(i==0)
{
 j++;
 if(j>3)
 {
  i=1;j=0;
  R++;
  if(R>20)R=0;
printf("key1 is inputed ");
 }
}
}
else
{
i=j=0;
}
}

 
void scan_key2()
{
  static u8 i,j;
if(key2==0)
{
if(i==0)
{
 j++;
 if(j>3)
 {
  i=1;j=0;
  G++;
  if(G>20)G=0;
   printf("key2 is inputed. ");
 }
}
}
else
{
i=j=0;
}
}

 
void scan_key3()
{
  static u8 i,j;
if(key3==1)
{
if(i==0)
{
 j++;
 if(j>3)
 {
  i=1;j=0;
  Y++;
  if(Y>20)Y=0;
   printf("key3 is inputed. ");
 }
}
}
else
{
i=j=0;
}
}

 

 
//各指示灯显示秒数函数
void LED_RED(u8 k)
{
 LCD_ShowNum(120,55,k,2,16);
}
void LED_YELLOW(u8 k)
{
 LCD_ShowNum(120,145,k,2,16);
}
void LED_GREEN(u8 k)
{
 LCD_ShowNum(120,235,k,2,16);
}
[page]
 
//-----定时设置函数-------
void LED_SET_GREEN(u8 k)
{
  LCD_ShowNum(160,235,k,2,16);

 
}
void LED_SET_YELLOW(u8 k)
{
 LCD_ShowNum(160,145,k,2,16);
}
void LED_SET_RED(u8 k)
{
 LCD_ShowNum(160,55,k,2,16);
}

 
//-----定时器中断函数---扫描按键和显示设定值用----
void TIM3_IRQHandler(void)
{
 if(TIM3->SR&0x0001)
 {

 
  scan_key1();
  scan_key2();
  scan_key3();
   LED_SET_RED(R);
 LED_SET_GREEN(G);
 LED_SET_YELLOW(Y);
 }
 TIM3->SR=~(1<<0);
}

 
//------主函数-----------
int main(void)
 u16 code;   //TFT驱动芯片代号
 int i;
 Stm32_Clock_Init(9);
 delay_init(72);
 uart_init(72,9600);
 printf("uart is ok. ");
 Timer_init(300,7199);   //定时器初始化 设定溢出时间是 30ms 
 printf("time_init is ok. ");
 LCD_Init(); //TFT-LCD初始化
 printf("lcd_init is ok. ");
 key_init();     //按键I/O口设置初始化
 printf("key_init is ok. ");
 JTAG_Set(JTAG_SWD_DISABLE); //关闭JTAG调试器
 code=LCD_ReadReg(0x0000);
 delay_ms(500);
 printf("deiver code is %ld",code); //读取驱动芯片型号是发送到串口
 LCD_Fill(30,200,100,270,BLACK);
 LCD_Fill(30,110,100,180,BLACK);
 LCD_Fill(30,20,100,90,BLACK);
 LCD_ShowString(110,15,"Show");
 LCD_ShowString(110,30,"Time");
 LCD_ShowString(160,15,"Set ");
 LCD_ShowString(160,30,"Time");
 LED_GREEN(0);
 LED_YELLOW(0);
 LED_RED(0);
  while(1)
 {
 for(i=G;i>=0;i--)  //绿灯控制
 {
  LED_GREEN(i);   
  LCD_Fill(30,200,100,270,GREEN);
 delay_ms(1000);
 LCD_Fill(30,200,100,270,BLACK);
 delay_ms(1000);
 }
 for(i=Y;i>=0;i--) //黄灯控制
 {
  LED_YELLOW(i);
  LCD_Fill(30,110,100,180,YELLOW);
  delay_ms(1000);
  LCD_Fill(30,110,100,180,BLACK);
  delay_ms(1000);
 }
 for(i=R;i>=0;i--) //红灯控制
 {
  LED_RED(i);
  LCD_Fill(30,20,100,90,RED);
  delay_ms(1000);
  LCD_Fill(30,20,100,90,BLACK);
  delay_ms(1000);
 }
 }
}

//-------各类库函数省略---------
关键字:STM32  交通灯设计  定时可调 引用地址:STM32简易交通灯设计(定时可调)

上一篇:STM32窗口看门狗程序
下一篇:飞思卡尔推出基于ARM Cortex-M技术的业界最安全的微控制器

推荐阅读最新更新时间:2024-03-16 14:04

STM32的ADC及内部温度传感器的使用
STM32自带1-3个ADC模块,采样精度达到了12位,比起当年使用的AVR单片机的10位来说,上了个小档次了~本测试程序采用了ADC DMA的中断方式,这样CPU就可以把ADC的任务交给DMA这个勤劳肯干的部下了,当DMA完成了一次任务之后会产生中断,告诉CPU可以来查收结果了!DMA也是在嵌入式系统中非常常用的,例如在LCD中,数据拷贝中等。。。在STM32F103RBT6中,ADC1和ADC2共用一组管脚   总体编程思路和顺序如下:   1.初始化RCC相关,使得系统有时钟,功能模块如ADC、DMA有时钟。   2.GPIO相关初始化,比如常用的指示灯,ADC的管家要设置为输入等。   3.NVIC向量中断的配置,
[模拟电子]
STM32 usb_mem.c和usb_sil.c文件的分析
这两个c文件都还算是很简单的,先讲讲usb_mem.c这个文件。从文件名就能知道跟内存有关,这个文件主要定义了两个函数,一个读双缓冲区PMA的数据PMAToUserBufferCopy(),另一个是写数据到双缓冲区PMA,UserToPMABufferCopy。如果,当你的usb设备接收到了数据,当然数据存放在PMA中了,我们要读出数据就要用到PMAToUserBufferCopy()函数了,如果我们想要发送数据给usb主机,就要将你要发送的数据拷贝到PMA缓冲区中了,这样才能发送出去,原理跟串口类似。 /*************************************************************
[单片机]
STM32 HAL库 printf输出重定向
STM32 HAL库串口输出函数为 HAL_UART_Transmit(&huart1,(uint8_t*)&ch,1,0xFFFF) #ifdef __GNUC__ /* With GCC, small printf (option LD Linker- Libraries- Small printf set to 'Yes') calls __io_putchar() */ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) #else #define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f) #endif
[单片机]
STM32 驱动液晶LCD12864
#include led.h #undef APP_DE #include hawk.h 液晶采用晶联讯电子的JLX19264G-260 #define FEEDDOG() GPIOC- ODR^= GPIO_Pin_0 //LCD IO初始化 void LCD_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOA,ENABLE);//使能PB,端口时钟 GPIO_InitStructure.GPIO_P
[单片机]
意法半导体的STM32 Power Shield: EEMBC™认证功耗检测技术
意法半导体的STM32 Power Shield电路板让开发人员能够精确地查看嵌入式设计的功耗情况,硬件采用 EEMBC™ 指定的与新的IoTConnect和 ULPMark™ (Energy Monitor V2.0)基准框架参考平台相同的硬件。 STM32 Power Shield板 ( X-NUCLEO-LPM01A )兼容 STM32 Nucleo开发板,能够动态监测各种工况下的电流值。内置显示屏可直接显示电流值,无需使用万能表即可查看读数。当配合EEMBC IoTConnect和/或 ULPMark时,STM32 Power Shield将提供一个内容更多的图形用户界面,直接显示基准测量结果和能耗情况。100nA
[嵌入式]
意法半导体的<font color='red'>STM32</font> Power Shield: EEMBC™认证功耗检测技术
stm32之keil开发环境搭建
本篇内含工程建立以及JLINK设置,内容借鉴了前人经验,在此感谢各位前人的贡献。 1 下载stm32F10x的官方库 http://www.st.com/web/en/catalog/tools/PF257890 2 新建工程 工程名设为stm32_demo,选择芯片型号为STM32F103B,如图, 因为下载的stm32库中有启动代码,所以这里选择 否 ,不拷贝启动代码。 在工程文件下,新建Startup 、Headers、User、Libraries、CMSIS、Lists、Output文件夹。 文件夹 用途 Startup 启动文件,Flash在16~32Kb小容量,64~128Kb中
[单片机]
<font color='red'>stm32</font>之keil开发环境搭建
基于STM32芯片和TFT-LCD的便携式心电图仪设计
便携式心电图设备的出现使心电信号能够在更多场合进行采集,它既可以实现可移动化,又可以实时的对心电信号进行分析。通过内置大容量存储器件能够对患者进行长时间的实时监护,并记录患者的心电数据,通过USB接口与PC机进行数据传输,以提交到专业医疗机构做进一步分析和诊断。 1、系统整体设计概述 系统原理框图可以用图1表示。心电信号由电极获取,送入心电采集电路,经前置放大、主放大、高低通滤波、电平抬升后,得到符合要求的心电信号,并送入到STM32的ADC进行AD转换。为了更好地抑制干扰信号,在电路中还引入了右腿驱动电路。系统控制芯片采用STM32,TFT-LCD的触摸功能加上少量按键可以建立良好的人机交互环境,可以通过LCD实时显示和回放
[单片机]
基于<font color='red'>STM32</font>芯片和TFT-LCD的便携式心电图仪<font color='red'>设计</font>
简述stm32的usart的功能特点
关于STM32的启动流程,网上有的资料在讨论几种boot模式,有的在回答启动文件的内容,在查阅了很多资料后,本文给出一个比较全面的总结和回答。 1. 根据boot引脚决定三种启动模式 复位后,在 SYSCLK 的第四个上升沿锁存 BOOT 引脚的值。BOOT0 为专用引脚,而 BOOT1 则与 GPIO 引脚共用。一旦完成对 BOOT1 的采样,相应 GPIO 引脚即进入空闲状态,可用于其它用途。BOOT0与BOOT1引脚的不同值指向了三种启动方式: 从主Flash启动。主Flash指的是STM32的内置Flash。选择该启动模式后,内置Flash的起始地址将被重映射到0x00000000地址,代码将在该处开始执行。一般我
[单片机]
简述<font color='red'>stm32</font>的usart的功能特点
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved