您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 酒店餐饮 > 项目十二液晶显示器显示电路设计
YangZhouVocationalcollegeofenvironmentandresources主讲人:计算机科学与技术系陈爱文《单片机C语言应用技术与实践》讲课稿项目12液晶显示器显示电路设计★知识目标1.熟练使用单片机的定时器。2.熟练运用字符串、数组、指针。★能力目标:1.掌握LCM1602液晶模块显示西文的原理及使用方法。2.掌握用8位数据模式及4位数据模式驱动LCM1602液晶的C语言编程方法3.掌握用LCM1602液晶模块显示数字的C语言编程方法。任务1LCM1602液晶8位数据显示模式的设计•1.单片机与LCM1602接口电路设计用AT89S51驱动LCM1602液晶显示器,使液晶屏在第一行显示“welcomeAT89S51!,在第二行显示LCD1602test..OK。1.2分析任务1.1提出任务1.2分析任务•用单片机的P0口接LCM1602液晶显示器的8位数据线,P2.5接RS,P2.6接RW,P2.7接E。电路原理图如图12.1所示。•1.单片机与LCM1602接口电路设计EA/VP31X119X218RESET9RD17WR16INT012INT113T014T115P101P112P123P134P145P156P167P178P0039P0138P0237P0336P0435P0534P0633P0732P2021P2122P2223P2324P2425P2526P2627P2728PSEN29ALE/P30TXD11RXD10U1AT89S51RP110K12345678910111213141516J1LCD1602VCCVCCVCCRSRWERSRWE图12.18位数据显示模式电路原理图1.2分析任务•软件程序设计要严格按照LCM1602液晶显示器的读操作时序和写操作时序来编写。单片机所用的晶体振荡器频率不同,在编写延时程序时延时参数要作适当的修改,使之符合LCM1602的时序要求。编写程序时尽量按照模块化的编程思想进行编程。其程序流程如图12.2所示。2.软件程序设计开始单片机I/O端口初始化液晶LCD初始化显示welcomeAT89S511602test...OK!结束图12.28位数据显示模式显示流程图1.2分析任务•#includereg51.h•#includeintrins.h•#defineucharunsignedchar•#defineuintunsignedint•#defineDPORTP0//数据接口•sbitRW=P2^6;//读写控制选择•sbitE=P2^7;//便能端•sbitRS=P2^5;//数据寄存器与指令寄存器选择控制端•sbitRS=P2^5;//数据寄存器与指令寄存器选择控制端•uchar*s=welcomeAT89S51!;•uchar*s1=LCD1602test...OK;•constucharNoDisp=0;//无显示•constucharNoCur=1;//有显示无光标•constucharCurNoFlash=2;//有光标不闪烁•constucharCurFlash=3;//有光标且闪烁3.参考源程序1.2分析任务•/********************函数声明**************************/•voidLcdPos(uchar,uchar);//确定光标位置•voidLcdWd(uchar);//写字符•voidLcdWc(uchar);//送控制字(检测忙)•voidLcdWcn(uchar);//送控制字(不检测忙)•voidmDelay(uint);//延时m毫秒•voidWaitIdle();//检测LCD控制器状态•/*********************在指定行列显示指定字符***********/•//参数:xPox光标所在列yPos光标所在行c待显示字符•voidWriteChar(ucharc,ucharxPos,ucharyPos)•{LcdPos(xPos,yPos);•LcdWd(c);•}3.参考源程序1.2分析任务•/************显示字符串********************************/•//参数:*s指向待显示字符串;yPos光标所在行;xPos光标所在列•voidWriteString(uchar*s,ucharxPos,ucharyPos)•{uchari;•if(*s==0)//遇到字符串结束•return;•for(i=0;;i++)•{if(*(s+i)==0)•break;•WriteChar(*(s+i),xPos,yPos);•xPos++;•if(xPos15)•break;•}•}•/***************设置光标*******************************/•//参数:Para4种光标类型•voidSetCur(ucharPara)•{mDelay(2);•switch(Para)•{case0:•{LcdWc(0x08);//关显示•break;•}•case1:•{LcdWc(0x0c);//开显示无光标•break;•}3.参考源程序1.2分析任务•case2:•{LcdWc(0x0e);//开显示光标不闪•break;•}•case3:•{LcdWc(0x0f);//开显示光标闪•break;•}•default:•break;•}•}•/****************清屏*********************************/•voidClrLcd()•{LcdWc(0x01);•}•/***********正常读/写操作前检测LCD控制器状态**********/•voidWaitIdle()•{uchartmp;•RS=0;•RW=1;•E=1;•_nop_();•for(;;)•{tmp=DPORT;•tmp&=0x80;•if(tmp==0)•break;•}•E=0;•}3.参考源程序1.2分析任务•/*********************写字符*************************/•//参数:c待写字符•voidLcdWd(ucharc)•{WaitIdle();•RS=1;•RW=0;•DPORT=c;//数据送端口•E=1;•_nop_();•_nop_();•E=0;•}•/**********送控制字子程序(检测忙信号)**************/•//功能:。参数:c控制字•voidLcdWc(ucharc)•{WaitIdle();•LcdWcn(c);•}3.参考源程序1.2分析任务•/***********送控制字子程序(不检测忙信号)***********/•//参数:c控制字•voidLcdWcn(ucharc)•{RS=0;•RW=0;•DPORT=c;•E=1;•_nop_();•E=0;•}•/**********设置第(xPos,yPos)个字符的地址************/•//参数:xPos为显示第几列,yPos为显示第几行•voidLcdPos(ucharxPos,ucharyPos)•{uchartmp;•xPos&=0x0f;//x:0-15•yPos&=0x01;//y:0-1•if(yPos==0)//显示第1行•tmp=xPos;•else•tmp=xPos+0x40;•tmp|=0x80;•LcdWc(tmp);•}3.参考源程序1.2分析任务•/***************复位函数***************************/•voidRstLcd()•{mDelay(15);•DPORT=0;•LcdWcn(0x38);//显示模式设置•mDelay(5);•LcdWcn(0x38);//显示模式设置•mDelay(5);•LcdWcn(0x38);//显示模式设置•mDelay(5);•LcdWc(0x08);//显示关闭•LcdWc(0x01);//显示清屏•LcdWc(0x06);//显示移动位置•LcdWc(0x0c);//显示开及光标设置•}•/*******************延时函数***********************/•//功能:•voidmDelay(uintj)•{uchari=0;•while(j--)•{•for(i=0;i124;i++)•{;}•}•}3.参考源程序1.2分析任务•/*********************主程序**********************/•voidmain()•{ucharxPos,yPos;•xPos=0;•yPos=0;•RstLcd();•ClrLcd();•SetCur(CurFlash);//开光标闪•WriteString(s,xPos,yPos);•xPos=0;•yPos=1;•WriteString(s1,xPos,yPos);•while(1);•}}3.参考源程序1.2分析任务•运行C语言编辑软件,建立工程项目,在编辑区中输入上面的源程序,进行编译,得到目标代码。运行Proteus,在编辑窗口中绘制如图12.3所示的电路图并存盘。然后选中单片机AT89S51,加载编译得到的目标代码,点击模拟调试按钮的运行按钮“”,进入调试状态。此时可看到如图12.3所示的效果。连接实际的LCM1602液晶显示器,运行双龙下载软件SLISP下载程序到单片机中,可以看到液晶显示器显示如图12.4所示内容。1.3程序调试与电路仿真1.2分析任务•/*******************延时函数***********************/•//功能:•voidmDelay(uintj)•{uchari=0;•while(j--)•{•for(i=0;i124;i++)•{;}•}•}•/*********************主程序**********************/•voidmain()•{ucharxPos,yPos;•xPos=0;•yPos=0;•RstLcd();•ClrLcd();•SetCur(CurFlash);//开光标闪•WriteString(s,xPos,yPos);•xPos=0;•yPos=1;•WriteString(s1,xPos,yPos);•while(1);•}}1.3程序调试与电路仿真1.2分析任务•#includereg51.h•#includeintrins.h•#defineucharunsignedchar•#defineuintunsignedint•#defineDPORTP0//数据接口•sbitRW=P2^6;//读写控制选择•sbitE=P2^7;//便能端•sbitRS=P2^5;//数据寄存器与指令寄存器选择控制端•uchar*s=welcomeAT89S51!;•uchar*s1=LCD1602test...OK1.2分析任务图12.3仿真运行效果图1.2分析任务图12.4实物运行效果图任务2LCM1602液晶4位数据显示模式的设计•用AT89S51驱动LCM1602液晶显示器,使液晶屏第一屏显示Welcome!、AT89S51!•5秒后第二屏显示happynewyear!、”2009.2TestOK!”,5秒后再显示第一屏的内容,如此循环。2.1提出任务•用单片机的P0.4-P0.7接LCM1602液晶显示器数据线的DB4-DB7,P0.2接RS,P0.3接E。电路原理图如图12..5所示。2.2分析任务1.单片机与LCM1602接口电路设计EA/VP31X119X218RESET9RD17WR16INT012INT113T014T115P101P112P123P134P145P156P167P178P0039P0138P0237P0336P0435P0534P0633P0732P
本文标题:项目十二液晶显示器显示电路设计
链接地址:https://www.777doc.com/doc-381824 .html