第十二届蓝桥杯单片机国赛练习代码

文章目录

  • 前言
  • 一、问题重述
  • 二、主函数
  • 总结


前言

  第十五蓝桥杯国赛落幕已有十天,是时候总结一下,这个专栏也将结束。虽然并没有取得预期的结果,但故事结尾并不总是美满的。下面是赛前练习的第十二届国赛的代码。


一、问题重述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

二、主函数

  完整项目工程见第十二届蓝桥杯单片机国赛代码

#include "main.h"
#include "key_smg.h"
#include "timer.h"
#include "ultra.h"
#include "ds1302.h"
#include "iic.h"

u8 smgflash=0;
u8 weishu=0;

u8 keyflash=0,keytemp=0,keynum=0;

u8 bigpage=0;u8 page1=0,page11=0,page2=0;

float dis=0;long dis_show=100,maxdis=0,mindis=100;
float avedis=0;long avedis_show=0;u16 avenum=0;
u8 trigflash=2,trigflashtemp=2;
u8 dislimit=20,dislimittemp=20;
u8 trigflag=0;

u8 sectemp=0x01;
u8 measuremode=12;

int pcf8591flash=0;

u8 lastvolu=0,nowvolu=0;

u8 led[]={0,1,1,1,1,1,1,1};
u8 led5flag=0;

void keyvalue();
void keyfun();
void showpage();
void fun();
void ledfun();

void main()
{
  outputp0(0x80,0xff);
  outputp0(0xa0,0x00);
  
  ds1302set();
  Timer0_Init();
  Timer1_Init();
  while(1)
  {
    keyvalue();keyfun();fun();ledfun();showpage();
    
  }
  
  
}

void Timer1_Isr(void) interrupt 3
{
	TL1 = 0x18;				//设置定时初始值
	TH1 = 0xFC;				//设置定时初始值
  
  smgflash++;
  if(smgflash>=2)
  {
    smgflash=0;showloop();
  }
  
  
  keyflash++;
  pcf8591flash++;
}
void keyvalue()  //按键读取函数
{
  if(keyflash>=25)
  {
    keyflash=0;
    keytemp=keygetvalue();
  }
  if(keytemp)
  {
    keynum=keytemp;
    keytemp=0;
  }
}






void keyfun()   //按键功能函数
{
  if(keynum == 4)
  {
    bigpage=!bigpage;
    page1=page2=0;
    dislimit=dislimittemp;
    trigflash=trigflashtemp;
    
    showoff();
  }
  else if(keynum == 5)
  {
    showoff();
    if(!bigpage)
    {
      page1++;
      page1%=3;
      if(page1==2)
        page11=0;
    }
    else
    {
      page2++;
      page2%=2;
    }
  }
  else if(keynum == 8)
  {   
    if(bigpage==0)
    {
      if(page1 == 1)
      {
        if(measuremode == 12)
          measuremode = 15;
        else
          measuremode = 12;
      }
      else if(page1==2)
      {
        showoff();
        page11++;
        page11%=3;
      }
    }
  }  
  else if(keynum == 9)
  {
    if(bigpage)
    {
      if(!page2)
      {
        switch(trigflashtemp)
        {
          case 2:trigflashtemp=3;break;
          case 9:trigflashtemp=2;break;
          default:trigflashtemp+=2;break;
        }
      }
      else 
      {
        dislimittemp+=10;
        if(dislimittemp>=90)
          dislimittemp=10;
      }
    }
  }  
}



void showpage()   //数码管显示函数
{
  if(bigpage==0)
  {
    if(page1==0)
    {
      ds1302read();
      segsy[0]=time[0]/10;
      segsy[1]=time[0]%10;
      segsy[2]=18;
      segsy[3]=time[1]/10;
      segsy[4]=time[1]%10;
      segsy[5]=18;
      segsy[6]=time[2]/10;
      segsy[7]=time[2]%10;
      
    }
    else if(page1 == 1)
    {
      segsy[0]=20;
      segsy[1]=measuremode;
      segsy[2]=16;
      segsy[3]=16;
      segsy[4]=16;
      showperiod(dis_show,3);
    }
    else if(page1 == 2)
    {
      if(page11==0)
      {
        segsy[0]=21;
        segsy[1]=17;
        segsy[2]=16;
        segsy[3]=16;
        showperiod(maxdis,4);
      }
      else if(page11==1)     
      {
        segsy[0]=21;
        segsy[1]=18;
        segsy[2]=16;
        segsy[3]=16;
        showperiod(mindis,4);
      }  
      else if(page11==2)     
      {
        segsy[0]=21;
        segsy[1]=19;
        segsy[2]=16;
        segsy[3]=16;
        showperiod(avedis_show,4);
        dotsy[6]=1;
      }  
    }
  }
  else
  {
    if(page2==0)
    {
      segsy[0]=22;
      segsy[1]=page2+1;
      segsy[2]=16;
      segsy[3]=16;
      segsy[4]=16;
      segsy[5]=16;
      segsy[6]=trigflashtemp/10;
      segsy[7]=trigflashtemp%10;
      
    }
    else if(page2==1)
    {
      segsy[0]=22;
      segsy[1]=page2+1;
      segsy[2]=16;
      segsy[3]=16;
      segsy[4]=16;
      segsy[5]=16;
      segsy[6]=dislimittemp/10;
      segsy[7]=dislimittemp%10;
    }
    
  }
}




