单片机,LCD.C液晶驱动程序.docx_第1页
单片机,LCD.C液晶驱动程序.docx_第2页
单片机,LCD.C液晶驱动程序.docx_第3页
单片机,LCD.C液晶驱动程序.docx_第4页
单片机,LCD.C液晶驱动程序.docx_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

附录 二LCD.C液晶驱动程序#includeREG51F.h#includeintrins.h#includeUSEH1.h#includelcd.h#includeHZcode.hbit busy_bit=1;/函数声明=void nop(void);bit CheckBusy(void); /状态检查/写显示数据/dat:显示数据void WriteByte(uchar dat);/向LCD发送命令/command :命令SendCommandToLCD(uchar command);/函数定义=void nop(void) _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();/状态检查bit CheckBusy(void) uchar state=0; P1=0xFF;/空读操作 RW=1; DI=0; EN=1; state=P1; EN=0; P1=0xFF;/再读才有效 RW=1; DI=0; EN=1; state=P1; EN=0; busy_bit=(bit)(state7); return(busy_bit);/写显示数据/dat:显示数据void WriteByte(uchar dat) while(CheckBusy(); DI=1; RW=0; LCD_P=dat; EN=1; EN=0;/*-*/向LCD发送命令/command :命令SendCommandToLCD(uchar command) while(CheckBusy(); RW=0; DI=0; LCD_P=command; EN=1; EN=0;/*-*/设定行地址(页)-X 0-7void SetLine(uchar line) line &= 0x07; / 0=line=7 line |= 0xb8; /1011 1xxx SendCommandToLCD(line);/设定列地址-Y 0-63void SetColumn(uchar column) column &= 0x3f; / 0=column=63 column |= 0x40; /01xx xxxx SendCommandToLCD(column);/设定显示开始行-XXvoid SetStartLine(uchar startline) /0-63 /startline &= 0x07; startline |= 0xc0; /1100 0000 SendCommandToLCD(startline);/开关显示void SetOnOff(uchar onoff) onoff|=0x3e; /0011 111x SendCommandToLCD(onoff);/*-*/选择屏幕/screen: 0-全屏,1-左屏,2-右屏void SelectScreen(uchar screen) /显示器:负有效 CS1: 0-右; CS2: 0-左 switch(screen) case 0: CS1=0;/全屏 nop(); CS2=0; nop(); break; case 1: CS1=1;/左屏 nop(); CS2=0; nop(); break; case 2: CS1=0;/右屏 nop(); CS2=1; nop(); break; default: break; /*-*/清屏/screen: 0-全屏,1-左屏,2-右void ClearScreen(uchar screen) uchar i,j; SelectScreen(screen); for(i=0;i8;i+) SetLine(i); for(j=0;j128) return; if(column64) SelectScreen(1); /如果列数64则从第一屏上开始写 SetLine(lin); SetColumn(column); for(i=0;i8;i+) if(column+i64) WriteByte(*(address+i); else SelectScreen(2); SetLine(lin); SetColumn(column-64+i); WriteByte(*(address+i); else SelectScreen(2); /否则从第二屏上开始写 column-=64; /防止越界 SetLine(lin); SetColumn(column); for(i=0;i8;i+) if(column+i7 | column127)return; address = &HZcodenum0; Show8x8(lin,column,address); Show8x8(lin,column+8,address+8); Show8x8(lin+1,column,address+16); Show8x8(lin+1,column+8,address+24);/*-*/void InitLCD(void) /初始化LCD uchar i=2000; /延时 while(i-); SetOnOff(1); /开显示 ClearScreen(1);/清屏 ClearScreen(2); SetStartLine(0); /开始行:0/*-*/*-*/显示图片/lin:行(0-7), column: 列(0-127)/high:高度, width:宽度(要为8的倍数)/address : 图片区首地址void ShowPicture(uchar lin, uchar column, uchar high, uchar width, uchar *address) uchar i, j; /if(column128) return; if(column64) for(j=0;jhigh;j+=8) SelectScreen(1); /如果列数64则从第一屏上开始写 SetLine(lin); SetColumn(column); for(i=0;i127) break; if(column+i64) WriteByte(*(address+i); else SelectScreen(2); SetLine(lin); SetColumn(column-64+i); WriteByte(*(address+i); lin+=1; address+=width; else column-=64; /防止越界 for(j=0;jhigh;j+=8) SelectScreen(2); /否则从第二屏上开始写 SetLine(lin); SetColumn(column); for(i=0;i64) break

温馨提示

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

评论

0/150

提交评论