51单片机驱动12864液晶程序.doc

上传人:啊飒飒 文档编号:11076326 上传时间:2021-06-27 格式:DOC 页数:15 大小:60.50KB
返回 下载 相关 举报
51单片机驱动12864液晶程序.doc_第1页
第1页 / 共15页
51单片机驱动12864液晶程序.doc_第2页
第2页 / 共15页
51单片机驱动12864液晶程序.doc_第3页
第3页 / 共15页
51单片机驱动12864液晶程序.doc_第4页
第4页 / 共15页
51单片机驱动12864液晶程序.doc_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《51单片机驱动12864液晶程序.doc》由会员分享,可在线阅读,更多相关《51单片机驱动12864液晶程序.doc(15页珍藏版)》请在三一文库上搜索。

1、我在电脑上试验了下,版本:KEILUV3.没有修正汉字显示BUG。经过修改,有一个地方报错,函数没有返回值,但是在使用时却强制返回值 /LCD1286489C52 /* #include #includeintrins.h #defineucharunsignedchar #defineuintunsignedint /*引脚定义*/ #defineDataPortP0/LCD128*64I/O信号管脚 sbitRS=P24;/数据指令 sbitRW=P25;/读写 sbitE=P26;/使能 sbitCSL=P21;/左片选 sbitCSR=P22;/右片选 ucharPage;/页地址 u

2、charCol;/列地址 ucharcodeBMP1;/一幅图 ucharcodeHZK_12;/1212阵点字模 ucharcodeASC_5x7;/57阵点字模 ucharstr4; /*函数定义*/ voidBusyL(void);/左屏检测忙 voidBusyR(void);/右屏检测忙 voidCheckBusy(void);/读取忙信号 voidDelay(uintMS);/延时 voidLocatexy(void);/将屏幕横向0-12纵向07转换成左、右屏的的X、Y voidWriteCommandL(ucharCommandByte);/向左屏写入指令 voidWriteCo

3、mmandR(ucharCommandByte);/向右屏写入指令 ucharReadData(void);/读数据 voidWriteData(ucharDataByte);/写数据 voidLcmClear(void);/清屏 voidLcmInit(void);/初始化 voidLcmPutBMP(uchar*puts);/显示一幅图 voidLcmReverseBMP(void);/将整屏反显 voidLcmPutHZ_12(ucharx,uchary,ucharHZcode);/在屏幕上任意点显示一个1212汉字 uchar*uchartostr(unsignedcharunm);/

4、将值转成字符串 voidLcmPutAsc(ucharasc);/显示一个57的ASC字符 voidLcmPutstr(ucharrow,uchary,uchar*str);/在设定位置显示字符串 voidLcmPutpoint(ucharro,ucharlie,ucharcolour);/在设定位置显示一个点 /*/ /*检查Busy*/ /*/ voidBusyL(void) CSL=1; CSR=0; CheckBusy(); voidBusyR(void) CSL=0; CSR=1; CheckBusy(); voidCheckBusy(void) RS=0;/指令 RW=1; Dat

5、aPort=0xFF;/输出0xff以便读取正确 E=1; _nop_(); while(0);/DataPort&0x80);/StatusReadBit7=BUSY这地方有点问题,用了while(/DataPort&0x80)后就一直读不到0了,陷入死循环。当用while(0)时反而能正常工作,不知道有没有人能解释 E=0; _nop_(); /*/ /*根据设定的坐标数据,定位LCM上的下一个操作单元位置*/ /*/ voidLocatexy(void) ucharx,y; switch(Col&0xc0)/*col.and.0xC0*/ /*条件分支执行*/ case0:BusyL()

6、;break;/*左区*/ case0x40:BusyR();break;/*右区*/ x=Col&0x3F|0x40;/*col.and.0x3f.or.SetYAddress*/ y=Page&0x07|0xB8;/*row.and.0x07.or.setPage*/ CheckBusy();/*waittingforenable*/ RS=0;/指令 RW=0;/写 DataPort=y;/设置页面地址 E=1; _nop_(); E=0; _nop_(); CheckBusy();/*waittingforenable*/ RS=0; RW=0; DataPort=x;/设置列地址 E