void fun()   //其他功能函数
{
  if(measuremode==15)
  {    
    ds1302read();
    if(time[2]%trigflash==0 && sectemp!=time[2])
    {
      trigflag=1;
      sectemp=time[2];
    }
  }
  else if(measuremode==12)
  {
    if(pcf8591flash>=300)
    {
      pcf8591flash=0;
      lastvolu=nowvolu;
      nowvolu=pcf_ad();
      if(lastvolu>204 && nowvolu<102)
        trigflag=1;
    }
  }
  if(trigflag==1)
  {
    trigflag=0;
    dis=ultra_rx();
    dis_show=dis+0.5;
    if(dis_show>maxdis)
      maxdis=dis_show;
    if(dis_show<mindis)
      mindis=dis_show;
    avedis=(avedis*avenum+dis_show)/(++avenum);
    avedis_show=avedis*10+0.5;
    
    if(dis_show<=10)
      pcf_da(51);
    else if(dis_show<=80)
      pcf_da( (dis_show-10)*2/35*51 + 51);
    else
      pcf_da(255);
    if(measuremode==15)
    {
      if(dis_show>=(dislimit-5) && dis_show<=(dislimit+5))
      {
        led5flag++;
        if(led5flag>=3)
        {
          led5flag=2;
          led[4]=0;
        }
      }
      else
      {
        led5flag=0;
        led[4]=1;
      }
    }
  }
}

void ledfun()  //led灯函数
{
  if(keynum)
  {
    ledoff;
    if(bigpage==0)
    {
      if(page1==0)
      {
        led[0]=0;
        
      }
      else if(page1==1)
      {
        led[1]=0;
        
      }
      else if(page1==2)
      {
        led[2]=0;
        
      }    
    }
  }
  if(measuremode==12)
  {
      led[3]=0;
  }
  else
  {
      led[3]=1;
  }
  if(nowvolu>204)
  {
    led[5]=0;
  }
  else
  {
    led[5]=1;
  }
  ledset; 
  if(keynum)
    keynum=0;
}

总结

  就以此作为人生中该分支旅途的终点吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/696890.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript前端技术入门教程

引言 在前端开发的广阔天地中&#xff0c;JavaScript无疑是最耀眼的一颗明星。它赋予了网页动态交互的能力&#xff0c;让网页从静态的文本和图片展示&#xff0c;进化为可以与用户进行实时交互的丰富应用。本文将带您走进JavaScript的世界&#xff0c;为您提供一个入门级的教…

文件的基础必备知识(初学者入门)

1. 为什么使用文件 2. 什么是文件 3. 二进制文件和文本文件 4. 文件的打开和关闭 1.为什么使用文件 我们写的程序数据是存储在电脑内存中&#xff0c;如果程序退出&#xff0c;内存回收&#xff0c;数据就丢失&#xff0c;等程序再次运行时&#xff0c;上次的数据已经消失。面…

C++~~期末复习题目讲解---lijiajia版本

目录 1.类和对象 &#xff08;3&#xff09;创建对象的个数 &#xff08;3&#xff09;全局变量&#xff0c;局部变量 &#xff08;4&#xff09;构造函数的执行次数 &#xff08;5&#xff09;静态动态析构和构造顺序 &#xff08;6&#xff09;初始化顺序和声明顺序 &a…

MySQL数据库的基础:逻辑集合数据库与表的基础操作

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人能接…

简单聊聊大数据解决方案

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

Spring5

文章目录 1. Spring 是什么&#xff1f;2. IoC3. Spring Demo4. IoC 创建对象的方式 / DI 方式注入的默认参数在哪里设定? 5. Spring 配置tx:annotation-driven 用于启用基于注解的事务管理 6. Bean的作用域7. 在Spring中有三种自动装配的方式1. 在xml中显式的配置2. 在java中…

node的安装

node是前端开发环境&#xff0c;所以运行前端程序需要安装和配置node 1. 下载安装node 去node官网选择你需要的版本进行下载 Node.js — Download Node.js (nodejs.org) ​ 下载到本地后一路点击next傻瓜式安装&#xff0c;安装成功后测试是否安装成功 node -v 显示node版…

电路防护-贴片陶瓷气体放电管

贴片陶瓷气体放电管 GDT工作原理GDT主要特性参数典型电路压敏电阻与 TVS 管的区别 GDT工作原理 陶瓷气体放电管是一种电子器件&#xff0c;其工作原理基于气体放电现象。这种管子的内部填充了一种特定的气体&#xff0c;通常是氖气或氩气。当管子两端施加足够的电压时&#xf…

