⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1.c

📁 本文件是单片机的串口通信(接收显示并发送)含有C程序。
💻 C
字号:
/****************************************************/
/*
*文件名:1.c
*功能描述:单片机系统复位后等待数据的接收,单片机将接收到的数据在液晶上显示并从串口发送出去
*参数:波特率为19200,8位数据位,无校验位
*返回值:无
*作者:黄英杰
*单位:吉首大学
*时间:2008.9.27
*/
/****************************************************/
#include"reg52.h"
#include"absacc.h"


#define A_LCDCODE XBYTE[0x4000]//定义给液晶写命令的绝对地址变量
#define A_LCDDATA XBYTE[0x4001]//定义给液晶写数据的绝对地址变量
#define Data_Len 8//接收数据长度


void Send_Data(void);//串口发送数据函数
void delay(unsigned int t);
void init_lcd(void);
void lcd_code(unsigned char lcdcode);
void lcd_data(unsigned char lcddata);
void display_char();


unsigned char idata Buffer[200];
unsigned char Count=0;//建立一数组存放接收到的数据,Count存储数据个数
bit Receive_flag=0;//接收完成标志位


void main(void)
{	
        init_lcd();//初始化液晶
		T2CON=0x30;//T2作为波特率发生器
		RCAP2H=0xff;
        RCAP2L=0xec;//波特率为19200
	    ES=1;
		EA=1;//开总中断,允许串口中断
		SCON=0x50;// 串口工作方式为工作方式1,允许接收
		PCON=0x00;
        TI=0;
		RI=0;
		TR2=1;
		while(1)
		{
		      if(Receive_flag==1)
			  {
			  		Receive_flag=0;
                    lcd_code(0x01);//清屏指令
					lcd_code(0x80);
                    display_char();//将接收到的数据在液晶上显示
                    Send_Data();//将接收到的数据发送出去
			  }
		}
}


/*************************串口接收中断函数***********************/
void Receive_Data() interrupt 4 using 1
{
     unsigned char num;
     if(RI)//判断是接收还是发送引起的中断
     {
       	RI=0;
	   	num=SBUF;
       	Buffer[Count]=num;//将接收到的数据保存到数据缓冲区
	   	Count++;
	   	if(Count==Data_Len)
	   	{
	        	Receive_flag=1;//数据接收完成,置位标志位
	   	}
     }
}


/*************************串口发送数据函数***********************/
void Send_Data(void)
{
     unsigned char j;
	 for(j=0;j<Count;j++)
	 {
	     SBUF=Buffer[j];//发送数据
	     while(!TI);//等待发送,若未发送完则等待
	     TI=0;
	 }
	 Count=0;
}


/*********************延时函数********************/
void delay(unsigned int t)
{
	unsigned int i;
	for(i=0;i<=t;i++);
}



/************向液晶写一个命令的函数***************/
void lcd_code(unsigned char lcdcode)
{ 
	   delay(3);
	   A_LCDCODE=lcdcode;
	   delay(200);
} 



/**************向液晶写一个数据的函数*************/
void lcd_data(unsigned char lcddata)
{
	   delay(3);
	   A_LCDDATA=lcddata;
	   delay(60);
}



/******************初始化液晶屏函数**************/
void  init_lcd(void)
{
	    delay(1000);
        lcd_code(0x38);//功能设定,5*7点阵,8位数据接口
        delay(1000);
        lcd_code(0x0c);//显示画面设置,开显示
        delay(1000);
        lcd_code(0x01);//清屏指令
        delay(1000);
        lcd_code(0x06);//当读或写一个字符后地址指针加1,且光标加1
        delay(1000);
}



/***************显示接收字符数据的函数*******************/
void display_char()
{
    unsigned char i=0;
	while(i<Count)
	{
		lcd_data(Buffer[i]);
		i++;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -