再论Atmega8L-LCD12864,带画点函数,希望对想学点阵液晶的朋友有所帮助.doc

再论Atmega8L-LCD12864,带画点函数,希望对想学点阵液晶的朋友有所帮助.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
再论Atmega8L-LCD12864,带画点函数,希望对想学点阵液晶的朋友有所帮助

前一段时间想搞一下点阵LCD,于是就到本网站上寻找,找到了好多资料,xiaotanlan朋友的资料很好,/bbs/bbs_content.jsp?bbs_sn=468165bbs_page_no=1sub_kind_id=2065bbs_id=1000 但是看了已后,觉得自已做的时候还是有很多要注意的地方.于是就写了下面的内容: LCD12864液晶说明(个人跟椐datasheet的理解): ??lcd12864分为左半屏和右半屏,每半个屏幕竖着排列着64(0~63)个字节,每个字节最低位在最上面,高位在最下面,一个字节的8位构成了lcd12864一页中一列的8个点,而它共有8页,即在y方向有8*8=64个点.如下图: 画点的重点: ????1,通过x坐标所属的左右半屏. ????2,通过y坐标算出点所属的页,及一页内y坐标(即一个字节中一位的位置). ????3,读出原来要画点位字节内容,再设要画的点(否则会擦除原来画的点). 程序如下: 环境:ATmega8L,?WinAVR?GCC,?LCD12864,?Proteus6.7 /* ATmega8L?LCD12864 作者:zhb2000 */ #include?avr/io.h #define?uchar?unsigned?char #define?uint??unsigned?int #define?bool??unsigned?char #define?true??1 #define?false?0 #define?setbit(sfr,bit)?(sfr|=(1bit)) #define?clrbit(sfr,bit)?(sfr=~(1bit)) #define?RS???0 #define?RW???1 #define?CS1??2 #define?CS2??3 #define?E????4 #define?RST??5 #define?DATA?PORTB #define?CTRL?PORTC void?init(void); uchar?getState(void); //得到LCD状态字 bool?lcdBusy(void); void?lcdCommand(uchar?command); //发送命令字 void?lcdOpen(void); //打开LCD void?lcdStartLine(uchar?line); //设置起始行 void?lcdSetPage(uchar?page); //设置页地址 void?lcdSetRow(uchar?row); //设置列地址 void?lcdWrite(uchar?dat,uchar?cs); //写显示数据,注0亮1暗 uchar?lcdRead(uchar?cs); //读数据 void?pixel(uchar?x,uchar?y); //画点 int?main(void) { init(); lcdOpen(); lcdStartLine(0); lcdSetPage(0); lcdSetRow(0); pixel(30,30); pixel(100,50); pixel(15,40); while(1) { } return?0; } void?init() { PORTB=0xff; DDRB=0xff; PORTC=0xff; DDRC=0xff; PORTD=0xff; DDRD=0xff; } uchar?getState() { PORTB=0xff; DDRB=0x0; clrbit(CTRL,CS1); clrbit(CTRL,CS2); clrbit(CTRL,RS); setbit(CTRL,RW); setbit(CTRL,E); //下降沿 clrbit(CTRL,E); return?PINB; } bool?lcdBusy() { uchar?state=0; state=getState(); if(state0x80) { //BUSY return?true; } else { //idle return?false; } } void?lcdCommand(uchar?command) { DDRB=0xff; clrbit(CTRL,CS1); clrbit(CTRL,CS2); clrbit(CTRL,RS); clrbit(CTRL,RW); DATA=command; setbit(CTRL,E); //下降沿 clrbit(CTRL,E);

文档评论(0)

hhuiws1482 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档