蓝桥杯单片机学习日记4-串口接收与发送,解决串口引脚与按键引脚冲突

2023-10-28

此片文章用于记录蓝桥杯单片机的学习

串口的发送与接收较为简单,主要是字节和字符串的发送与接收。

直接上程序:

//串口初始化
void UartInit(void)  //9600bps@11.0592MHz
{
  SCON = 0x50;   //8位数据,可变波特率
  AUXR &= 0xBF;  //定时器1时钟为Fosc/12,即12T
  AUXR &= 0xFE;  //串口1选择定时器1为波特率发生器
  TMOD &= 0x0F;  //设定定时器1为16位自动重装方式
  TL1 = 0xE8;    //设定定时初值
  TH1 = 0xFF;    //设定定时初值
  ET1 = 0;       //禁止定时器1中断
  TR1 = 1;       //启动定时器1
  ES = 1;        //启动串口中断
}
 //用于发送一个字节
void Sent_byte(unsigned char byte) 
{
  SBUF = byte;
  while (TI == 0);
  TI = 0;
}
//用于发送一个字符串
void Sent_string(unsigned char *string) 
{
  while (*string != '\0') {
    Sent_byte(*string++);
  }
}
//中断接收字符,根据选择接收字符还是字符串
unsigned char RX;
void Usart_interrupt() interrupt 4  //用与接收字符
{
  if (RI) {
    RI = 0;
    RX = SBUF;
  }
}

//中断接收字符串,根据选择接收字符还是字符串
unsigned char i;
unsigned char string[20];
void Usart_interrupt() interrupt 4  //用与接收字符串
{
  if (RI) {
    RI = 0;
    string[i] = SBUF;
    if (string[i] == '\n')  //回车为接收结束标志
    {
      i = 0;
    } else {
      i++;
    }
  }
}

单片机串口与按键冲突问题:

值得注意的是,蓝桥杯单片机所使用的串口引脚为P30与P31,而无论矩阵键盘还是单独按键都会使用到这两个引脚,特别是在按键功能和串口功能一起使用的情况下,会造成串口发送紊乱,数据不对的情况。

针对上述情况,提出一下解决方案:

1.在进入按键扫描程序前,关闭定时器1(2)(取决与哪个定时器作为波特率发生器)

2.扫描结束后,重新打开定时器1(2),并一定要使P3口复位。

以前面的独立键盘扫描为例(矩阵键盘也适用):

u8 Key_scan()  //扫描按键按下的情况,采用定时器轮询
{
  u8 Key_temp, Key_value;
  TR1 = 0;                 //关闭定时器1
  Key_temp = P3 & 0x0f;
  switch (Key_temp) {
    case 0x0e: Key_value = 7; break;  //s7
    case 0x0d: Key_value = 6; break;  //s6
    case 0x0b: Key_value = 5; break;  //s5
    case 0x07: Key_value = 4; break;  //s5
    default: Key_value = 0; break;
  }
  TR1 = 1;                //打开定时器1
  P3=0xff;                //复位P3口
  return Key_value;
}

在采用以上方法后,无论按键扫描采用定时器轮询扫描还是软件延时消抖扫描,串口发送与接收都不在受按键的影响。

蓝桥杯单片机学习日记1-LED 蜂鸣器 继电器 数码管的简单驱动

蓝桥杯单片机学习日记2-独立按键的短按,长按的使用

蓝桥杯单片机学习日记3-矩阵键盘的使用,线反转法,三步消抖,按键长按与短按

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

蓝桥杯单片机学习日记4-串口接收与发送,解决串口引脚与按键引脚冲突 的相关文章

  • ubuntu重装NVIDIA显卡(经过记录)遇到问题到卸载ubuntu再到成功安装

    2019 3 10 本来准备升级英伟达官方驱动下载搭配合适CUDA cuDNN GPU tensorflow 网上教程很多 按照教程下载了显卡匹配的最新驱动 卸载了安装ubuntu后在附加驱动里面自动下载的官方驱动390版本 准备禁止X W
  • 准确记录用户观看视频内容时长

    文章目录 问题的产生 一 从最简单的开始 二 天真可爱法 三 录点法 四 打点法 五 暴力打点法 六 小结 七 大结 问题的产生 to be or not to be that is a question 不是问题解决不了 只是你自己不够努
  • 事件派发代码

    bool QCoreApplication sendEvent QObject receiver QEvent event Q TRACE QCoreApplication sendEvent receiver event event gt

