串口发送接收字符串的C语言代码参考

通过串口把字符串数据从单片机U1发送到单片机U2,通过U2的LCD602显示出来。LCD602显示代码是用的一个比较不错的现成的显示代码。单片机串口传字符串,主要是利用字符串的格式的特点,在传输中结束串口的使用。

Proteus仿真示意参考图:

串口发送字符串的C语言代码参考:通过串口把字符串数据从单片机U1发送到单片机U2,

/*
串口发送字符串的C语言代码参考
注意事项:晶振用11.0592的。
基本原理:通过串口把数据从单片机U1发送到单片机U2,通过U2的LCD602显示出来。
*/

#include "reg52.h"

void Com_Init(void)//初始化串口程序,晶振11.0592, 波特率9600
{     
		 SCON = 0x50; //串口基本设置0101 0000
     PCON = 0x00; //smod串口倍率模式选择
     TMOD = 0x20; //定时器(波特率设置)0010 0000	
     TH1 = 0xFd; //定时器填充值
     TL1 = 0xFd; //定时器初值
     TR1 = 1;		 //开定时器
     //ES = 1;		 //串口中断使能
     //EA = 1;			 //总中断使能	
}

void delay1ms(unsigned int ms)
{
	unsigned int i,j;
	for(i=ms;i>0;i--)
	 for(j=118;j>0;j--);
}

void main()
{
	unsigned char *p;
	unsigned char Buffer[]= "Hello world!";//
	
	Com_Init();
	delay1ms(100);
	p = Buffer;
	while(1)
	{		
		SBUF = *p;
		while(!TI);
		p++;
		if(*p == '\0'){SBUF = *p;break;}//在每个字符串的最后,会有一个'\0'
		TI = 0;
		delay1ms(3);
	}
	while(1);
}

串口接收字符串的C语言代码参考:通过U2的LCD602显示出来。LCD602显示代码是用的一个比较不错的现成的显示代码。

/*
串口接收字符串的C语言代码参考
注意事项:晶振用11.0592的。
基本原理:通过串口把数据从单片机U1发送到单片机U2,通过U2的LCD1602显示出来。
搜集整理:www.dpjcode.cn
*/

#include "reg52.h"
unsigned char String[]={0};

void Com_Init(void)//串口初始化,晶振11.0592,波特率9600
{
		 SCON = 0x50; //串口基本设置0101 0000,第4位REN设置1,REN=1,接受使能
     PCON = 0x00; //smod串口倍率模式选择
     TMOD = 0x20; //定时器(波特率设置)0010 0000		
     TH1 = 0xFd; //定时器填充值
     TL1 = 0xFd; //定时器初值
     TR1 = 1;		 //开定时器
     //ES = 1;		 //串口中断使能
     //EA = 1;			 //总中断使能	
}

/*引脚设置*/
sbit LCD_RS=P2^6;
sbit LCD_RW=P2^5;
sbit LCD_EN=P2^7;
#define LCD_DataPort P0

/*LCD1602延时函数,12MHz调用可延时1ms*/
void LCD_Delay()
{
	unsigned char i, j;

	i = 2;
	j = 239;
	do
	{
		while (--j);
	} while (--i);
}

/*LCD1602写命令*/
void LCD_WriteCommand(unsigned char Command)
{
	LCD_RS=0;
	LCD_RW=0;
	LCD_DataPort=Command;
	LCD_EN=1;
	LCD_Delay();
	LCD_EN=0;
	LCD_Delay();
}

/*LCD1602写数据*/
void LCD_WriteData(unsigned char Data)
{
	LCD_RS=1;
	LCD_RW=0;
	LCD_DataPort=Data;
	LCD_EN=1;
	LCD_Delay();
	LCD_EN=0;
	LCD_Delay();
}

/*LCD1602设置光标位置*/
void LCD_SetCursor(unsigned char Line,unsigned char Column)
{
	if(Line==1)
	{
		LCD_WriteCommand(0x80|(Column-1));
	}
	else if(Line==2)
	{
		LCD_WriteCommand(0x80|(Column-1+0x40));
	}
}

/*LCD1602初始化函数*/
void LCD_Init()
{
	unsigned int i;
	for(i=0;i<5;i++){LCD_Delay();}
	LCD_WriteCommand(0x38);//八位数据接口,两行显示,5*7点阵
	for(i=0;i<15;i++){LCD_Delay();}
	LCD_WriteCommand(0x38);
	LCD_WriteCommand(0x08);
	LCD_WriteCommand(0x01);//光标复位,清屏
	LCD_WriteCommand(0x06);//数据读写操作后,光标自动加一,画面不动
	LCD_WriteCommand(0x0c);//显示开,光标关,闪烁关 
}

/*在LCD1602指定位置上显示一个字符,
Line 行位置,范围:1~2
Column 列位置,范围:1~16
Char 要显示的字符*/
void LCD_ShowChar(unsigned char Line,unsigned char Column,char Char)
{
	LCD_SetCursor(Line,Column);
	LCD_WriteData(Char);
}

void Main()
{
	unsigned char i=0;
	LCD_Init();
	Com_Init();
	while(1){
	while(!RI);
	RI = 0;
	if(SBUF == '\0')break;
	LCD_ShowChar(1,++i,SBUF);
	}	
	while(1);
}

单片机串口传字符串,主要是利用字符串的格式的特点,在传输中结束串口的使用。

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值