智能仪器实验报告_第1页
智能仪器实验报告_第2页
智能仪器实验报告_第3页
智能仪器实验报告_第4页
智能仪器实验报告_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验课程:智能仪器原理与设计实验工程:基于MCS-51单片机的直流电压测量显示仪设计专业班级:学号:学号姓名:指导教师:实验日期:2014年05月24日设计题目基于MCS-51单片机的直流电压测量、显示仪设计。硬件电路设计1602LCD主要技术参数:显示容量:16×2个字符,芯片工作电压:4.5—5.5V,工作电流:2.0mA(5.0V),模块最正确工作电压:5.0V,字符尺寸:2.95×4.35(W×H)mm。5.1引脚功能说明1602LCD采用标准的14脚〔无背光〕或16脚〔带背光〕接口,各引脚接口说明如图7编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极图7引脚接口说明表第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器比照度调整端,接正电源时比照度最弱,接地时比照度最高,比照度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整比照度。第4脚:RS为存放器选择,高电平时选择数据存放器、低电平时选择指令存放器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第7~14脚:D0~D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。5.21602LCD的指令说明及时序1602液晶模块内部的控制器共有11条控制指令,如图8序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L**6置功能00001DLNF**7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM〕10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容图81602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。〔说明:1为高电平、0为低电平〕指令1:清显示,指令码01H,光标复位到地址00H位置。指令2:光标复位,光标返回到地址00H。指令3:光标和显示模式设置I/D:光标移动方向,高电平右移,低电平左移S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平那么无效。指令4:显示开关控制。D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:控制光标的开与关,高电平表示有光标,低电平表示无光标B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位S/C:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令DL:高电平时为4位总线,低电平时为8位总线N:低电平时为单行显示,高电平时双行显示F:低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。指令7:字符发生器RAM地址设置。指令8:DDRAM地址设置。指令9:读忙信号和光标地址BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据。指令11:读数据。读操作时序1602LCD的一般初始化〔复位〕过程延时15mS写指令38H〔不检测忙信号〕延时5mS写指令38H〔不检测忙信号〕延时5mS写指令38H〔不检测忙信号〕以后每次写指令、读/写数据操作均需要检测忙信号写指令38H:显示模式设置写指令08H:显示关闭写指令01H:显示清屏写指令06H:显示光标移动设置写指令0CH:显示开及光标设置三、软件程程设计源代码:#include<reg52.h> #include<intrins.h>#include<I2C.H> #include<stdio.H>#definePCF85910x90//PCF8591地址//elseIOsbitLS138A=P2^2;sbitLS138B=P2^3;sbitLS138C=P2^4;unsignedcharAD_CHANNEL;unsignedlongxdataLedOut[8];unsignedintD; unsignedcharStringBuf[10]={0}; /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////typedefunsignedcharBYTE; //用BYTE代替unsignedchartypedefunsignedintWORD;//WORD代替unsignedinttypedefbitBOOL;//用BOOL代替bitsbitrs =P2^6;//复位端sbitrw=P2^5;//写数据端sbitep=P2^7; //使能端BYTEcodedis1[]={"==...zhudc&huzh"};BYTEcodedis2[]={"WENHUA/*******************延时函数********************/voiddelay(BYTEms){ BYTEi; while(ms--) { for(i=0;i<250;i++) { _nop_(); _nop_();//空执行消耗CPU时间到达等待的效果 _nop_(); _nop_(); } }}/*******************LCD侧忙函数********************/BOOLlcd_bz(){ BOOLresult; rs=0; rw=1; ep=1; _nop_(); _nop_(); _nop_(); _nop_(); result=(BOOL)(P0&0x80);//检测P0最高位是否为1 ep=0; returnresult;//返回侧忙结果 }voidlcd_wcmd(BYTEcmd){ //写入指令数据到LCD while(lcd_bz()); rs=0; rw=0; ep=0; _nop_(); _nop_(); P0=cmd;//将8位指令通过P0口传给1602 _nop_(); _nop_();//用于产生一个脉冲宽度 _nop_(); _nop_(); ep=1; _nop_(); _nop_(); _nop_(); _nop_(); ep=0; }voidlcd_pos(BYTEpos){ //设定显示位置 lcd_wcmd(pos|0x80);}voidlcd_wdat(BYTEdat) { //写入字符显示数据到LCD while(lcd_bz()); rs=1; rw=0; ep=0; P0=dat;//将8位数据通过P0口传给1602 _nop_(); _nop_(); _nop_();//用于产生一个脉冲宽度 _nop_(); ep=1; _nop_(); _nop_(); _nop_(); _nop_(); ep=0; }voidlcd_init(){ //LCD初始化设定 lcd_wcmd(0x38); ////16*2显示,5*7点阵,8位数据 delay(1); lcd_wcmd(0x0c); //显示开,关光标 delay(1); lcd_wcmd(0x06); //移动光标 delay(1); lcd_wcmd(0x01); //去除LCD的显示内容 delay(1);}//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////*******************************************************************ADC发送字节[命令]数据函数*******************************************************************/bitISendByte(unsignedcharsla,unsignedcharc){Start_I2c();//启动总线SendByte(sla);//发送器件地址if(ack==0)return(0);SendByte(c);//发送数据if(ack==0)return(0);Stop_I2c();//结束总线return(1);}/*******************************************************************ADC读字节数据函数*******************************************************************/unsignedcharIRcvByte(unsignedcharsla){unsignedcharc;Start_I2c();//启动总线SendByte(sla+1);//发送器件地址if(ack==0)return(0);c=RcvByte();//读取数据0Ack_I2c(1);//发送非就答位Stop_I2c();//结束总线return(c);}floatDivision(floatdivisor,floatdividend) //除法,保存后5位小数{ floatdiv; div=(divisor*100000/dividend)*0.00001; returndiv;}unsignedintVoltage=0;//******************************************************************/main(){ BYTEi; lcd_init(); //初始化LCD delay(10); lcd_pos(3); // 置显示位置为第一行的第5个字符 while(dis1[i]!='\0') { //显示字符"VoltageDisplay" lcd_wdat(dis1[i]); i++; } i=0; while(1) { ISendByte(PCF8591,0x40); //对0通道进行AD转换D=IRcvByte(PCF8591); //ADC0模数转换 Voltage=Division(D,256)*5*100; //将数据转换为电压,保存2位小数 StringBuf[0]=Voltage%1000/100+0x30; //将电压值的各位转换为ASCII码,以便在LCD上显示 StringBuf[1]='.'; StringBuf[2]=Voltage%100/10+0x30; StringBuf[

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论