7、=1; _nop_(); E=0; _nop_(); /*/ /*写指令*/ /*/ voidWriteCommandL(ucharCommandByte) BusyL(); DataPort=CommandByte; RS=0;/指令 RW=0; E=1; _nop_(); E=0; _nop_(); voidWriteCommandR(ucharCommandByte) BusyR(); DataPort=CommandByte; RS=0;/指令 RW=0; E=1; _nop_(); E=0; _nop_(); /*/ /*读数据*/ /*/ ucharReadData(void) u

8、charDataByte; Locatexy();/*坐标定位,返回时保留分区状态不变*/ RS=1;/*数据输出*/ RW=1;/*读入*/ DataPort=0xFF;/输出0xff以便读取正确 E=1;/*读入到LCM*/ _nop_(); DataByte=DataPort;/*数据读出到数据口P1*/ E=0; _nop_(); returnDataByte; /*/ /*写数据*/ /*/ voidWriteData(ucharDataByte) Locatexy();/*坐标定位,返回时保留分区状态不变*/ RS=1;/*数据输出*/ RW=0;/*写输出*/ DataPort=

9、DataByte;/*数据输出到数据口*/ E=1;/*写入到LCM*/ _nop_(); E=0; _nop_(); voidLcmClear(void) Page=0; Col=0; for(Page=0;Page8;Page+) for(Col=0;Col128;Col+) WriteData(0); voidLcmInit(void) Delay(200);/等待复位 WriteCommandL(0x3f);/开显示 WriteCommandR(0x3f); WriteCommandL(0xc0);/设置起始地址=0 WriteCommandR(0xc0); WriteCommandL

10、(0x3f);/开显示 WriteCommandR(0x3f); LcmClear(); Col=0; Page=0; Locatexy(); voidLcmPutBMP(uchar*puts) uintX=0; Page=0; Col=0; for(Page=0;Page8;Page+) for(Col=0;Col128;Col+) WriteData(putsX); X+; voidLcmReverseBMP(void) uchartemp; Page=0; Col=0; for(Page=0;Page8;Page+) for(Col=0;Col128;Col+) temp=ReadDat

