串口通信接收LCD1602显示.docx
- 文档编号:28496651
- 上传时间:2023-07-15
- 格式:DOCX
- 页数:9
- 大小:34.35KB
串口通信接收LCD1602显示.docx
《串口通信接收LCD1602显示.docx》由会员分享,可在线阅读,更多相关《串口通信接收LCD1602显示.docx(9页珍藏版)》请在冰豆网上搜索。
串口通信接收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); } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 串口 通信 接收 LCD1602 显示