蓝桥杯单片机半小时三等奖代码详解

2023-10-29

        半小时三等奖程序是蓝桥杯单片机比赛的基础程序,并不是真正意义上的三等奖。下面我根据自己的理解,对半小时省赛三等奖的程序进行解读。

         基础操作单元:1、LED灯 2、数码管 3、独立按键 4、矩阵键盘 5、蜂鸣器和继电器

我们的程序也是围绕这几个操作单元来写的。下面我通过注释的方式对程序进行解读。

#include <STC15F2K60S2.H>

#define  uchar unsigned char
#define  uint unsigned int

//变量
uchar num;                //矩阵按键赋值变量
uchar S1,S2,S3,S4;        //独立按键赋值变量
uchar yi,er,san,si,wu,liu,qi,ba;        //数码管的位选值
uchar tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0XBF,0XFF};  //数码管的段选值

//函数
void Allinit(void);                 //初始化
void Delayms(uint ms);              //延时
void SGM1(uchar yi,uchar er);       //数码管
void SGM2(uchar san,uchar si);
void SGM3(uchar wu,uchar liu);
void SGM4(uchar qi,uchar ba);
void Key(void);                     //独立按键
void Key16(void);                   //矩阵键盘

void main(void)        //主函数
{
    
    while(1)
    {
        
    }
}

void Key16(void)        //矩阵键盘函数
{
    uchar temp;
    P44=1;P42=0;P3=0x7f;    
    //矩阵键盘大部分是由P3口控制,其中列由高四位控制,行由低四位控制
    temp=P3;
    tmep=temp&0x0f;
    //检验低四位是否发生变化
    if(temp!=0x0f)//如果发生变化则是有按键按下
    {
        Delayms(5);     //延时消抖
        if(temp!=0x0f)
        {
            temp=P3;
            switch(temp)    //进入选择判断语句,检测该列的那个按键按下
            {
                case 0x7e: num=1;break;   //0111 1110  高位代表列(1列)低位代表行(1行)
                case 0x7d: num=2;break;
                case 0x7b: num=3;break;
                case 0x77: num=4;break;
            }
            while(temp!=0x0f)   //松手检测,如果有按键按下,则一直进行判断,直到松手
            {
                temp=P3;
                tmep=temp&0x0f;
            }
        }
    }
}

void Key(void)      //独立按键函数
{
    if(P30==0)      //如果按键按下
    {
        Delayms(5); //延时消抖
        if(P30==0)
        {
            S1=1;   //赋值
        }
        while(!P30);//松手检测
    }
    if(P31==0)
    {
        Delayms(5);
        if(P31==0)
        {
            S2=2;
        }
        while(!P31);
    }
    if(P32==0)
    {
        Delayms(5);
        if(P32==0)
        {
            S3=3;
        }
        while(!P32);
    }
    if(P33==0)
    {
        Delayms(5);
        if(P33==0)
        {
            S4=4;
        }
        while(!P33);
    }
}

void SGM1(uchar yi,uchar er)        //数码管函数
{
    P2=0xC0;            //打开数码管位选573
    P0=0x01;                //选择第一位数码管
    P2=0xE0;            //打开数码管段选573
    P0=tab[yi];             //显示数值
    Delayms(1);            //进行延时,实现动态数码管
    P2=0xC0;
    P0=0x02;
    P2=0xE0;
    P0=tab[er];
    Delayms(1);
}

void SGM2(uchar san,uchar si)
{
    P2=0xC0;
    P0=0x04;
    P2=0xE0;
    P0=tab[san];
    Delayms(1);
    P2=0xC0;
    P0=0x08;
    P2=0xE0;
    P0=tab[si];
    Delayms(1);
}

void SGM3(uchar wu,uchar liu)
{
    P2=0xC0;
    P0=0x10;
    P2=0xE0;
    P0=tab[wu];
    Delayms(1);
    P2=0xC0;
    P0=0x20;
    P2=0xE0;
    P0=tab[liu];
    Delayms(1);
}