随机推荐

  • 没有扩容机器,抗住了70多倍的流量增长

    欢迎大家前往腾讯云社区 获取更多腾讯海量技术实践干货哦 作者 黄希彤 腾讯云专家工程师 从2012年开始 我们就吧腾讯公司内各个业务的404页面导流给宝贝回家 从2013年开始 我们更开放了404寻亲接入给第三方网站 这些导流给宝贝回家论坛
  • 第14节 在VS中关闭安全周期检查sdl

    项目 gt 属性 gt C C gt 常规 gt SDL检查 gt 否
  • C语言中符号表示什么意思?

    C语言中 gt gt lt lt 分别表示什么意思 举例说明 1 C语言中的 gt gt 意思为 右移后赋值 代码示例为 x 8 x gt gt 3 右移后结果为 00000000 00000000 00000000 00000001 2
  • OPenCV入门学习笔记(5)人脸检测

    检测的一般步骤 加载xml级联分类器 读入图片 灰度化处理图片 进行检测 加载xml级联分类器 face detector cv2 CascadeClassifier haarcascade frontalface default xml
  • 2023华为OD机试真题-狼羊过河(JAVA、Python、C++)

    题目描述 一农夫带着m只羊 n只狼过河 农夫有一条可载x只狼 羊的船 农夫在时或者羊的数量大于狼时 狼不会攻击羊 农夫在不损失羊的情况下 运输几次可以完成运输 返程不计入次数 输入描述 输入参数为 m n x m 为羊的数量 n为狼的数量
  • 乐高ev3编程 c语言,乐高ev3编程软件下载-乐高EV3机器人编程软件lego mindstorms ev31.0 官方版 - 极光下载站...

    LEGO MINDSTORMS EV3是乐高EV3机器人编程软件 乐高ev3编程软件是乐高头脑风暴EV3机器人配套的编程软件 包含多个有趣的机器人编程任务 拥有简单易用的编程界面 让您您轻松探索并操纵乐高EV3机器人 让机器人服从您的命令
  • 51单片机(硬件结构)并行I/O端口

    I O端口结构及功能 1 MCS 51单片机有4个8位并行I O端口 P0 P1 P2 P3 2 每个口包含 锁存器 输出驱动器 输入缓存器 3 具有字节寻址和位寻址功能 4 在访问片外扩展存储器时 低8位地址和数据由P0口 分时传送 高8
  • DDR3总结笔记

    注 学习 交流就在博主的个人weixin公众号 FPGA动力联盟 留言或直接 博主weixin fpga start 私信 完整的参考工程源码在某宝有售 https item taobao com item htm ft t id 6832
  • JAVA形参可变数量参数

    public class test public void info int nums for int num nums System out println num public static void main String args
  • linux /etc/profile bashrc bash_profile

    文件 etc profile bashrc 和 bash profile 的使用区别 etc profile 全局 环境变量等 在机器重启后执行一次 用于设置环境变量 更改一些内核参数等命令 etc bashrc 全局登陆 变量 如 ali
  • 为Android添加HAL模块

    1 每个硬件抽象层模块在内核中都对应一个驱动程序 硬件抽象层模块就时通过这些驱动程序来访问硬件设备的 它们是通过读写设备文件来进行通信的 硬件抽象层中的模块接口源文件一般保存在hardware libhardware目录中 为了方便起见 我
  • 关于exe文件无法执行的解决方式小结

    昨天学习时候用到Apache 下载安装之后 用对应的exe文件无法打开 服务器一直打不开 我就好奇怎么样才能解决这个问题 先在网上百度了一些方法 通过修改注册表方式 步骤如下 新建记事本 将下面这段代码保存进去 然后另存为将其修改为恢复可执
  • ovs tag

    ovs tag 下发正常转发流表 sh ovs ofctl add flow s1 action normal action NORMAL的流表意思是该交换机配置成一个正常传统交换机工作 ovs交换机有两种工作模式 SDN模式和传统模式 传
  • python assert用法

    1 assert语句用来声明某个条件是真的 2 如果你非常确信某个你使用的列表中至少有一个元素 而你想要检验这一点 并且在它非真的时候引发一个错误 那么assert语句是应用在这种情形下的理想语句 3 当assert语句失败的时候 会引发一
  • Qt学习笔记——界面文件的使用

    一 界面文件的使用 1 独立的ui文件 使用uic命令把ui文件编译成 h文件 uic xxx ui o xxx h 2 在集成开发环境中使用 1 Qt构造器会把xxx ui文件生成 ui xxx h 文件 且会有一个xxx h xxx c
  • (转载)STM32与LAN9252构建EtherCAT从站

    目录 一 项目简介 EtherCAT及项目简述 LAN9252工作模式 整体开发流程 移植要处理的问题 代码层面的工作 开发中使用的工具 二 SSC的使用 SSC简介和下载 SSC构建协议栈文件和XML 三 LAN9252的XML文件 Et
  • postgresql常用函数>序列函数nextval():设置主键自动增长

    主键一般设置为Integer类型 并且自动增长 起始值为1 增量为1 有两种方法 法一 在建表时 nextval 表名 主键 seq regclass 法二 如果表已经建好 CREATE SEQUENCE 表名 主键 seq START W
  • anaconda jupyter-notebook

    文章目录 仓库镜像配置 新建python 环境 jupyter notebook 仓库镜像配置 conda config add channels https mirrors tuna tsinghua edu cn anaconda pk
  • 程序员必备的25个好网站汇总

    一 技术提升 0 GitHub 程序员托管代码的平台 很多开发者都会在上面找各种各样的开源项目来学习 阿里 腾讯 字节跳动 美团 Google Micosoft等国内外大厂都有自己的Github开源库 1 StackOverflow 一个强
  • 蓝桥杯单片机学习日记4-串口接收与发送,解决串口引脚与按键引脚冲突

    此片文章用于记录蓝桥杯单片机的学习 串口的发送与接收较为简单 主要是字节和字符串的发送与接收 直接上程序 串口初始化 void UartInit void 9600bps 11 0592MHz SCON 0x50 8位数据 可变波特率 AU