ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:19.68KB ,
资源ID:12565615      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/12565615.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(12864 液晶驱动程序.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

12864 液晶驱动程序.docx

1、12864 液晶驱动程序*-文件名 12864.c功能 128X64驱动程序版本 2.0作者 最后修改时间 2003年5月12日=*/ i nclude absacc.hi nclude intrins.h/自定义库 在C:comp51UserLib文件夹中i nclude .incASCII816.h /标准ASCII库i nclude .incHZTable.h /汉字点阵库(自做)i nclude .incMenu.h /菜单库(自做)/ LCD128*64 数据线#define LCD12864DataPort P1/ LCD128*64 I/O 信号管脚sbit di =P31; /

2、 数据指令 选择sbit rw =P33; / 读写 选择sbit en =P32; / 读写使能sbit cs1 =P34; / 片选1,低有效(前64列)sbit cs2 =P35; / 片选2,低有效(后64列)sbit reset=P07; / 复位/*-*/* *函数列表*/开关显示void SetOnOff(unsigned char onoff)/选择屏幕/screen: 0-全屏,1-左屏,2-右void SelectScreen(unsigned char screen)/清屏/screen: 0-全屏,1-左屏,2-右void ClearScreen(unsigned ch

3、ar screen)/显示8*8点阵/旋转90度:字模被竖着切分/lin:行(0-7), column: 列(0-15)/address : 字模区首地址void Show88(unsigned char lin,unsigned char column,unsigned int address)/显示8*16字符/旋转90度:字模被竖着切分/lin:行(0-3), column: 列(0-15)/character:字符代码(标准ASCII码)void ShowChar(unsigned char lin,unsigned char column,unsigned char characte

4、r)/显示8*16字符串/!只能显示在一行上即: 串长+column =15/旋转90度:字模被竖着切分/lin:行(0-3), column: 列(0-15)/address : 字模区首地址void ShowString(unsigned char lin,unsigned char column, unsigned char *string)/显示一个汉字/旋转90度:字模被竖着切分/lin:行(0-3), column: 列(0-15)/hzcode: 汉字代码(自定义的)void ShowHZ(unsigned char lin,unsigned char column,unsign

5、ed int hzcode)/显示图片/旋转90度 :字模被竖着切分/startline :开始行/startcolumn:开始列/linechar :图片行点除8(图片以8*8点阵为单位)/columnchar :图片列点除8(图片以8*8点阵为单位)/address : 字模区首地址void ShowPicture(unsigned char startline,unsigned char startcolumn,unsigned char linechar,unsigned char columnchar,unsigned int address)/!问题大户/显示一行汉字/lin:行/

6、lineheadaddr: 此行汉字代码区首地址void ShowLine(unsigned char lin,unsigned int lineheadaddr)/显示一屏汉字/pageheadaddr:此屏汉字代码地址区首地址void ShowPage(unsigned int pageheadaddr)/反显一个8*8字块/lin:行(0-3), column: 列(0-7)void ReverseShow88(unsigned char lin,unsigned char column)/反显一个字符/lin:行(0-4), column: 列(0-15)void ReverseSho

7、wChar(unsigned char lin,unsigned char column)/反显一个汉字/lin:行(0-3), column: 列(0-7)ReverseShowHZ(unsigned char lin,unsigned char column)/反显一行汉字/lin:行ReverseShow(unsigned char lin)/初始化LCDvoid InitLCD()*函数列表结束* */*-*/*-基本函数源程序-*/延时Lcd12864delay()unsigned int i=500;while(i-) ;/*-*/状态检查void CheckState()unsi

8、gned char dat;di=0;rw=1;doLCD12864DataPort=0xff;en=1; dat=LCD12864DataPort; en=0;dat=0x90 & dat; /仅当第4,7位为0时才可操作while(!(dat=0x00);/*-*/写显示数据/dat:显示数据void WriteByte(unsigned char dat)CheckState();di=1; rw=0;LCD12864DataPort=dat;en=1; en=0;/*-*/向LCD发送命令/command :命令SendCommandToLCD(unsigned char comman

9、d)CheckState();rw=0;LCD12864DataPort=command;en=1; en=0;/*-*/设定行地址(页)-X 0-7void SetLine(unsigned char line)line=line & 0x07; / 0=line=7line=line|0xb8; /1011 1xxxSendCommandToLCD(line);/设定列地址-Y 0-63void SetColumn(unsigned char column)column=column &0x3f; / 0=COLUMN=63column=column | 0x40; /01xx xxxxS

10、endCommandToLCD(column);/设定显示开始行-XXvoid SetStartLine(unsigned char startline) /0-63startline=startline & 0x07;startline=startline|0xc0; /1100 0000SendCommandToLCD(startline);/开关显示void SetOnOff(unsigned char onoff)onoff=0x3e | onoff; /0011 111xSendCommandToLCD(onoff);/*-*/选择屏幕/screen: 0-全屏,1-左屏,2-右屏v

11、oid SelectScreen(unsigned char screen) /北京显示器:负有效 cs1: 0-右; cs2: 0-左switch(screen) case 0: cs1=0;/全屏_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();cs2=0; _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_

12、();break; case 1: cs1=1;/左屏_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); cs2=0;_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();break;case 2: cs1=0;/右屏_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _n

13、op_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); cs2=1;_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); break;/*-*/清屏/screen: 0-全屏,1-左屏,2-右void ClearScreen(unsigned char screen) unsigned char i,j;SelectScreen(screen);for(i=0;i8;i+) SetLine(i);for(

14、j=0;j16) return;if(column8) SelectScreen(1); /如果列数8(0,1,2,3,4,5,6,7)则写在第一屏上else SelectScreen(2); /否则 (8,9,10,11,12,13,14,15)写在第二屏上column=column & 0x07; /防止越界SetLine(lin);SetColumn(column3);for(i=0;i8;i+) WriteByte( CBYTEaddress+i );/*-*/显示8*16字符/旋转90度:字模被竖着切分/lin:行(0-3), column: 列(0-15)/character:字符

