PC控制单片机LED

电脑通过串口控制单片机LED亮灭


设计所需:Keil MDK5 软件 STM32单片机一块

文章目录

  • PC控制单片机LED
  • 前言
  • 一、功能要求
  • 二、通讯方法
    • 1.查询法
    • 2.中断法
  • 结果展示

前言

主要内容:

本章主要介绍如何利用PC机控制单片机的板载小灯的亮灭,电脑与单片机的串口通讯方式主要有查询法和中断法,程序编程方法主要采用标准库函数进行编程,本章中两种方法都有介绍,其次控制代码以及完整的代码会附录在文章后面。


以下是本篇文章正文内容,下面案例可供参考学习

一、功能要求

在单片机输出速度不高的的情况下,数据接收方式主要采用查询法或中断法,查询法主要是通过间隔一定的周期不停的查询接收标志方法,如果串口接收标志为真,表明接收到了数据,下位机就可以读数据函数读取该数据,否则继续进行查询是否有数据过来。中断法主要是当串口接收到数据即进入中断函数,接收数据。接收数据和发送数据的数据帧长度可变,但总主句字节数不能超过255。

二、通讯方法

1.查询法

查询法主要代码包括串口初始化、一字节数据发送函数、一字节数据接收函数、接收一帧数据函数、发送一帧数据函数以及清空数据发送缓冲区函数。

串口初始化函数不过多介绍,这里主要介绍发送一字节数据函数,该函数主要是自定义的枚举类来写的,函数返回值为枚举类定义的值,下位机就是通过接收数据中的值与枚举类中的值进行对比,ON为小灯灯熄,OFF为小灭点亮。

代码如下:

//枚举类型定义
typedef enum{NO=0,YES=1}TX_RX;

枚举类定义的函数

代码如下:

TX_RX Send_Byte(USART_TypeDef * USARTx,u8 dat){vu32 cnt=0;USART_SendData(USARTx,dat);while(USART_GetFlagStatus(USARTx,USART_FLAG_TXE)==RESET){cnt++;if(cnt>100000){return NO;}}return YES;
}

查询法的数据接收函数

代码如下:

//查询法接收数据一字节函数
u8 Receive_Byte(USART_TypeDef * USARTx){while(USART_GetFlagStatus(USARTx,USART_FLAG_RXNE)==RESET){}return (USART_ReceiveData(USARTx));
}
//接收一帧数据函数
u8 ReceiveOK(USART_TypeDef * USARTx){vu32 cnt=0;while(1){RxBuffer[RxCount++]=Receive_Byte(USARTx);if(strstr((char *)RxBuffer,"ON")!=NULL){RxCount=0;return 1;}else{if(strstr((char *)RxBuffer,"OFF")!=NULL){RxCount=0;return 2;}else{if(RxCount>3){RxCount=0;}}}cnt++;if(cnt>100000)return 0;}
}

查询法数据发送一帧函数

代码如下:

void Send_String(USART_TypeDef * USARTx,u8 *Message){while(*Message!='\0'){Send_Byte(USARTx,*Message++);}
}

数据发送完成后需要清空数据发送缓冲区,清空函数主要对发送缓冲区中的值逐一赋值0。

代码如下:

void Send_Clear(u8 len){u8 i;for(i=0;i<len;i++){RxBuffer[i]=0;}
}

2.中断法

中断法中主要修改的代码包括配置中断初始化、使能串口中断、编写串口中断函数。

这里主要介绍串口中断函数,中断法中加入了数据帧头以及数据帧尾,如0xEA作为数据帧头,0x55作为数据帧尾。
代码如下:

//串口中断函数
void USART1_IRQHandler(void){if(USART_GetFlagStatus(USART1,USART_IT_RXNE)!=RESET){     //接收中断USART_ClearITPendingBit(USART1,USART_IT_RXNE);        //清除接收中断标志RxBuffer[RxCount]=USART_ReceiveData(USART1);RxCount++;RxCount&=0xFF;}if(RxBuffer[RxCount-1]==0xEA){     //数据帧头RxHeader=RxCount-1;                          //记录数据帧头位置}if((RxBuffer[RxHeader]==0xEA)&&(RxBuffer[RxCount-1]==0x55)){RxLen=RxCount-1-RxHeader;               //数据帧长度RxOK=1;                                                 //接收到数据的标志}if(USART_GetFlagStatus(USART1,USART_FLAG_ORE)==SET){           //数据溢出处理USART_ClearFlag(USART1,USART_FLAG_ORE);     //读到SRUSART_ReceiveData(USART1);            //读DR}
}

结果展示


程序连接

电脑控制单片机LED相关推荐

  1. 串口通信-电脑控制单片机点亮LED

    前言 此篇只对各函数功能做通俗易懂的解释,适合初学者理解串口通信的功能. 一.串口通信 1.什么是串口通信 我们使用的usb转串口是经典的串口通信之一,实现了电脑与单片机之间的联系,将程序通过串口从电 ...

  2. 基于串口通信技术——让数码管显示的数据发送给电脑,电脑控制单片机外设——15单片机

    目录 1.使用的单片机为IAPI15F2K61S2 2.使用的外设 3.各个外设的作用 1.数码管功能 2.LED灯 3.蜂鸣器与继电器 4.按键 5.串口通信 4.利用发送单个字符函数 发送字符型的 ...

  3. 汇编指令控制单片机LED灯

    一.点亮LED灯 简单的对P1口进行操作就可以了 代码: ORG 0000H AJMP MAIN ORG 0100H MAIN:MOV P1,#0FEH ;点亮LED1AJMP MAIN END 二. ...

  4. 关于用串口助手来实现pc控制单片机led并将数据回传

    源代码(C语言) #include<reg52.h> //#include<intrins.h> //#include<copy.h> #define u16 un ...

  5. 用计算机控制150个继电器,计算机怎样控制单片机里的继电器

    电子世界真的很奇妙.在此献上本人第一个电脑控制单片机里的继电器.让你也感受下电子世界奇妙. 单片机程序: 将此程序借助软件写入单片机内: 单片机 PC端为单片机写入的程序的软件 开发板端的连接 PC端 ...

  6. 了解单片机及单片机的控制原理和 DX516 的用法,控制一个 LED 灯的亮

    学习内容 单片机基本原理, 如何使用 DX516 仿真器, 如何编程点亮和灭掉一个 LED 灯, 如何进入 KEILC51uV, 调试环境, 如何使用单步,断点,全速,停止的调试方法. ------- ...

  7. 第01课 了解单片机的原理控制一个LED灯的亮和灭-----51单片机C语言试验教程

    第一课,了解单片机及单片机的控制原理和DX516 的用法,控制一个LED 灯的亮和灭 本章学习内容: 单片机基本原理,如何使用DX516 仿真器,如何编程点亮和灭掉一个LED 灯,如何进入KEILC5 ...

  8. verilog 8位流水灯_用单片机控制的LED流水灯设计

    1.引言 当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代.单片机具有体积小.功能强.成 ...

  9. 【TB-02模组专题⑤】微信小程序通讯TB02 模块控制 STM32 单片机LED灯

    本<安信可ble mesh蓝牙模组TB-02模组专题>系列博客学习由官方博客 CSDN安信可博客 潜心所力所写.如有不对之处,请留言,我们及时更改. 1.BLE MESH开发环境linux ...

最新文章

  1. Windows - Windows批处理
  2. 批量ping脚本shell_30个Linux Shell脚本经典案例(上)
  3. c简单的链表错误及改正
  4. Python笔记-Can’t reconnect until invalid transaction is rolled back
  5. xyntservice
  6. 华师计算机基础在线作业秋,18秋华师《计算机基础》在线作业.docx
  7. php 5.4.25,php5.4.25的c核心用vs2008sp1编译无法通过。解决思路
  8. X-NUCA全国高校网安联赛7月训练题解
  9. 关于android输入框被键盘遮挡的问题
  10. python中基例_python | 自定义函数
  11. 微信支付将为O2O画上句号
  12. Lumion文件结构及Benchmark in progrees问题
  13. php jmail,PHP利用Jmail组件实现发送邮件
  14. [主席树] 湖南集训 谈笑风生
  15. 深入浅出的解释什么是IP地址、子网掩码、端口号、DNS、网关(初学者一定要看看)
  16. grabcut利用matlab如何实现,matlab_grabcut-master 用 实现了 的图像分割的源代码供参考 OpenCV 272万源代码下载- www.pudn.com...
  17. CSS中如何让背景颜色半透明
  18. 修改配置文件不用重启tomcat
  19. 私藏!认认真真推荐几个技术公众号
  20. 《Natural Language Processing with Python》读书笔记 001期

热门文章

  1. 局域网中Openstack的VNC安全配置
  2. HCIP-AI EI Developer V2.0 模拟试卷
  3. 农村大叔开饭店,本来快倒闭了,后来做了一个活动能就买车买房?
  4. python计算狗的年龄_狗狗与人年龄换算表,终于知道狗狗多大了!
  5. XMODEM设计与C代码实现(1.整体设计篇)
  6. 多种子的区域生长算法
  7. 在模型推理时合并BN和Conv层
  8. Cutterman 切图神器,虽然还没用过,先 mark 一下好了
  9. css绘制箭头写法详解
  10. How to remove FAP Filter with Galletto 1260