void SGM4(uchar qi,uchar ba)
{
    P2=0xC0;
    P0=0x40;
    P2=0xE0;
    P0=tab[qi];
    Delayms(1);
    P2=0xC0;
    P0=0x80;
    P2=0xE0;
    P0=tab[ba];
    Delayms(1);
}
void Delayms(uint ms)        //延时函数
{
    uint i,j;
    for(i=0;i<ms;i++)
        for(j=845;j>0;j--);
}

void Allinit(void)        //初始化函数
{
    P2=0x80;        //打开LED灯573锁存器
    P0=0x00;
    
    P2=0xA0;        //打开蜂鸣器和继电器573锁存器
    P0=0xFF;
    
    P2=0xC0;        //打开数码管位选537锁存器
    P0=0x00;
    P2=0xE0;        //打开数码管段选537锁存器
    P0=0x00;
}

想必看了上面的代码注释还是有些云里雾里的吧,其实在学习单片机的过程中,看懂原理图也是很重要的一步,我们写的代码都是根据硬件电路来进行操作的,如果脱离了硬件电路对于我们理解和学习单片机都是困难的,在看代码的过程中,我们一定要结合原理图进行理解。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

蓝桥杯单片机半小时三等奖代码详解 的相关文章

随机推荐

  • React SSR - 写个 Demo 一学就会

    今天写个小 Demo 来从头实现一下 react 的 SSR 帮助理解 SSR 是如何实现的 有什么细节 什么是 SSR SSR 即 Server Side Rendering 服务端渲染 是指将网页内容在服务器端中生成并发送到浏览器的技术
  • BTC-分叉

    分叉 fork 原来由一条链变为了两条链 造成原因 有可能是两个节点差不多同时挖到了一个区块 然后同时发布出去 这时候就会造成临时性的分叉 state fork forking attack deliberate fork 比特币的协议发生
  • 扫码普通二维码跳转微信小程序指定页面(体验服和开发服跳转链接不能动态传参)

    好久不见 时隔多年我又来记录问题来了 记录这次问题的主要原因是减少你我去搜索资源的时间 下面开始讲讲我越到的问题 下面说的是针对小程序体验版或者开发版哈 正式环境不存在这个问题 需求 pc端扫码登录 pc创建一个二维码 用户用微信自带扫码功
  • Python 中 Iterator和Iterable的区别

    Python中 list truple str dict这些都可以被迭代 但他们并不是迭代器 为什么 因为和迭代器相比有一个很大的不同 list truple map dict这些数据的大小是确定的 也就是说有多少事可知的 但迭代器不是 迭
  • STM32CubMX_MQ135检测空气质量

    一 MQ135简介 MQ135是测量空气污染情况常用的一个传感器 具有代表性 价格低 寿命长 敏感度也OK 主要用于测量空气中二氧化碳 氮氧化物 氨气 酒精 苯类等 这几样气体可以说都属于家用空气污染测定中的重要成份 因此用这个传感器刚刚好
  • BOT_SORT复现(Ubuntu20.04)

    论文地址 https arxiv org abs 2206 14651 代码地址 NirAharon BoT SORT BoT SORT Robust Associations Multi Pedestrian Tracking githu
  • tensorflow:使用卷积网络(CNN)实现mnist

    tensorflow1 8 0 python3 6 4 coding utf 8 import tensorflow as tf from tensorflow examples tutorials mnist import input d
  • 【adb 查看手机当前应用的包名,所有应用的包名以及安装位置】

    1 查看是否连接手机 adb devices 2 进入指定的device的shell adb shell 3 查看当前正在运行的APK的包名 adb shell dumpsys window findstr mCurrentFocus 例如
  • BigInteger 与 BigDecimal的区别

    目录 一 BigInteger 二 BigDecimal 一般来说 BigInteger用的不是很多 BigDecimal用的稍微多一点 就比如说JDBC中 如果一个字段的数据库类型是Number 那么 getObject getClass
  • ES6中声明变量的方法(let,const)

    ECMAScript 6 0 以下简称ES6 是JavaScript语言的下一代标准 已经在2015年6月正式发布了 它的目标 是使得JavaScript语言可以用来编写复杂的大型应用程序 成为企业级开发语言 ECMAScript和Java
  • Android版本大于M时动态申请权限的方法

    问题描述 Android应用开发时 若版本大于M 则有些权限需要在运行时用Java代码进行动态获取 解决方案 添加supportv7包 在build gradle app 文件dependencies节点中 添加v7包的依赖 impleme
  • linux java进程_Java+Linux,深入内核源码讲解多线程之进程

    之前写了两篇文章 都是针对Linux这个系统的 为什么 我为什么这么喜欢写这个系统的知识 可能就是为了今天的内容多线程系列 现在多线程不是一个面试重点 啊 那如果你能深入系统内核回答这个知识点 面试官会怎么想 你会不会占据面试的主动权 我不
  • c# mysql 二进制图片_ASP.NET(C#) 实现将图片以二进制保存到数据库中 转

    注意 上传大文件时 会出现错误 原因我现在还不知道 数据库名 mydata 表名 table img 字段 id 自动编号 filename 文本 img OLE 对象 default aspx 无标题页 default aspx cs u
  • 【电路】电容(三)——耦合、退耦电容

    一 耦合电容 什么是耦合 两个或两个以上的电路构成一个网络时 若其中某一电路中电流或电压发生变化 能影响到其他电路也发生类似的变化 这种网络叫做耦合电路 耦合的作用就是把某一电路的能量输送 或转换 到其他的电路中去 1 电源 导线 电阻 电
  • 蓝牙core_v5.2协议-4 L2CAP上

    本章节主要讲述蓝牙host层的协议 针对BLE 主要关注L2CAP GATT ATT SMP GAP这几层 根据spec的章节顺序 我们一次讲解 PART A A LOGICAL LINK CONTROL AND ADAPTATION PR
  • python的time各种用法

    1 time Python的time模块提供了许多用于处理时间的功能 以下是一些常用的time模块的函数及其用法 并附有示例 time 返回当前时间的时间戳 自1970年1月1日00 00 00起的秒数 import time curren
  • 基于深度学习的高分辨率遥感图像目标检测技术目前的研究现状

    参考 基于深度学习的高分辨率遥感图像目标检测技术目前的研究现状 云 社区 腾讯云 目录 一 概述 二 通用目标检测方法 1 类不平衡问题 2 复杂背景 3 目标的尺度变化 4 特殊视角 5 小目标 三 特定目标检测 1 城市 2 机场 3
  • C++ STL array 容器(深入了解,一文学会)

    array 容器是 C 11 标准中新增的序列容器 简单地理解 它就是在 C 普通数组的基础上 添加了一些成员函数和全局函数 在使用上 它比普通数组更安全 且效率并没有因此变差 和其它容器不同 array 容器的大小是固定的 无法动态的扩展
  • 若依管理系统部署(SpringCloudAlibaba)

    简介 1 采用前后端分离发模式 微服务版本前端基于RuoYi Vue 2 后端采用Springboot Spring Cloud Alibaba 3 注册中心 配置中心选型Nacos 权限认证使用OAuth2 4 流量控制框架选型Senti
  • 蓝桥杯单片机半小时三等奖代码详解

    半小时三等奖程序是蓝桥杯单片机比赛的基础程序 并不是真正意义上的三等奖 下面我根据自己的理解 对半小时省赛三等奖的程序进行解读 基础操作单元 1 LED灯 2 数码管 3 独立按键 4 矩阵键盘 5 蜂鸣器和继电器 我们的程序也是围绕这几个