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

news2024/11/15 19:42:40

文章目录

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


前言

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


一、问题重述

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

在这里插入图片描述

二、主函数

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

#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;
}

总结

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

万向节锁死(Gimbal Lock)

Gimbal Lock是一个常见的3D动画问题,主要由旋转顺序引起的。我来详细解释一下它的成因: 在三维空间中,任何旋转都可以分解为绕X,Y,Z三个轴的欧拉旋转(Euler Rotation)。每个轴的旋转是按照一定顺序进行的,比如XYZ或ZYX等。 理论上,通过这三个旋转值的组合,可以达到任意的空间…

MATLAB实现磷虾算法(Krill herd algorithm)

1.算法介绍 磷虾算法&#xff08;Krill Herd Algorithm, KH&#xff09;是一种基于生物启发的优化算法&#xff0c;其原理模拟了南极磷虾&#xff08;Euphausia superba&#xff09;群体的聚集行为。该算法旨在通过模拟磷虾个体间的相互作用、觅食行为和随机扩散&#xff0c;来…

设计模式 —— 观察者模式

设计模式 —— 观察者模式 什么是观察者模式观察者模式定义观察者模式的角色观察者模式的使用场景观察者模式的实现 被观察者&#xff08;Subject&#xff09;观察者&#xff08;Observer&#xff09;通知&#xff08;notify&#xff09;更新显示&#xff08;update&#xff09…

Webpack 从入门到精通-基础篇

一、webpack 简介 1.1 webpack 是什么 webpack 是一种前端资源构建工具&#xff0c;一个静态模块打包器(module bundler)。 在 webpack 看来, 前端的所有资源文件(js/json/css/img/less/...)都会作为模块处理。 它将根据模块的依赖关系进行静态分析&#xff0c;打包生成对应的…

MYSQL六、存储引擎的认识

一、存储引擎 1、MySQL体系结构 连接层&#xff1a;最上层是一些客户端和链接服务&#xff0c;包含本地sock 通信和大多数基于客户端/服务端工具实现的类似于TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程池的概念&#xff0c;为…

Open vSwitch 数据包接收的实现

一、Open vSwitch 数据包的来源 Open vSwitch 中的数据包有许多种来源&#xff1a; 物理网络接口&#xff1a;OVS 可以连接到物理网络设备&#xff0c;并处理从这些设备收到的数据包。这些数据包可能来自外部网络&#xff0c;需要被转发或进一步处理。虚拟网络接口&#xff1a…

MySQL 常见客户端程序

本篇主要介绍MySQL常见的客户端程序 目录 一、mysqlcheck 二、mysqldump 三、mysqladmin 四、mysqldumpslow 五、mysqlbinlog 六、mysqlshow 显示列的具体信息​编辑 七、mysqlslap 一、mysqlcheck mysqlcheck是MySQL的表维护程序&#xff0c;其功能主要包含以下四个方…

遗传算法笔记:基本工作流程

1 介绍 遗传算法有5个主要任务&#xff0c;直到找到最终的解决方案 2 举例 2.1 问题描述 比如我们有 5 个变量和约束&#xff0c;其中 X1、X2、X3、X4 和 X5 是非负整数且小于 10&#xff08;0、1、2、4、5、6、7、8、9&#xff09;我们希望找到 X1、X2、X3、X4 和 X5 的最…

01 Linux网络设置

目录 1.1 查看及测试网络 1.1.1 查看网络配置 1. 查看网络接口地址 1. 查看活动的网络接口设备 2. 查看指定的网络接口信息 2. 查看主机名称 3. 查看路由表条目 4. 查看网络连接情况 1.1.2 测试网络连接 1. 测试网络连通性 2. 跟踪数据包的路由途径 3. 测试DNS域名解析 1.2 设…

Apache ShardingSphere实战与核心源码剖析

Apache ShardingSphere实战与核心源码剖析 1.数据库架构演变与分库分表介绍 1.1 海量数据存储问题及解决方案 如今随着互联网的发展,数据的量级也是成指数的增长,从GB到TB到PB。对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求。…

