文章目录

  • 一、上位机发送信号控制单片机
    • 1、显示对应的流水灯
    • 2、显示对应数码管
    • 3、控制数码管显示的数字
  • 二、两机收发信息

一、上位机发送信号控制单片机

1、显示对应的流水灯

实现现串口通信接收上位机的信息,控制流水灯的亮灭与亮的位置,发送流水灯控制信号,单片机接收信号并显示对应的流水灯。

#include <reg52.h>
#define uchar unsigned char;
//sbit LED = P1^4;
uchar UART_buff;
bit Money = 0;
//----------------------------------------------
void main (void)
{  SCON = 0x50;   //串口方式1, 8-n-1, 允许接收.  TMOD = 0x20;   //T1方式2  TH1 = 0xFD;    //[url=]//9600bps@11.0592MHz[/url]  TL1 = 0xFD;TR1 = 1;ES  = 1;       //开中断.  EA  = 1;while(Money==0);    //等待中断触发,等着再次输入信号
}
//----------------------------------------------
void ser_int (void) interrupt 4   //一旦串口打开了,就执行该中断服务函数,中断号为4
{  if(RI == 1)    //如果收到消息.{   RI = 0;      //清除标志.   UART_buff = SBUF;   //将接收的数据变为uchar类型 P1 = UART_buff;   //点亮对应的流水灯if(UART_buff == '$')  Money = 1; //中断返回,一旦有$符号,中断就永久触发了,不断循环收发消息 }
}

2、显示对应数码管

现串口通信接收上位机的信息,控制数码管显示的位置,发送数码管的位选信号,单片机接收信号并显示对应的数码管,显示数字为9。

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
Uartinit();
void delay(uint x);sbit dula= P2^6;
sbit wela= P2^7;
uchar Uart_buff;// 串口通信初始化
void UartInit(void)     //9600bps@11.0592MHz
{SCON = 0x50;      //8位数据,可变波特率TMOD = 0x20;       //设定定时器1为16位自动重装方式TL1 = 0xFD;      //设定定时初值TH1 = 0xFD;        //设定定时初值ET1= 0;  //禁止定时器1中断TR1= 1;  //启动定时器1ES= 1;  //串口中断EA= 1;  //总中断
}void main()
{Uartinit();  //执行初始化while(1) ;  //等待串口中断的触发
}// 显示数码管
void display() interrupt 4
{if(RI==1)   //如果接收到消息{RI= 0;  //手动清零接收位Uart_buff= SBUF;wela= 1;P0= Uart_buff;wela= 0;dula= 1;P0= 0x6F;  //显示数字9dula= 0;  delay(500); }
}void delay(uint x)  //延时x毫秒的函数
{uint i,j;for(i=x; i>0; i--){for(j=110; j>0; j--) ;}
}

3、控制数码管显示的数字