11、a();/空读一次 temp=ReadData(); temp=temp; WriteData(temp); voidLcmPutHZ_12(ucharx,uchary,ucharHZcode) ucharoffset,Rd,Wt,m,tmp,i; uintn; if(x117&y3;/将竖向的点阵数y转换成页数 Col=x;/横向的X就是LCD的列数。 n=0x18*HZcode;/一个汉字24字节(18H),HZcode为字库序号。n就是要显示汉字的起始地址 offset=y&0x07;/将显示该页的竖向偏移量。 if(offset0;i-) Rd=ReadData(); Rd=ReadD

12、ata();/读出LCD该Page、Col位置的上半个数据。 m=HZK_12n;/读出汉字模第n的数据。 Wt=Rd&(0xff(8-offset)|(m(8-offset)|(m0;i-) Rd=ReadData(); Rd=ReadData();/读取LCD上汉字上部位置的原来数据。 m=HZK_12n;/读取汉字模数据 Wt=Rd&(0xff(8-offset)|(m(8-offset)|(m(8-offset)|(Rd&(0xff(offset-4);/嵌入 WriteData(Wt);/写回 Page=Page-2;/恢复位置 Col+;/修正下一个汉字的起始位置 uchar*uc

13、hartostr(ucharunm) ucharx00,xx,x0,x,n; x00=unm/100; xx=unm%100; x0=xx/10; x=xx%10; n=0; if(x00!=0) strn=x00+48;/值加48即为字符 n+; if(!(x00=0&x0=0) strn=x0+48; n+; strn=x+48; n+; strn=0; returnstr; voidLcmPutAsc(ucharasc) ucharj; uintx; x=5*(asc-32); for(j=0;j5;j+) WriteData(ASC_5x7x); x+; Col+; WriteData

14、(0x00); Col+; voidLcmPutstr(ucharrow,uchary,uchar*str) unsignedchar*x; x=str; Page=row; Col=y; while(*x!=0) LcmPutAsc(*x); x+; voidLcmPutpoint(ucharro,ucharlie,ucharcolour)/画点函数 if(ro64)&(lie3;/页等于行数row与00111000B再右移3位 offsetbit=ro&0x07;/偏移量为行数与00000111 modbyte=1; modbyte=offsetbit;/输出位的模00000001左移of

15、fsetbit位 outByte=ReadData(); outByte=ReadData(); if(colour=0) modbyte=modbyte; outByte=modbyte&outByte;/输出位不影响其它位 elseoutByte=modbyte|ReadData();/输出位不影响其它位 WriteData(outByte); voidDelay(uintMS) ucharus,usn; while(MS!=0) usn=2;/for12M while(usn!=0) us=0xf6; while(us!=0)us-; usn-; MS-; voidMain(void)

16、ucharx,i; LcmInit(); LcmClear(); while(1) LcmClear(); LcmPutBMP(BMP1); Delay(3000); LcmClear(); /LcmReverseBMP(); Delay(1000); /LcmClear(); x=0; for(i=0;i8;i+) LcmPutHZ_12(x,i*7,i); x=x+16; LcmPutstr(4,2,Hello); LcmPutstr(6,35,World!); Delay(5000); unsignedcharcodeBMP1=/字节倒序 /-调入了一幅图像: /宽度x高度=1264 0

17、x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x80,0xE0,0xF0,0xFC,0xFE,0xFE, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0x9F,0xCF,0xDF,0x9F, 0x9E,0x3E,0xFF,0xFE,0xFE,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFA,0xFC,0xF8,0xE0,0xC0,0x80, 0x00,0x00,0x00

18、,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x80,0xC0,0xF0,0xF8,0xFC,0xFE, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xDF,0xEF, 0xCF,0xDF,0x9F,0x0F,0x1F,0x7F,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0x

19、FF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFE,0xFC,0xF0,0xC0,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xC0,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,

20、 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xF0,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x10,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFD,0xFB,0xFF, 0xFF,0xFF,0xFF,0xFE,0xF8,0xFE,0xFF,0xFF, 0xFF,0xFF,0x

21、FF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xBF,0x3F, 0x37,0x37,0x37,0x27,0x63,

22、0x43,0x03,0x03, 0x03,0x03,0x03,0x07,0x67,0x27,0x0F,0x0F, 0x1F,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0x80,0x80,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x10,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF

23、F, 0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x7F,0x7F, 0x7F,0x7F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F, 0x3F,0x3F,0x3F,0x3F,0x3F,0x7F,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x3F, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x80,0xE0,0xFC,0xFE,0xFE,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,

24、0xFF,0xDF,0x0F,0x07,0x07,0x03, 0x03,0x03,0x03,0x02,0xC0,0xAC,0xBF,0xA0, 0x80,0x00,0x00,0x00,0x02,0x02,0x06,0x06, 0x04,0x00,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF0,0xE0, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x01,0x03,0x07,0x0F,0x1F,0x3F,0x3F, 0xFF,0xFF,0xFF,0xFF,0xF

25、F,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xBF,0x3F,0x3F,0x3D, 0x7D,0xF8,0xF0,0xF0,0xC0,0x00,0x00,0x00, 0x08,0x8C,0xFC,0xFE,0xEE,0xE6,0xC2,0xC0, 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0x1F,0x1F,0x87,0x0D,0x7D,0x70,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0, 0xF0,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xE0,0x00, 0x00,0x00,0x02,0xE7,0xE7,0xE7,0xE7,0xC3, 0xC3,0xC1,0x82,0x87,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0xE3,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xF

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1