📄 1.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 + -