单元训练13:串行接口的进阶应用

news2024/12/27 13:48:19

蓝桥杯,小蜜蜂,单元训练13:串行接口的进阶应用

/*
 * @Description:
 * @Author: fdzhang
 * @Email: zfdc@qq.com
 * @Date: 2024-08-17 15:41:34
 * @LastEditTime: 2024-08-17 19:48:35
 * @LastEditors: fdzhang
 */
#include "stc15f2k60s2.h"

#define Led(x)                 \
    {                          \
        P0 = x;                \
        P2 = P2 & 0x1F | 0x80; \
        P2 &= 0x1f;            \
    }
// 定义控制蜂鸣器
#define Buzz(x)                \
    {                          \
        P0 = x;                \
        P2 = P2 & 0x1F | 0xA0; \
        P2 &= 0x1F;            \
    }
// 定义控制继电器
#define Relay(x)               \
    {                          \
        P0 = x;                \
        P2 = P2 & 0x1F | 0xA0; \
        P2 &= 0x1F;            \
    }

typedef unsigned char uint8_t;

uint8_t ledinfo = 0xff; // LED信息,初始化全灭
uint8_t recv_data;

void UartInit(void) // 9600bps@12.000MHz
{
    PCON &= 0x7F; // 波特率不倍速
    SCON = 0x50;  // 8位数据,可变波特率
    AUXR |= 0x40; // 定时器时钟1T模式
    AUXR &= 0xFE; // 串口1选择定时器1为波特率发生器
    TMOD &= 0x0F; // 设置定时器模式
    TMOD |= 0x20; // 设置定时器模式
    TL1 = 0xD9;   // 设置定时初始值
    TH1 = 0xD9;   // 设置定时重载值
    ET1 = 0;      // 禁止定时器中断
    TR1 = 1;      // 定时器1开始计时

    ES = 1; // 要手动写
    EA = 1; // 要手动写
}
void uartSend(uint8_t uartData) // 发送数据
{
    SBUF = uartData;
    while (TI == 0)
        ;
    TI = 0;
}
void uartSendString(uint8_t *str) // 发送字符串
{
    while (*str != '\0')
    {
        uartSend(*str++);
    }
}
uint8_t uartRecv() // 接收数据
{
    uint8_t recv_data;
    while (RI == 0)
        ;
    RI = 0;
    recv_data = SBUF;
    return recv_data;
}
void initSys() // 初始化系统
{
    Led(0xff);   // 关闭LED
    Buzz(0xff);  // 关闭蜂鸣
    Relay(0x00); // 关闭中继
}
void welcome() // 上电启动输出欢迎
{
    uint8_t *InitStr = "Welcome to XMF system!\r\n"; //\r回车,\n换行
    uartSendString(InitStr);
}

void runningMessage() // 按c0输运行信息
{
    uint8_t *MessageInfo = "The System is Running....\r\n";
    uartSendString(MessageInfo);
}
void decideLed()
{
    if ((recv_data & 0xF0) == 0xA0) // 0xA?
    {
        ledinfo = ~(recv_data & 0x0f);
    }
    else if ((recv_data & 0xF0) == 0xB0) // 0xB?
    {
        recv_data = recv_data << 4; // 0x?0
        ledinfo = ~recv_data;
    }
    Led(ledinfo);
    if (recv_data == 0xc0)
    {
        runningMessage();
        recv_data = 0x00; // 设定接收值为非C0情况,使得只输出一次running message。
    }
}
void main()
{
    UartInit();

    initSys();

    welcome();
    while (1)
    {
        decideLed();
    }
}

void uart_isr(void) interrupt 4
{
    if (RI == 1)
    {
        RI = 0;
        recv_data = SBUF;
    }
}

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

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

相关文章

算法工程师第四十天(647. 回文子串 516.最长回文子序列 动态规划总结篇 )

参考文献 代码随想录 一、回文子串 给你一个字符串 s &#xff0c;请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 示例 1&#xff1a; 输入&#xff1a;s "abc"…

MySQL 异步主从复制流程解析

前言&#xff1a; 首先MySQL主从复制方式有多种&#xff0c;包括 binlog、GTID等&#xff0c;这里基于 binlog 的形式&#xff0c;解析异步主从复制流程 首先通过下面命令查看全部 binlog 日志文件 show binary logs; binlog 日志文件如下&#xff1a; 然后查看其中一个文件…

ECMAScript6语法:默认参数和rest参数

1、默认参数 默认参数即在定义函数的参数列表中指定了默认值的参数。在 ES5 中&#xff0c;并没有提供在参数列表中指定参数默认值的语法&#xff0c;要想为函数的参数指定默认值&#xff0c;只能在函数体中实现&#xff0c;示例代码如下&#xff1a; function table(width, …

MBR10200FCT-ASEMI智能AI专用MBR10200FCT

编辑&#xff1a;ll MBR10200FCT-ASEMI智能AI专用MBR10200FCT 型号&#xff1a;MBR10200FCT 品牌&#xff1a;ASEMI 封装&#xff1a;TO-220F 批号&#xff1a;最新 最大平均正向电流&#xff08;IF&#xff09;&#xff1a;10A 最大循环峰值反向电压&#xff08;VRRM&a…

西安旅游系统--论文pf

TOC springboot383西安旅游系统--论文pf 第1章 绪论 1.1 课题背景 二十一世纪互联网的出现&#xff0c;改变了几千年以来人们的生活&#xff0c;不仅仅是生活物资的丰富&#xff0c;还有精神层次的丰富。在互联网诞生之前&#xff0c;地域位置往往是人们思想上不可跨域的鸿…

YOLOv8侦测任务更换主干网络成MobileNetV3

目录 1. 添加主干网络模块 ​编辑1.1 在init.py中添加模块名 1.2 主体代码中添加调用语句块 2. 配置yaml文件 3. 修改成功 1. 添加主干网络模块 1.1 在init.py中添加模块名 1.2 主体代码中添加调用语句块 2. 配置yaml文件 3. 修改成功 自己随便找一个程序跑一跑验证…

微电网控制器是什么?微电网中央控制器|微电网协调控制器|微电网控制系统图|Micon2505微网中央控制器方案介绍

微电网控制器是什么&#xff1f;微电网中央控制器|微电网协调控制器|微电网控制系统图|Micon2505微网中央控制器方案介绍及其在油田采油机场景中的应用。微电网控制器广泛应用于具备光伏&#xff0c;储能&#xff0c;V2G&#xff0c;充电桩&#xff0c;风电&#xff0c;柴油发电…

图解内存分配算法 -- 小内存分配算法

图解内存分配算法 – 小内存分配算法 文章目录 图解内存分配算法 -- 小内存分配算法1. 算法介绍2. 算法图解2.1 约定2.2 数据结构介绍2.3 初始化2.4 第一次 malloc 40字节2.5 第二次 malloc 18 字节2.6 第三次 malloc 20字节2.7 第四次 malloc 40字节2.8 第一次 free2.9 第二次…

LINUX服务器部署准备

文章目录 配置环境变量NODE下载解压安装 NGINX下载NGINX下载GCC并安装解压安装启动NGINX MAVEN下载解压安装配置环境 TOMCAT下载兼容版本解压安装开启远程访问 REDIS下载解压安装配置远程使用关闭保护模式 配置环境变量 vi /etc/profile source /etc/profile解压成功之后、运行…

安装IDEA2021.2.1(含安装包)及其扩展设置

一、下载 通过百度网盘分享的文件&#xff1a;ideaIU-2021.2.1.exe 链接&#xff1a;https://pan.baidu.com/s/1cCUHNm0dpWlfkxf5RCEgfw 提取码&#xff1a;v62e 二、安装 安装视频网址&#xff1a;Java基础概念-12-idea的概述和下载安装_哔哩哔哩_bilibili 三、idea中的第一…

Postman内置动态参数和自定义动态参数

业务场景 现在有两个接口&#xff0c;接口1&#xff1a;获取接口统一鉴权码token接口&#xff0c;接口2&#xff1a;创建标签接口&#xff0c;标签接口的创建依赖接口1返回的鉴权码&#xff0c;即需要获取access_token的值&#xff0c;替换ACCESS_TOKEN。且接口2中标签名不能和…

【计算机硬件内存】

内存插槽中间通常有个突起物将整个插槽稍微切分成为两个不等长的距离&#xff0c; 这样的设计可以让使用 者在安装内存时&#xff0c;不至于前后脚位安插错误&#xff0c;是一种防呆的设计喔。 前面提到CPU所使用的数据都是来自于内存&#xff08;main memory&#xff09;&…

Java流程控制04:while循环结构

教学视频链接&#xff1a;https://www.bilibili.com/video/BV12J41137hu?p38&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5https://www.bilibili.com/video/BV12J41137hu?p38&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5 在Java中&#xff0c;while 结构是一个…

【C语言】深入讲解指针(中)

文章目录 前言函数指针函数指针变量的创建函数指针变量的使用两段有趣的代码typedef 关键字 函数指针数组函数指针的使用最后 前言 上一章深入讲解指针&#xff08;上&#xff09;我们对字符指针、数组指针、指针和数组传参进行了讲解&#xff0c;本章将对函数指针进行讲解&am…

Java、python、php版的大学生家教预约服务系统的设计与实现(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

滚珠丝杆磨损评估:何时需进行研磨修复的关键指标?

滚珠丝杆是一种常见的机械传动元件&#xff0c;是将回转运动转化为直线运动&#xff0c;或将直线运动转化为回转运动的理想产品&#xff0c;在工具机械和精密机械上最常使用的传动元件。由于长时间使用或使用方法不当&#xff0c;滚珠丝杆可能会出现磨损、折裂、腐蚀等问题。影…

开机启动项检查

目录 介绍步骤总结 介绍 Windows在启动的时候&#xff0c;会自动加载很多程序。这些程序的自启动&#xff0c;带来了便利&#xff0c;但如果是恶意的自启动程序&#xff0c;我们就要关闭掉。 步骤 1、在开机后&#xff0c;打开了一个flag文件&#xff0c;里面填写了一个flag…

【解析几何笔记】4.向量分解定理的应用

4.向量分解定理的应用 4.1 简单比&#xff08;定比&#xff09; 【例1.3】&#xff08;由 ( A , B , D ) , ( C , A , F ) (A,B,D),(C,A,F) (A,B,D),(C,A,F)可以看出用 A C ⃗ , A B ⃗ \vec{AC},\vec{AB} AC ,AB 和从A点做起点的向量方便解题&#xff0c;再看题目所求的简单比…

Spring 事务配置类,完成数据库的转账

1、完成基本的三层架构 1.1创建Account表 创建实体类 Account 1.2 Service层写入 AccountService 接口 Service层 下写 impl 包定义 AccountServiceImpl 类 实现接口 AccountService Service Transactional RequiredArgsConstructor public class AccountServiceImpl impleme…

【网络】高并发场景处理:线程池和IO多路复用

文章目录 短时间内有大量的客户端的解决方案线程池IO 多路复用 短时间内有大量的客户端的解决方案 创建线程是比较经典的一种服务器开发模型&#xff0c;给每个客户端分配一个线程来提供服务 但一旦短时间内有大量的客户端&#xff0c;并且每个客户端请求都是很快的&#xff…