HTML LocalStorage

一篇关于HTML本地存储的文章 Window.localStorage 只读的localStorage 属性允许你访问一个Document 源&#xff08;origin&#xff09;的对象 Storage&#xff1b;存储的数据将保存在浏览器会话中。 localStorage 类似 sessionStorage&#xff0c;但其区别在于&#xff1a;存储…

AXI_GPIO

REVIEW 关于PS端已经学习过&#xff1a; zynq PS端 GPIO-CSDN博客 zynq PS点灯-CSDN博客 C基础与SDK调试方法-CSDN博客 Zynq上GPIO无论是MIO还是EMIO&#xff0c;都是属于PS侧的资源&#xff0c;相当于是硬核。 而作为一个PS与PL相互协作的平台&#xff0c;当PS侧的GPIO硬核不…

使用opencv在图像上画带刻度线的对角线,以图像中心点为0点

使用OpenCV在图像上绘制带刻度线的对角线&#xff0c;可以通过以下步骤实现。我们将首先找到图像的中心点&#xff0c;然后绘制对角线线&#xff0c;并在这些线的适当位置绘制刻度线。以下是详细的C代码示例&#xff1a; void Draw_diagonal(cv::Mat& mat, double dFactor…

【Python教程】4-字符串、列表、字典、元组与集合操作

在整理自己的笔记的时候发现了当年学习python时候整理的笔记&#xff0c;稍微整理一下&#xff0c;分享出来&#xff0c;方便记录和查看吧。个人觉得如果想简单了解一名语言或者技术&#xff0c;最简单的方式就是通过菜鸟教程去学习一下。今后会从python开始重新更新&#xff0…

shell编程(四)—— 运算符

和其他编程语言一样&#xff0c;bash也有多种类型的运算符&#xff0c;本篇对bash的相关运算符做简单介绍。 一、运算符 1.1 算术运算符 常见的算术运算符&#xff0c;如加&#xff08;&#xff09;、减&#xff08;-&#xff09;、乘&#xff08;*&#xff09;、除&#xf…

Qt安装时出现无法下载存档,环境配置,main中自定义类编译不过问题

1. Qt安装时出现无法下载存档 进入Qt安装程序exe所在的文件目录&#xff0c;一般在下载文件夹&#xff0c;右键打开cmd。cmd输入&#xff1a;对应的exe镜像提速。 .\qt-online-installer-windows-x64-4.8.0.exe --mirror https://mirrors.cloud.tencent.com/qt/ 2. 环境配置 …

统计信号处理基础 习题解答10-11

题目 我们希望根据一个人的身高来估计他的体重。为了判断其可行性,对N100个人取数据&#xff0c;产生有序的数据对(h,w),其中h代表身高,w代表体重。得到的数据如图10.9(a)所示的。解释你如何利用MMSE估计量根据一个人的身高来猜测他的体重。对于这些数据的建模有些什么样的假设…

6、后端项目初始化

打开idea后&#xff0c; New Project &#xff0c;用Maven构建 Spring Boot 项目 点击Next后&#xff1a;先勾选两个基本的依赖&#xff0c;后面再手动添加其它需要的依赖 Spring Web: 表示是一个web应用程序 Lombok&#xff1a;写实体类的时候添加Data注解后就会自动加上g…

npm install 的原理

1. 执行命令发生了什么 &#xff1f; 执行命令后&#xff0c;会将安装相关的依赖&#xff0c;依赖会存放在根目录的node_modules下&#xff0c;默认采用扁平化的方式安装&#xff0c;排序规则为&#xff1a;bin文件夹为第一个&#xff0c;然后是开头系列的文件夹&#xff0c;后…

关于头条项目经验面试题的总结

文章目录 前言一、论坛项目经典话术二、请你介绍一下你最近的项目吧2.1 话术1 三、你的公司的开发环境是怎么搭建的&#xff1f;四、登录你们是怎么做的&#xff1f;4.1 账号密码登录4.2 手机验证码发送4.2.1 手机验证码发送4.2.2 手机验证码登录 五、用户行为限流是怎么做的&a…