12864的程序绘图.字符.docx

上传人:lao****ou 文档编号:727600 上传时间:2024-04-28 格式:DOCX 页数:10 大小:127.21KB
下载 相关 举报
12864的程序绘图.字符.docx_第1页
第1页 / 共10页
12864的程序绘图.字符.docx_第2页
第2页 / 共10页
12864的程序绘图.字符.docx_第3页
第3页 / 共10页
12864的程序绘图.字符.docx_第4页
第4页 / 共10页
12864的程序绘图.字符.docx_第5页
第5页 / 共10页
亲,该文档总共10页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《12864的程序绘图.字符.docx》由会员分享,可在线阅读,更多相关《12864的程序绘图.字符.docx(10页珍藏版)》请在第一文库网上搜索。

1、玩转12864液晶(1)-显示字符在我们常用的人机交互显示界面中,除了数码管,1ED,以及我们之前已经提到的1CD1602之外,还有一种液晶屏用的比较多。相信接触过单片机的朋友都知道了,那就是12864液晶。顾名思义,12864表示其横向可以显示128个点,纵向可以显示64个点。我们常用的12864液晶模块中有带字库的,也有不带字库的,其控制芯片也有很多种,如KSO108T6963,ST7920等等。在这里我们以ST7920为主控芯片的12864液晶屏来学习如何去驱动它。(液晶屏采用金鹏的OCMJ4X8C)关于这个液晶屏的更多信息,请参考它的DATASHEET,附件中有下载。我们先来了解一下它

2、的并行连接情况。下面是电路连接图从上面的图可以看出,液晶模块和单片机的连接除了PO口的8位并行数据线之外,还有RS,RW,E等几根线。其中R/S是指令和数据寄存器的选择控制线(串行模式下为片选),R/W是读写控制线(串行模式下是数据线),E是使能线(串行模式下为时钟线)。通过这几根控制线和数据线,再结合它的时序图,我们就可以编写出相应的驱动程序啦。看看并行模式下的写时序图:根据这个时序图,我们就可以写出写数据或者写命令到1CD12864液晶的子程序。读时序图如下:根据这个时序图我们就可以从1CD12864液晶模块内部RAM中读出相应的数据,我们的忙检测函数就是根据这个时序图写出来的。以及后面章

3、节中讲的画点函数等都要用到读时序。有了这两个时序图,然后我们再看看OCMJ4X8C的相关指令集,就可以编写出驱动程序了。这里要注意的是指令集分为基本指令集和扩充指令集,其中扩充指令集主要是与绘图相关,在此后的章节中会有相应的介绍。下面让我们根据这些编写出它的驱动程序吧。我的硬件测试条件为:STC89C516(11.0592MHz)+OCMJ4X8C实际显示效果图片如下:程序部分如下,请结合液晶模块的DATASHEET看程序,这样能够更加快速的弄懂程序的流程。大致有如下几个函数:写数据,写指令,忙检测,初始化,指定地址显示字符串等等。1. #inc1udereg52.h2. #inc1udein

4、trins.h3. sbitio_1CD12864_RS=P10;4. sbitio_1CD12864_RW=P11;5. sbitio_1CD12864_EN=P12;6. #defineio_1CD12864_DATAPORTPO7. #defineSET_DATAio_1CDI2864_RS=1;8. #defineSETJNCio_1CD12864_RS=0;9. #defineSET.READio_1CD12864.RW=1;10. #defineSET_WRITEio_1CD12864_RW=0;11. #defineSET_ENio_1CD12864.EN=1;12. #defi

