找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2311|回复: 0
打印 上一主题 下一主题
收起左侧

蓝桥杯嵌入式模拟题—STM32里程仪的设计程序

[复制链接]
跳转到指定楼层
楼主
这是我最近刚完成的蓝桥杯嵌入式模拟题--里程仪的程序设计,经实验在开发板上功能基本实现。附件里包含程序源码,欢迎各位前来下载。


单片机源程序如下:
#include "stm32f10x.h"
#include "lcd.h"

#include "io.h"
#include "i2c.h"
#include <stdio.h>


__IO u8 Flag_key = 1;//50ms
__IO u8 Flag_led = 0;//500ms
__IO u8 Flag_catch = 0;//pwm捕获标志位i
__IO u8 Flag_check = 0;//200ms刷新显示信息
__IO u8 Flag_stop_check = 0;//1500ms检测是否停车
__IO u8 Flag_car = 0;//开车监测
__IO u8 Flag_time = 0;//时间标志位
__IO u32 TimeVar=0;//计时缓存
u8 THH=0,TMM=0,TSS=0;//时间显示
__IO uint16_t IC2Value;//pwm捕获缓存
__IO uint32_t Frequency_in;//输入频率
__IO uint32_t Frequency_out = 0;//输出频率
#if PWM_MODE
__IO uint16_t CCR1_Val = 5000;//频率=10000/CCR1_Val;
#else

#endif

__IO u8 Total_km = 0;//总公里数
__IO float Total_km_temp;//总公里计数缓存
__IO float km = 0;//本次行车路程
__IO float Vim = 0;//瞬时速度
__IO float Vavg = 0;//本次平均速度

u8 string[20];
u32 TimingDelay = 0;
void delay_ms(u32 nTime);
//Main Body
int main(void)
{

SysTick_Config(SystemCoreClock/1000);



io_init();

STM3210B_LCD_Init();
LCD_Clear(White);

i2c_init();

#if PWM_MODE
TIM3OUT_Init(0xffff,3600-1);//时钟频率20khz
TIM3CH1_set(0);//关闭输出pwm
#else

pwm_init();

#endif

TIM2IN_Init(0xffff,7200-1);//时钟频率10khz


sprintf(string,"Vim(km/h):  %0.1f   ",Vim);
LCD_DisplayStringLine(Line1,string);
   
sprintf(string,"Vavg(km/h): %0.1f   ",Vavg);
LCD_DisplayStringLine(Line3,string);

sprintf(string,"T(h:m:s): %0.2d:%0.2d:%0.2d",THH,TMM,TSS);
LCD_DisplayStringLine(Line5,string);

sprintf(string,"S(km):  %0.1f  ",km);
LCD_DisplayStringLine(Line7,string);


Total_km = eeprom_read(0x01);
Total_km_temp = (float)(Total_km*500);
delay_ms(2);
sprintf(string,"    Total(km):%d   ",Total_km);
LCD_DisplayStringLine(Line9,string);

while(1)
{
  //50ms
  if(Flag_key)
  {
   Flag_key = 0;
   
   key_read();
   
   if(key_sum==1)
   {
   
   
    Frequency_out++;
    if(Frequency_out>=20)
    {
     Frequency_out = 20;
    }
   
    #if PWM_MODE
   
    CCR1_Val =  10000/Frequency_out;
    if(Frequency_out<=1)
    TIM3CH1_set(1);
    Flag_stop_check=1;
    //Flag_catch = 1;
   
    #else
   
   
    #endif
   
   }
   if(key_sum==2)
   {
    Frequency_out--;
   
    #if PWM_MODE
   
    CCR1_Val =  10000/Frequency_out;
    if((Frequency_out<=0)||(Frequency_out>20))
    {
     Frequency_out=0;
     TIM3CH1_set(0);
    }
    #else
    if((Frequency_out<=0)||(Frequency_out>20))
    {
     Frequency_out=0;
    }
    #endif
   }
   
   
  }
  if(Flag_check)
  {
   //瞬时
   Vim = (float)(Frequency_in)*7.2;
   sprintf(string,"Vim(km/h):  %0.1f     ",Vim);
   LCD_DisplayStringLine(Line1,string);
  }
  //200ms
  if((Flag_check)&&(Flag_car))
  {
   Flag_check = 0;
   
   Vavg = ((km*1000)/TimeVar)*3.6;
   
   sprintf(string,"Vavg(km/h): %0.1f   ",Vavg);
   LCD_DisplayStringLine(Line3,string);
   
   sprintf(string,"S(km):  %0.1f   ",km);
   LCD_DisplayStringLine(Line7,string);
   
   eeprom_write(0x01,Total_km);
   delay_ms(2);
   Total_km = eeprom_read(0x01);
   delay_ms(2);
   sprintf(string,"    Total(km):%d   ",Total_km);
   LCD_DisplayStringLine(Line9,string);
   
   
  }
  if((Flag_time)&&(Flag_car))
  {
   Flag_time = 0;
   TimeVar++;
   if (TimeVar >= 21390039)
   {
    TimeVar = 0;
   }
   THH = TimeVar / 3600;
   TMM = (TimeVar % 3600) / 60;
   TSS = (TimeVar % 3600) % 60;
   
   sprintf(string,"T(h:m:s): %0.2d:%0.2d:%0.2d",THH,TMM,TSS);
   LCD_DisplayStringLine(Line5,string);
  }

  if(Flag_stop_check)
  {
   Flag_stop_check = 0;
   
   if(Flag_catch)
   {Flag_car = 1;}
   
   else
   {Flag_car = 0;}
   
   Flag_catch = 0;
  }
  if(Flag_car==0)//停车
  {
   TimeVar = 0;
   Frequency_in = 0;
   Vavg = 0;
   km = 0;
  }
  //1s闪烁报警
  if((Flag_led)&&(Flag_car)&&(Vim>90))
  {
   Flag_led = 0;
   
   LED ^= (0x01<<0);
   led_set();
  }

  if((Flag_led)&&((Flag_car)||(Vim<90)))
  {
   Flag_led = 0;
   
   LED |= (0x01<<0);
   led_set();
  }
}

}

全部资料51hei下载地址:
第四届模拟题及答案.7z (586.15 KB, 下载次数: 19)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表