实验二与三162字符型模块的程序设计和外围电路设计一、实验目的⒈熟悉C51编写液晶显示程序。
⒉掌握字符型显示程序的基本结构。
⒊掌握单片机与字符型模块的接口电路。
⒋熟悉电路焊接的基本技术。
二、实验设备⒈编程器、电烙铁、焊锡、电路板。
⒉单片机、162字符型液晶显示模块。
⒊实验电路板、连线导线若干。
三、实验内容及要求⒈输入程序。
⒉调试程序。
⒊按照电路焊接电路板。
四、编程提示。
五、下面是题目要求数据与时序参数表。
六、写操作时序图七、外围电路图与连接如下所示:八、下图分别为程序流程图与相应的程序。
程序示范一://-------------------------------------//本程序的演示结果为: “TOPWAY LMB402CBC”// ""//-------------------------------------#include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int#define DATABUS P1sbit LCD_RS =P3^1;sbit LCD_RW =P3^7;sbit LCD_E =P3^2;//-------------------------------------//延时程序//-------------------------------------void delay(uint t){uint i,j;for(i=0;i<t;i++)for(j=0;j<10;j++)_nop_();}//-------------------------------------//驱动函数写指令//-------------------------------------void wcode(uchar cmdcode){LCD_RW=0;LCD_RS=0;LCD_E=1;DATABUS=cmdcode;LCD_E=0;delay(5);}//-------------------------------------//驱动函数写数据//-------------------------------------void wdata(uchar Dispdata){LCD_RW=0;LCD_RS=1;LCD_E=1;DATABUS=Dispdata;LCD_E=0;delay(5);}//-------------------------------------//显示字符串//-------------------------------------void hzkdis(uchar code *s){while(*s>0){wdata(*s);s++;delay(50);}}//-------------------------------------//程序初始化//-------------------------------------void LCD_init(){wcode(0x38); //8 位形式,两行字符delay(50);wcode(0x0c); //开显示delay(50);wcode(0x01);//清屏delay(50);//画面不动,光标右移delay(50);}//-------------------------------------//主函数//-------------------------------------void main(){LCD_E=0;LCD_init();{ };} //end of program程序示范二://------------------------------------------------ //本程序的演示结果为://------------------------------------------------ #include <reg52.h>#include <intrins.h>#define uchar unsigned char#define uint unsigned int#define LCD_BUS P1sbit RS=P3^1;sbit R_W=P3^7;sbit E=P3^2;//------------------------------------------------ //延时子程序//------------------------------------------------ void Delay(uint t){uint i;uint j;for(i=0;i<t;i++)for(j=0;j<109;j++)_nop_();}//------------------------------------------------ //检查忙位//------------------------------------------------ void chk_busy(){ RS=0;R_W=1;E=1;LCD_BUS=0xff;while((LCD_BUS&0x80)==0x80);E=0;R_W=0;RS=1;}//------------------------------------------------ //写命令到LCD(不检查忙位)//------------------------------------------------ void NoCheckBusyCmd(uchar cmdcode)RS=0;R_W=0;E=1;LCD_BUS=cmdcode;E=0;R_W=1;RS=1;}//------------------------------------------------ //写命令到LCD//------------------------------------------------ void CmdWrite(uchar cmdcode){chk_busy();NoCheckBusyCmd(cmdcode);}//------------------------------------------------ //写数据到LCD//------------------------------------------------ void DataWrite(uchar Dispdata){chk_busy();RS=1;R_W=0;E=1;LCD_BUS=Dispdata;E=0;R_W=1;RS=0;}//------------------------------------------------ //写入字符串//------------------------------------------------ void Printstr(uchar code *pstr){while(*pstr>0){DataWrite(*pstr);pstr++;}}//------------------------------------------------//自定义字符//------------------------------------------------uchar code a[]={0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x02, 0x0f,0x09,0x0f,0x09,0x0f,0x09,0x11,0x00,0x1f,0x11,0x11,0x1f,0x11,0x11,0x1f,0x00};void zidingyi(){uchar i;CmdWrite(0x40);for(i=0;i<24;i++)DataWrite(a[i]);}//------------------------------------------------//初始化设置//------------------------------------------------void LCD_Initial(){Delay(50);NoCheckBusyCmd(0x38); //8位并行,两行,5*8 Delay(1);NoCheckBusyCmd(0x38); //8位并行,两行,5*8 Delay(1);CmdWrite(0x0f); //开显示,开光标,闪烁//Delay(10);CmdWrite(0x01); //清屏//Delay(10);CmdWrite(0x06); //shift=0,AC加1//Delay(10);}//------------------------------------------------//主函数//------------------------------------------------void main(){uchar i;E=0;LCD_Initial();zidingyi();//第一屏CmdWrite(0x80); //第一行显示内容:""Printstr("");CmdWrite(0xc2);Printstr("2006"); //第二行显示内容:"2006年10月12日"DataWrite(0x00);Printstr("10");DataWrite(0x01);Printstr("12");DataWrite(0x02);Delay(5000);//第二屏CmdWrite(0x01);CmdWrite(0x90);Printstr("Hebei University");CmdWrite(0xd0);Printstr(" of Technology");Delay(100);for(i=0;i<16;i++){CmdWrite(0x18);Delay(500);}while(1){};} //end of program九、按照图示连接电路,并用万用表检测,将程序输入单片机,进行电测。
十、写出实验的实验报告单。
通电后进行测试,液晶会显示出相应的字符,但是只是静态显示,但是通过基本的显示实习,会积累相应的知识,去解决更复杂的显示问题。