现串口通信接收上位机的信息,控制数码管显示的数字,发送数码管的段选信号,单片机接收信号并显示相应的数字,位置为左边4个位选,同时流水灯不断左移变化。

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned intvoid display_ISR();      //中断显示函数
void Uart_Init();  //中断初始化函数
void delay_ms(uint x);
void light();uchar UART_buff;
sbit dula = P2^6;
sbit wela = P2^7;void Uart_Init()
{SCON = 0x50;TMOD = 0x20;  //方式2TH1 = 0xFD;    //定时器1重装初值TL1 = 0xFD;ET1 = 0;  //关定时器1中断TR1 = 1;  //启动定时器1运行ES = 1;  //串口中断EA = 1;  //总中断
}void main()
{uchar temp = 0xFE;Uart_Init();P1 = temp;delay_ms(500);while(1)  //等待中断触发{    light(temp);}
}void light(temp)
{if(temp != 0x00)     {temp = temp << 1;  //左移一位,不断循环不断左移P1 = temp;delay_ms(500);   }else   //如果全亮了temp = 0xFF;P1 = temp;
}void display_ISR() interrupt 4
{if(RI==1)       //如果收到消息{UART_buff = SBUF;RI = 0;wela = 1;P0 = 0xF0;wela = 0;dula = 1;P0 = UART_buff;dula = 0;delay_ms(1500);  //延时1500ms,1.5秒}
}void delay_ms(uint x)
{uint i, j;for(i=x; i>0; i--)for(j=110; j>0; j--) ;
}

二、两机收发信息

实现不断收发信息,串口通信上的发送信息与接收信息,在上位机向单片机发送信息
然后单片机接收信息并将数据进行+2处理,再发送回上位机显示出来。

#include <reg52.h>
#define uchar unsigned char
void Uart_Init();  //初始化函数
sbit LED= P1^4;bit new=0, sended=1;
/*错误点:sended初始必须为1*/uchar UART_buff;void Uart_Init()
{SCON= 0x50;TMOD= 0x20;TH1= 0xFD;TL1= 0xFD;ET1= 0;TR1= 1;ES = 1;EA = 1;
}void main()
{Uart_Init();while(1)    //正常运行,并等待中断的触发{if((new==1) && (sended==1)){/*易错遗忘点*/SBUF = UART_buff; //那就发送 new = 0;  sended = 0;  }}
}void ser_int (void)    interrupt 4
{if(RI == 1)  //如果收到信息 {  RI = 0;      //清除标志.new= 1;    UART_buff = SBUF;  //接收.  if(UART_buff == '1')  LED= 1;  //启动一个LED灯else if(UART_buff == '0')  LED= 0;else{UART_buff = UART_buff + 2;}  }  else  {        //如果送毕.  TI = 0;      //清除标志.  sended = 1;  }
}

蓝桥杯51单片机之串口通信发送接收信息【单片机开发初学者串口必会】相关推荐

  1. 51单片机串口通信发送以及接收代码详解1

    #include <reg51.h> //实验现象:单片接收电脑发送的字符串,并发回给PC端的代码.//函数声明 void uart_init(void); void uart_seng_ ...

  2. 51单片机串口通信发送以及接收代码详解2

    #include <reg51.h> //实验现象:在电脑端没按下发送的时候,单片一直给电脑发送aaa字符串: //实验现象:在电脑端按下发送的时候,结束字符串aaa的发送代码,执行单片接 ...

  3. 单片机实验八 RS232串口通信实验(接收与发送)

    实验八 RS232串口通信实验(接收与发送) 一.实验目的 1.熟悉实验软件和硬件,进行正确的接线: 2.通过实验了解串口的基本原理及使用,理解并掌握对串口进行初始化: 3.使用串口调试助手做为上位机 ...

  4. java串口发送16进制数据_MFC串口通信发送16进制数据的方法

    本文实例为大家分享了MFC串口通信发送16进制数据的具体代码,供大家参考,具体内容如下 MFC串口通信会使用m_mscomm控件. 发送数据一般是在edit control 里输入自己想发送的内容,然 ...

  5. delphi 串口通信发送_关于串口通信232、485、422和常见问题,就没见过能讲这么清楚的...

    先讲串口通信的一些基本概念,术语.如果对串口通信比较熟悉的,就当复习,如果哪里讲的不到位,欢迎及时指出. 这里并不对串口的编程作讲解,主要是从应用的角度去讲一讲.因为更多的时候,都是产品做好了,比如触 ...

  6. 求android 中串口的发送接收数据代码

    RT,求高手帮忙! 就是 /dev/ttyS0 和/dev/ttyS1 两个设备的通信问题.. 同求~ 这个是不是需要串口驱动啊?最近正在搞这个串口通信的案子,头疼 同样也没有搞出来,老是报:不能扫描 ...

  7. STM32H7xx 串口DMA发送接收(LL库)

    文章目录 1 前言 2 STM32H7实现 2.1 关键步骤 2.2 注意事项 3 代码仓库 1 前言   关于串口DMA收发实现,不同CPU其套路都是类似的,不同之处在于寄存器配置.依赖BSP库等差 ...

  8. C#解决串口通信中接收数据时延迟处理与缓存处理的方法

    转载连接: http://blog.csdn.net/yaoliang11/article/details/6885768 C#解决串口通信中接收数据时延迟处理与缓存处理的方法 时间:2011-1-2 ...

  9. 串口通信,接收并解析数据的方式

    串口通信,接收并解析数据的方式 (点击链接阅读原文)

最新文章

  1. winform让子窗体始终居于父窗体的中间
  2. %w(数组)是什么意思?
  3. Linux IP 配置
  4. 色彩丰富的水彩纹理背景,配合排版和简单的设计元素,给任何设计带来乐趣。
  5. Tomcat和Weblogic的区别
  6. CPU的内部架构和工作原理
  7. 人工智能-机器学习之seaborn(读取xlsx文件,小提琴图)
  8. VB脚本:快速入门教程
  9. AIScanner文字识别软件 OCR
  10. 软件定义网络带来新的自动化优势和挑战
  11. 展望未来~走向计算机之路
  12. 重启服务器:docker重启,docker内部mysql怎么重启启动
  13. 源码解析2-GUI-绘制引擎(QPainter源码分析 )
  14. matlab 二次不等式约束,请教高手如何用matlab解多元二次不等式的解,有三个未知数x1,x2,x3,约束条件如下:...
  15. 关于相对熵(KL距离)的理解
  16. 微信小程序商城优势在什么地方
  17. 邮件的发送和接收过程-----简单邮件传输协议(SMTP)和邮件读取协议!!!
  18. 苹果IWatch真香,包邮送一个!
  19. CentOS5.5下TOMCAT6快速yum安装
  20. 写给人类的机器学习 2.1 监督学习

热门文章

  1. java字符串转json_java 字符串转成 json 数组并且遍历
  2. python构造自定义数据包_pytorch中的自定义数据处理详解
  3. mysql脚本中如何写判断_mysql中如何写判断语句
  4. 网页表单回车自动提交问题
  5. springboot中mongodb自定义类型转换器
  6. tensor如何实现转置_PyTorch中的傅立叶卷积:通过FFT有效计算大核卷积的数学原理和代码实现...
  7. delete select语句_MySQL InnoDB锁介绍及不同SQL语句分别加什么样的锁
  8. android 传感器 应用,Android移动设备中传感器的应用
  9. yolo系列外文翻译_Yolo系列其三:Yolo_v3
  10. proxmox换源_关于Proxmox 5.x的国内有效镜像源