当前位置:文档之家› uart_c

uart_c

#include
sbit LCD_RS = P4 ^ 6;
sbit LCD_RW = P4 ^ 5;
sbit LCD_E = P4 ^ 4;
sbit LED_RUN = P3 ^ 2;
#define uchar unsigned char
#define uint unsigned int
void LCD_init(void);//初始化函数
void LCD_write_command(uchar command);//写指令函数
void LCD_write_data(uchar dat);//写数据函数
void LCD_disp_xy(uchar x,uchar y);//设置光标位置
void LCD_disp_char(uchar x,uchar y,uchar dat);//在某个屏幕位置上显示一个字符,X(0-16),y(0-1)
void LCD_disp_string(uchar x,uchar y,uchar *s);//显示字符串
void delay(uint h);//延时函数 1us
unsigned char code LcdBuf1[]= {"welcom! LXyang!"};
//*******初始化函数***************
void LCD_init(void)
{

LCD_write_command(0x38);//设置16×2显示,5×7点阵,8位数据接?
LCD_write_command(0x01);//清除屏幕显示 (显示清屏,光标复位到地址00H位置)
LCD_write_command(0x06);//设定输入方式,增量不移位 (显示光标移动设置,写入新数据后光标右移,显示屏不移动)
LCD_write_command(0x0c);//整体显示,关光标,不闪烁
//LCD_write_command(0x08); //关闭显示
delay(100);


}
//********************************
//********写指令函数************
void LCD_write_command(uchar dat)
{
delay(500);

P0=dat;
LCD_RS=0;//指令 (当RS和RW共同为低电平时可以写入指令或者显示地址)
LCD_RW=0;//写入

LCD_E=1;//允许
delay(100);
LCD_E=0;


}
//*******************************
//********写数据函数*************
void LCD_write_data(uchar dat)
{
delay(500);

P0=dat;
LCD_RS=1;//数据(当RS为高电平RW为低电平时可以写入数据)
LCD_RW=0;//写入

LCD_E=1;//允许(E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令)
delay(100);
LCD_E=0;


}
//********************************
//*******设置光标*******
void LCD_disp_xy(uchar x,uchar y)
{
uchar address;
if(y==1)
address=0xc0+x;
else
address=0x80+x;
LCD_write_command(address);


}
//*******显示一个字符函数*********
void LCD_disp_char(uchar x,uchar y,uchar dat)
{
LCD_disp_xy(x,y);
LCD_write_data(dat);
}
//********************************
//*******显示字符串*******
void LCD_disp_string(uchar x,uchar y,uchar *s)
{
LCD_disp_xy(x,y);
while(*s)
{
LCD_write_data(*s);

s++;
}
}
//********************************

//********延时函数***********************
void delay(uint h)
{

while(h--); //1us

}

/*主程序*/
void main (void)
{
uint i=0;
P4SW |=0x70; //设置P4口为普通IO
LCD_init();
// LCD_disp_string(1,0,LcdBuf1);
// for(i=0;i<1000;i++)
// {delay(1000);}


SCON = 0x50; /* SCON: 模式1, 8-bit UART, 使能接收*/
TMOD |= 0x20; /* TMOD: timer 1, mode 2,
8-bit reload*/
TH1 = 0xFD; /* TH1: reload value for 9600 baud @ 11.0592MHz */
TR1 =

1; /* TR1: timer 1 run */
EA = 1; /*打开总中断*/
ES = 1; /*打开串口中断*/
LCD_write_command(0x80);
while (1) /*主循环不做任何动作*/
{

}
}
void UART_SER (void) interrupt 4 //串行中断服务程序
{

unsigned char Temp; //定义临时变量


if(RI) //判断是接收中断产生
{
RI=0; //标志位清零
Temp=SBUF; //读入缓冲区的值



LCD_write_data(Temp);



// P1=Temp; //把值输出到P1口,用于观察
SBUF=Temp; //把接收到的值再发回电脑端
}
if(TI) //如果是发送标志位,清零
TI=0;
}

相关主题
文本预览
相关文档 最新文档