15、代码(标准ASCII码)void ShowChar(unsigned char lin,unsigned char column,unsigned char character) lin=lin1;Show88(lin ,column,ASCII816character-0x20 );Show88(lin+1,column,ASCII816character-0x20+8 );/*-*/*/显示8*16字符串/!只能显示在一行上即: 串长+column 15) break; /(只能显示在一行上即: 串长+column =15)ShowChar(lin,i+column,ch);string+

16、; i+;*/*-*/显示一个汉字/旋转90度:字模被竖着切分/lin:行(0-3), column: 列(0-7)/hzcode: 汉字代码(自定义的)/uchar code HZtablevoid ShowHZ(unsigned char lin,unsigned char column,unsigned int hzcode)lin=lin1; /lin*2Show88(lin,column,HZTablehzcode);Show88(lin,column+1,HZTablehzcode+8);Show88(lin+1,column,HZTablehzcode+16);Show88(li

17、n+1,column+1,HZTablehzcode+24);/*-*/显示图片/旋转90度 :字模被竖着切分/startline :开始行/startcolumn:开始列/linechar :图片行点除8(图片以8*8点阵为单位)/columnchar :图片列点除8(图片以8*8点阵为单位)/address : 字模区首地址void ShowPicture(unsigned char startline,unsigned char startcolumn,unsigned char linechar,unsigned char columnchar,unsigned int address

18、) unsigned char i,j;for(i=0;iCOLUMNCHAR;I+)for(j=0;jLINECHAR;J+)Show88(startline+i , startcolumn+j , address+(i*linechar+j)*8 );/*-*/显示一行字符串(汉字,字母混排,一行16字节)/lin:行/lineheadaddr: 此行汉字代码区首地址void ShowLine(unsigned char lin,unsigned char linehead) unsigned char i;unsigned char byte;unsigned int hzcode;fo

19、r( i=0; i16; ) byte=linehead;if(byte 15) return; /!编译器有问题,须强制退出ShowChar(lin, i , byte);i=i+1;else / byte = 0x80(汉字)if(i15) return; /!编译器有问题,须强制退出byte=byte & 0x7f; /最高位置0,即:减去0x8000hzcode=(unsigned int)byte8; /? /高8位hzcode=hzcode+lineheadi+1; /加低8位,组合成整型数地址ShowHZ( lin,i,hzcode);i=i+2;/*-*/显示一屏汉字/page

20、headaddr:此屏汉字代码地址区首地址void ShowPage(unsigned char pagehead16) unsigned char i;for(i=0;i4;i+) ShowLine(i,pagehead); /1行8个汉字,16字节/*-*/读显示数据unsigned char ReadByte()unsigned char dat;CheckState();di=1; rw=1;LCD12864DataPort=0xff;en=1; dat=LCD12864DataPort; en=0;return(dat);/*-*/反显一个8*8字块/lin:行(0-3), colu

21、mn: 列(0-7)void ReverseShow88(unsigned char lin,unsigned char column) unsigned char i;unsigned char tab8;if(column8) SelectScreen(1); /如果列数4(0,1,2,3),则写在第一屏上else SelectScreen(2); /否则 (4,5,6,7), 写在第二屏上/读上部8列column=column3; /每个方块8*8大小SetLine(lin);SetColumn(column);tab0=ReadByte(); /空读! /?for(i=0;i8;i+) tab=ReadByte();/写回SetLine(lin);SetColumn(column);for(i=0;i8;i+) WriteByte(tab);/*-*/*-

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1