5、neC1R_ENio_1CD12864_EN=0;13. voidVJ1Cd12864CheCkBusy_f(void)忙检测函数14. (15. unsignedintnTimeOut=0;16. SETJNC17. SET.READ18. C1R_EN19. SET_EN20. whi1e(io_1CD12864_DATAPORT&0x80)&(+nTimeOut!=0);21. C1R_EN22. SETJNC23. SET_READ24. 25. voidv_1cd12864SendCmd_f(unsignedcharbyCmd)发送命令26. 27. v_1cd12864CheCkB

6、usy_f();28. SETJNC29. SET_WRITE30. C1R_EN31. io_1CD12864_DATAPORT=byCmd;32. _nop_();33. _nop_();35.SET_EN36._nop_();37._nop_();38.C1R_EN39.SET_READ40.SETJNC41.)42.voidv_1cd12864SendData_f(unsignedcharbyData)发送数据43.(44.v_1cd12864CheckBusy_f();45.SET_DATA46.SET_WRITE47.C1R_EN48.io_1CD12864_DATAPORT=by

7、Data;49.-op-0;50.-P-();51.SET_EN52._nop_();53.-op-0;54.C1R_EN55.SET_READ56.SETJNC57.58.)59.voidv_De1ayMs_f(unsignedintnDe1ay)延时60.(61.unsignedinti;62.for(;nDe1ay0;nDe1ay)63.(64.for(i=125;i0;i-);65.)66.67.168.voidv_1cd12864Init_f(void)初始化69.(70.v_1cd12864SendCmd.f(0x30);基本指令集71.v_De1ayMs_f(50);72.v_1

8、cd12864SendCmd.f(0x01);/清屏73.v_De1ayMs_f(50);74.v_1cd12864SendCmd.f(0x06);光标右移75.v_De1ayMs_f(50);76.v_1cd12864SendCmd_f(OxOc);开显示77.78.voidv_1cd12864SetAddress_f(unsignedcharx,y)地址转换79.(80.unsignedcharbyAddress;81.switch(y)82. 83. caseO:byAddress=Ox8O+x;84. break;85. case1:byAddress=0x90+x;86. break

9、;87. case2:byAddress=0x88+x;88. break;89. case3:byAddress=0x98+x;90. break;91. defau1t:92. break;93. 94. v_1cd12864SendCmd_f(byAddress);95. )96. voidv_1cd12864PutString_f(unsignedcharx,unsignedchary,unsignedchar*pData)97. 98. v_1cd12864SetAddress_f(x,y);99. whi1e(*pData!=0)100. 101. v_1cd12864SendDa

10、ta_f(*pData+);102. 103. 104. voidmain(void)105. )106. v_1cd12864Init_f();107. v_1cd12864PutString_f(0,0,”电子工程师之家”);108. v_1cd12864PUtString_f(2,1J,欢迎光临”);109. v_1cd12864PutString_f(0,2,*1CD12864ST7920*);110. v_1cd12864PutString_f(0,3,*oO”);111. whi1e(1);112. 玩转12864液晶显示图片,画点,画任意直线通过上一篇的实验,相信大家都掌握了显示

11、字符的基本用法。下面我们来看一下12864液晶更高级的用法。首先是它的绘图功能。让我们先来显示一整副的图片吧,也就是128x64大小。在使用绘图功能时,先要打开扩充指令集,然后再打开绘图功能。接着就是送数据显示了。这里我们首先要弄明白ST7920的显示坐标关系。其显示坐标如下。从图中可以看出,X方向共有8个字(16个字节)Y方向共有031行分为上下两个屏。弄懂了之后我们就可以依照此坐标来显示一整屏的图片了。随便用一个图片的提取转换软件,讲一副126X64大小的图片转换成字节数据,总共字节大小为128*64/8=1024个字节。下面我们来看看这个显示整屏图像的函数voidv_1cd12864Dr

12、awPicture_f(unsignedcharcode*pPicture)(unsignedchari,j,k;for(i=0;i2;i+)分上下两屏写for(j=0;j32;j+)(v_1cd12864SendCmdJ(0x80+j);写Y坐标if(i=0)写X坐标v_1cd12864SendCmdJ(0x80);)e1sev_1cd12864SendCmdJ(0x88);)for(k=0;k16;k+)写一整行数据v_1cd12864SendData_f(*pPicture+);)v_1cd12864SendCmd_f(0x30);看看效果图片如下:显示一个人的图像下面来看看如何在任意一

13、个位置显示或者是擦除一个点对于12864这种二值显示屏来说,其显示状态无外乎显示和不显示一个点这两种状态。而在任意位置画点,是我们随心所欲的画线,画圆,画矩形的等GU1函数的基础。为了让这个位置有一个参考点,我们有必要定义一个坐标系在这里,我定义的坐标系如下0,0127,00,63127,63OQ代表屏幕的左上角,127,63代表屏幕的右下角。对于屏幕上面任意一个点,如果我们想要点亮它,必须先读出此点的状态,然后再修改该点,最后送出去,即读-修改一写。按照这个步骤,然后再运用C语言中的位操作运算符可以很方便的完成画点的函数。由于画点函数涉及到读ST7920内部RAM的操作,因此,我们必须先要完

14、成这个读数据的函数具体实现过程如下:unsignedcharu8_1cd12864ReadByte_f(void)(unsignedcharbyReturnVa1ue;v_1cd12864CheckBusy_f();io_1CD12864_DATAPORT=Oxff;SET_DATASET_READC1R_ENSETENbyReturnVa1ue=io_1CD12864_DATAPORT;C1R_ENreturnbyReturnVa1ue;然后是画点的函数,其实现过程如下:voidv_1cd12864DrawPoint_f(unsignedcharX,unsignedcharY,unsignedcharCo1or)(unsignedcharRow,Tier,Tier_bit;unsignedcharReadOIdH,ReadOId1;v_1cd12864SendCmd_f(0x34);v_1cd12864SendCmdJ(0x36);Tier=X4;Tier_bit=X&OxOf;if(Y32)Row=Y;)e1seRow=Y-32;Tier+=8;)v_1cd12864SendCmd_f(Row+0x80);

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

当前位置:首页 > 应用文档 > 工作总结

copyright@ 2008-2022 001doc.com网站版权所有   

经营许可证编号:宁ICP备2022001085号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有,必要时第一文库网拥有上传用户文档的转载和下载权。第一文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知第一文库网,我们立即给予删除!



客服