电脑控制单片机LED
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相关推荐
- 串口通信-电脑控制单片机点亮LED
前言 此篇只对各函数功能做通俗易懂的解释,适合初学者理解串口通信的功能. 一.串口通信 1.什么是串口通信 我们使用的usb转串口是经典的串口通信之一,实现了电脑与单片机之间的联系,将程序通过串口从电 ...
- 基于串口通信技术——让数码管显示的数据发送给电脑,电脑控制单片机外设——15单片机
目录 1.使用的单片机为IAPI15F2K61S2 2.使用的外设 3.各个外设的作用 1.数码管功能 2.LED灯 3.蜂鸣器与继电器 4.按键 5.串口通信 4.利用发送单个字符函数 发送字符型的 ...
- 汇编指令控制单片机LED灯
一.点亮LED灯 简单的对P1口进行操作就可以了 代码: ORG 0000H AJMP MAIN ORG 0100H MAIN:MOV P1,#0FEH ;点亮LED1AJMP MAIN END 二. ...
- 关于用串口助手来实现pc控制单片机led并将数据回传
源代码(C语言) #include<reg52.h> //#include<intrins.h> //#include<copy.h> #define u16 un ...
- 用计算机控制150个继电器,计算机怎样控制单片机里的继电器
电子世界真的很奇妙.在此献上本人第一个电脑控制单片机里的继电器.让你也感受下电子世界奇妙. 单片机程序: 将此程序借助软件写入单片机内: 单片机 PC端为单片机写入的程序的软件 开发板端的连接 PC端 ...
- 了解单片机及单片机的控制原理和 DX516 的用法,控制一个 LED 灯的亮
学习内容 单片机基本原理, 如何使用 DX516 仿真器, 如何编程点亮和灭掉一个 LED 灯, 如何进入 KEILC51uV, 调试环境, 如何使用单步,断点,全速,停止的调试方法. ------- ...
- 第01课 了解单片机的原理控制一个LED灯的亮和灭-----51单片机C语言试验教程
第一课,了解单片机及单片机的控制原理和DX516 的用法,控制一个LED 灯的亮和灭 本章学习内容: 单片机基本原理,如何使用DX516 仿真器,如何编程点亮和灭掉一个LED 灯,如何进入KEILC5 ...
- verilog 8位流水灯_用单片机控制的LED流水灯设计
1.引言 当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未见的速度被单片机智能控制系统所取代.单片机具有体积小.功能强.成 ...
- 【TB-02模组专题⑤】微信小程序通讯TB02 模块控制 STM32 单片机LED灯
本<安信可ble mesh蓝牙模组TB-02模组专题>系列博客学习由官方博客 CSDN安信可博客 潜心所力所写.如有不对之处,请留言,我们及时更改. 1.BLE MESH开发环境linux ...
最新文章
- Windows - Windows批处理
- 批量ping脚本shell_30个Linux Shell脚本经典案例(上)
- c简单的链表错误及改正
- Python笔记-Can’t reconnect until invalid transaction is rolled back
- xyntservice
- 华师计算机基础在线作业秋,18秋华师《计算机基础》在线作业.docx
- php 5.4.25,php5.4.25的c核心用vs2008sp1编译无法通过。解决思路
- X-NUCA全国高校网安联赛7月训练题解
- 关于android输入框被键盘遮挡的问题
- python中基例_python | 自定义函数
- 微信支付将为O2O画上句号
- Lumion文件结构及Benchmark in progrees问题
- php jmail,PHP利用Jmail组件实现发送邮件
- [主席树] 湖南集训 谈笑风生
- 深入浅出的解释什么是IP地址、子网掩码、端口号、DNS、网关(初学者一定要看看)
- grabcut利用matlab如何实现,matlab_grabcut-master 用 实现了 的图像分割的源代码供参考 OpenCV 272万源代码下载- www.pudn.com...
- CSS中如何让背景颜色半透明
- 修改配置文件不用重启tomcat
- 私藏!认认真真推荐几个技术公众号
- 《Natural Language Processing with Python》读书笔记 001期