刚刚❗️德勤2025校招暑期实习测评笔试SHL测评题库已发(答案)

&#x1f4e3;德勤 2024暑期实习测评已发&#xff0c;正在申请的小伙伴看过来哦&#x1f440; ㊙️本次暑期实习优先考虑2025年本科及以上学历的毕业生&#xff0c;此次只有“审计及鉴定”“税务与商务咨询”两个部门开放了岗位~ ⚠️测评注意事项&#xff1a; &#x1f44…

USB转I2C转SPI芯片CH341

CH340与CH341区别 CH340主要用于将USB转换为各种串口&#xff0c;CH340H和CH340S可以实现USB转并口。 CH341和340的不同之处在于CH341提供I2C和SPI接口&#xff0c;方便连接到I2C或SPI总线操作相关的器件。 CH341主要有6种封装。见表1. CH341T SSOP-20封装和丝印 USB 总线转接…

大模型基础——从零实现一个Transformer(2)

大模型基础——从零实现一个Transformer(1) 一、引言 上一章主要实现了一下Transformer里面的BPE算法和 Embedding模块定义 本章主要讲一下 Transformer里面的位置编码以及多头注意力 二、位置编码 2.1正弦位置编码(Sinusoidal Position Encoding) 其中&#xff1a; pos&…

【JVM】从编译后的指令集来再次理解++i和i++的执行顺序

JVM为什么要选用基于栈的指令集架构 与基于寄存器的指令集架构相比&#xff0c;基于栈的指令集架构不依赖于硬件&#xff0c;因此可移植性更好&#xff0c;跨平台性更好因为栈结构的特性&#xff0c;永远都是先处理栈顶的第一条指令&#xff0c;因此大部分指令都是零地址指令&…

SpringMVC[从零开始]

SpringMVC SpringMVC简介 1.1什么是MVC MVC是一种软件架构的思想&#xff0c;将软件按照模型、视图、控制器来划分 M:Model&#xff0c;模型层&#xff0c;指工程中的JavaBean&#xff0c;作用是处理数据 JavaBean分为两类&#xff1a; 一类称为实体类Bean&#xff1a;专…

对猫毛过敏?怎么有效的缓解过敏症状,宠物空气净化器有用吗?

猫过敏是一种常见的过敏反应&#xff0c;由猫的皮屑、唾液或尿液中的蛋白质引起。这些蛋白质被称为过敏原&#xff0c;它们可以通过空气传播&#xff0c;被人体吸入后&#xff0c;会触发免疫系统的过度反应。猫过敏是宠物过敏中最常见的类型之一&#xff0c;对许多人来说&#…

【Java】static 修饰变量

static 一种java内置关键字&#xff0c;静态关键字&#xff0c;可以修饰成员变量、成员方法。 static 成员变量 1.static 成员变量2.类变量图解3.类变量的访问4.类变量的内存原理5.类变量的应用 1.static 成员变量 成员变量按照有无static修饰&#xff0c;可以分为 类变量…

Python学习打卡:day02

day2 笔记来源于&#xff1a;黑马程序员python教程&#xff0c;8天python从入门到精通&#xff0c;学python看这套就够了 8、字符串的三种定义方式 字符串在Python中有多种定义形式 单引号定义法&#xff1a; name 黑马程序员双引号定义法&#xff1a; name "黑马程序…

如何为色盲适配图形用户界面

首发日期 2024-05-25, 以下为原文内容: 答案很简单: 把彩色去掉, 测试. 色盲, 正式名称 色觉异常. 众所周知, 色盲分不清颜色. 如果用户界面设计的不合理, 比如不同项目只使用颜色区分, 而没有形状区分, 那么色盲使用起来就会非常难受, 甚至无法使用. 色盲中最严重的情况称为…

2024PTA算法竞赛考试编程题代码

目录 前言 题目和代码 L1-006 连续因子 L1-009 N个数求和 L2-004 这是二叉搜索树吗&#xff1f; L2-006 树的遍历 L2-007 家庭房产 L4-118 均是素数 L4-203 三足鼎立 L2-002 链表去重 L2-003 月饼 L2-026 小字辈 L4-201 出栈序列的合法性 L4-205 浪漫侧影 前言 所…

【数据结构】AVL树(平衡二叉树)

目录 一、AVL树的概念二、AVL树的节点三、AVL树的插入四、AVL树的旋转1.插入在较高左子树的左侧&#xff0c;使用右单旋2.插入在较高右子树的右侧&#xff0c;使用左单旋3.插入较高左子树的右侧&#xff0c;先左单旋再右单旋4.插入较高右子树的左侧&#xff0c;先右单旋再左单旋…

unity基础(五)地形详解

目录 一 创建地形 二 调整地形大小 三 创建相邻地形 四 创建山峰 五 创建树木 七 添加风 八 添加水 简介: Unity 中的基础地形是构建虚拟场景的重要元素之一。 它提供了一种直观且灵活的方式来创建各种地形地貌&#xff0c;如山脉、平原、山谷等。 通过 Unity 的地形…