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

📄 serial.c

📁 proteus仿真的单片机串口通信
💻 C
字号:
#include <reg51.h>
#include "LM016L.H"

unsigned char RData[17],j;
unsigned char TData[] = "INT0 Interrupt .";
unsigned char *str;

////////////////// LCD ////////////////////////

//初始化LCD
void LCD_Initial()
{
	LCDE = 0;
	LCD_Write(LCDCOMMAND,0x38);
	LCD_Write(LCDCOMMAND,0x38);
	LCD_SetDisplay(LCDSHOW | LCDNOCURSOR);
	LCD_Write(LCDCOMMAND,LCDCLEARSCREEN);
	LCD_SetInput(LCDACUP | LCDNOMOVE);
}
//内部等待函数
unsigned char LCD_Wait(void)
{
	LCDRS = 0;
	LCDRW = 1;
	_nop_();
	LCDE  = 1;
	_nop_();
	//while(LCDDB & 0x80);
	LCDE = 0;
	return LCDDB;
}
//向LCD写入命令或数据
void LCD_Write(bit style, unsigned char input)
{
	LCDE = 0;
	LCDRS = style;
	LCDRW = 0;
	_nop_();
	LCDDB = input;
	_nop_();
	LCDE = 1;
	_nop_();
	LCDE = 0;
	_nop_();
	LCD_Wait();
}
//设置显示模式
void LCD_SetDisplay(unsigned char DisplayMode)
{
	LCD_Write(LCDCOMMAND,0x08 | DisplayMode);
}
//设置输入模式
void LCD_SetInput(unsigned char InputMode)
{
	LCD_Write(LCDCOMMAND,0x04 | InputMode);
}
void GotoXY(unsigned char x, unsigned char y)
{
	if(y == 0)
	{
		LCD_Write(LCDCOMMAND,0x80 | x);
	}
	if(y == 1)
	{
		LCD_Write(LCDCOMMAND,0x80 | (x - 0x40));
	}
}
void Print(unsigned char *str)
{
	while(*str != '\0')
	{
		LCD_Write(LCDDB,*str);
		str++;
	}
}

////////////////// 80C51 ////////////////////////

void Serial_Initial()
{
	TMOD = 0x20;			// 定时器1工作于8位自动重载模式, 用于产生波特率
	TH1 = 0xFD;				// 波特率9600
	TL1 = 0xFD;
	
	SCON = 0x50;			// 设定串行口工作方式  
	PCON &= 0xef;			// 波特率不倍增
		
	TR1 = 1;				// 启动定时器1
	ES = 1;					// 允许串口中断中断
	EA = 1;
}

void INT0_Initial()
{
	EX0 = 1;              // INT0中断开
	IT0 = 1;              // INT0低电平触发(为1则为下降沿触发)
	EA  = 1;
}

void Serial_interrupt() interrupt 4
{
	EA = 0;
	RI = 0;
	RData[j] = SBUF;
	j++;
	EA = 1;
}

void INT0_interrupt() interrupt 0
{
	EA = 0;
	str = TData;
	while(*str != '\0')
	{
		TI = 0;
		SBUF = *str;
		while(!TI);
		TI = 0;
		str++;
	}
	EA = 1;
}

////////////////// main ////////////////////////

void main()
{
	LCD_Initial();
	Serial_Initial();
	INT0_Initial();
	
	while(1)
	{		
		if(j > 15)
		{
			GotoXY(0,0);
			RData[16] = '\0';
			Print(RData);
			j = 0;
		}	
	}
}

⌨️ 快捷键说明

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