串口通信接收LCD1602显示.docx

上传人:b****6 文档编号:16616869 上传时间:2023-07-15 格式:DOCX 页数:9 大小:34.35KB
下载 相关 举报
串口通信接收LCD1602显示.docx_第1页
第1页 / 共9页
串口通信接收LCD1602显示.docx_第2页
第2页 / 共9页
串口通信接收LCD1602显示.docx_第3页
第3页 / 共9页
串口通信接收LCD1602显示.docx_第4页
第4页 / 共9页
串口通信接收LCD1602显示.docx_第5页
第5页 / 共9页
串口通信接收LCD1602显示.docx_第6页
第6页 / 共9页
串口通信接收LCD1602显示.docx_第7页
第7页 / 共9页
串口通信接收LCD1602显示.docx_第8页
第8页 / 共9页
串口通信接收LCD1602显示.docx_第9页
第9页 / 共9页
亲,该文档总共9页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

串口通信接收LCD1602显示.docx

《串口通信接收LCD1602显示.docx》由会员分享,可在线阅读,更多相关《串口通信接收LCD1602显示.docx(9页珍藏版)》请在冰点文库上搜索。

串口通信接收LCD1602显示.docx

串口通信接收LCD1602显示

串口通信接收LCD1602显示

注意:

晶振使用11.0592MHz

波特率9600

/********************************************************************

*文件名:

串口接收试验.c

*描述:

该程序从串口接收数据,通过LCD显示数据。

在LCD的第一行显示出来,

当数据过多时(超过16个字符),LCD第一行将会被覆盖。

该试验使用的晶振是11.0592,如果使用12M晶振,会出现串口接收

不正常的情况。

原因是用12M晶振,波特率9600时的误差率达8%。

***********************************************************************/

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

/*LED_Buffer[16]用来存储串口发送的数据,com_dat用来记录串口发送的个数*/ucharLED_Buffer[16],*q,com_dat;//从串口接收的数据

//这三个引脚参考资料

sbitE=P2^7;//1602使能引脚

sbitRW=P2^6;//1602读写引脚

sbitRS=P2^5;//1602数据/命令选择引脚

/********************************************************************

*名称:

Delay(uintdel)

*功能:

延时10ms*del

*输入:

*输出:

***********************************************************************/

voidDelay(uintdel)

{

uinti,j;

for(i=0;i

for(j=0;j<1827;j++)

;

}

/********************************************************************

*名称:

delay()

*功能:

延时,延时时间大概为140US。

*输入:

*输出:

***********************************************************************/

voiddelay()

{

inti,j;

for(i=0;i<=10;i++)

for(j=0;j<=2;j++)

;

}

/********************************************************************

*名称:

Convert(ucharIn_Date)*功能:

因为电路设计时,P0.0--P0.7接法刚好了资料中的相反,所以设计该函数。

*输入:

1602资料上的值

*输出:

送到1602的值

***********************************************************************/

ucharConvert(ucharIn_Date){

uchari,Out_Date=0,temp=0;

for(i=0;i<8;i++)

{

temp=(In_Date>>i)&0x01;Out_Date|=(temp<<(7-i));

}

returnOut_Date;

}

/********************************************************************

*名称:

enable(uchardel)

*功能:

1602命令函数

*输入:

输入的命令值

*输出:

***********************************************************************/

voidenable(uchardel)

{

P0=Convert(del);

RS=0;

RW=0;

E=0;

delay();

E=1;

delay();

}

/********************************************************************

*名称:

write(uchardel)

*功能:

1602写数据函数

*输入:

需要写入1602的数据

*输出:

***********************************************************************/

voidwrite(uchardel)

{

P0=Convert(del);

RS=1;

RW=0;

E=0;

delay();

E=1;

delay();

}

/********************************************************************

*名称:

L1602_init()

*功能:

1602初始化,请参考1602的资料

*输入:

*输出:

***********************************************************************/

voidL1602_init(void)

{

enable(0x01);

enable(0x38);

enable(0x0c);

enable(0x06);

enable(0xd0);

}

/********************************************************************

*名称:

L1602_char(ucharhang,ucharlie,charsign)*功能:

改变液晶中某位的值,如果要让第一行,第五个字符显示"b",调用该函数如下

L1602_char(1,5,'b')

*输入:

行,列,需要输入1602的数据

*输出:

***********************************************************************/

voidL1602_char(ucharhang,ucharlie,charsign)

{

uchara;

if(hang==1)a=0x80;

if(hang==2)a=0xc0;

a=a+lie-1;

enable(a);

write(sign);

}

/********************************************************************

*名称:

L1602_string(ucharhang,ucharlie,uchar*p)

*功能:

改变液晶中某位的值,如果要让第一行,第五个字符开始显示"abcdef",调用该函数如下

L1602_string(1,5,"abcdef;")*输入:

行,列,需要输入1602的数据

*输出:

***********************************************************************/

voidL1602_string(ucharhang,ucharlie,uchar*p)

{

uchara;

if(hang==1)a=0x80;

if(hang==2)a=0xc0;

a=a+lie-1;

enable(a);

while

(1)

{

if(*p=='\0')break;

write(*p);

p++;

}

}

/********************************************************************

*名称:

Com_Int()

*功能:

串口中断子函数

*输入:

*输出:

***********************************************************************/

voidCom_Int(void)interrupt4{

EA=0;

if(RI==1)//当硬件接收到一个数据时,RI会置位

{

LED_Buffer[com_dat]=SBUF;//把从串口读出的数存到数组

RI=0;

com_dat++;

if(com_dat==16)com_dat=0;//当com_dat=16时,清0,防止数组溢出

}

EA=1;

}

/********************************************************************

*名称:

Com_Init()

*功能:

串口初始化,晶振11.0592,波特率9600,使能了串口中断*输入:

*输出:

***********************************************************************/

voidCom_Init(void)

{

TMOD=0x20;//定时器工作在定时器1的方式2

PCON=0x00;//不倍频

SCON=0x50;//串口工作在方式1,并且启动串行接收

TH1=0xFd;//设置波特率9600

TL1=0xFd;

TR1=1;//启动定时器1

ES=1;//开串口中断

EA=1;//开总中断

}

/********************************************************************

*名称:

Main()

*功能:

主函数

*输入:

*输出:

***********************************************************************/

voidMain()

{

uchari=0,com_dat=0;

L1602_init();

Delay(100);

Com_Init();

P2=0x00;

while

(1)

{

q=LED_Buffer;

L1602_string(1,1,q);

com_dat=0;

Delay(100);

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2