用蓝桥杯单片机使用串口通信发送数字与字符串和接收数据

目录

1.发送与接收数字

   1.基本功能

   2.初始化

3.电脑发送数据功能

  4.代码

2.发送与接收字符串

 1.基本功能

   2.初始化

3.电脑发送数据功能

 4.代码


1.发送与接收数字

   1.基本功能

1)通过串口1发送数据。

2)电脑发送数字给单片机,单片机打开LED灯

   2.初始化

1)关闭蜂鸣器、继电器。

2)单片机发送内容  “  openled  ” 。

3)使用文本界面接收

3.电脑发送数据功能

1)发送1打开LED1。

2)发送2打开LED2.以此类推。

3)发送9关闭LED灯。

4)使用Hex界面发送

 

  4.代码

#include <STC15F2K60S2.H>
#include "uart.h"

void Device(unsigned char p2,unsigned char p0)
{
    P0=p0;
    P2=P2&0x1f|p2;
    P2=P2&0x1f;
}

void system()
{
Device(0x80,0xff);
Device(0xa0,0);
}
void UartInit(void)		//9600bps@11.0592MHz
{
	SCON = 0x50;		//8位数据,可变波特率
	AUXR |= 0x40;		//定时器时钟1T模式
	AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器
	TMOD &= 0x0F;		//设置定时器模式
	TL1 = 0xE0;		//设置定时初始值
	TH1 = 0xFE;		//设置定时初始值
	ET1 = 0;		//禁止定时器%d中断
	TR1 = 1;		//定时器1开始计时
    EA=1;            //打开总中断
    ES=1;            //打开串口中断
}
//发送一个字节
//数字界面接收16进制的
//文本界面接收字符
void UART_SendByte(unsigned char Byte)
{
    SBUF=Byte;
	while(TI==0);
	TI=0;

}
unsigned char k[]="openled";

void main()
{
    UartInit();
    system();
    UART_SendByte(k[0]);
    UART_SendByte(k[1]);
    UART_SendByte(k[2]);
    UART_SendByte(k[3]);
    UART_SendByte(k[4]);
    UART_SendByte(k[5]);
    UART_SendByte(k[6]);
while(1)
{

}
}

void uaet1() interrupt 4
{
//hex界面发送用的
    if(RI==1)					//如果接收标志位为1,接收到了数据
	{
        n=SBUF-1;
        if(n<9)
        {
        Device(0x80,~(0x01<<n));			//读取数据,取反后输出到LED
        }
		if(n==9)
        {Device(0x80,0xff);			//读取数据,输出到LED}
		UART_SendByte(SBUF);	//将受到的数据发回串口
		RI=0;					//接收标志位清0
	}

    

2.发送与接收字符串

 1.基本功能

1)通过串口1发送数据。

2)电脑发送数字给单片机,单片机打开LED灯

   2.初始化

1)关闭蜂鸣器、继电器。

2)单片机发送内容  “  想要打开LED灯请输入对应的序号  ” 。

3)使用文本界面接收

3.电脑发送数据功能

1)发送1打开LED1。

2)发送2打开LED2.以此类推。

3)发送9关闭LED灯。

4)使用文本界面接收。

 4.代码

#include <STC15F2K60S2.H>

void Device(unsigned char p2,unsigned char p0)
{
    P0=p0;
    P2=P2&0x1f|p2;
    P2=P2&0x1f;
}

void system()
{
Device(0x80,0xff);
Device(0xa0,0);
}

void UartInit(void)		//9600bps@11.0592MHz
{
	SCON = 0x50;		//8位数据,可变波特率
	AUXR |= 0x40;		//定时器时钟1T模式
	AUXR &= 0xFE;		//串口1选择定时器1为波特率发生器
	TMOD &= 0x0F;		//设置定时器模式
	TL1 = 0xE0;		//设置定时初始值
	TH1 = 0xFE;		//设置定时初始值
	ET1 = 0;		//禁止定时器%d中断
	TR1 = 1;		//定时器1开始计时
    EA=1;
    ES=1;
}
//发送一个字节
//数字界面接收16进制的
//文本界面接收字符
void UART_SendByte(unsigned char Byte)
{
    SBUF=Byte;
	while(TI==0);
	TI=0;

}

//发送字符串
void UART_swing( char*a)
{
 unsigned  char i=0;
do
{
UART_SendByte(*(a+i));
    i++;
}while(*(a + i)!='\0');
}


char a;
void main()
{
    UartInit();
    system();
    UART_swing("想要打开LED灯请输入对应的序号\n");

    
while(1)
{


}
}

void uaet1() interrupt 4
{

    if(RI==1)
    {
    a=SBUF;
    switch(a)
    {
        case '1': Device(0x80,~0x01);break;
        case '2': Device(0x80,~0x02);break;
        case '3': Device(0x80,~0x04);break;
        case '4': Device(0x80,~0x08);break;
        case '5': Device(0x80,~0x10);break;
        case '6': Device(0x80,~0x20);break;
        case '7': Device(0x80,~0x40);break;
        case '8': Device(0x80,~0x80);break;
        case '9': Device(0x80, 0xff);break;
    
    }
    UART_SendByte(SBUF);	//将受到的数据发回串口
		RI=0;					//接收标志位清0
    }
    
}

物联沃分享整理
物联沃-IOTWORD物联网 » 用蓝桥杯单片机使用串口通信发送数字与字符串和接收数据

发表评论