您好,欢迎来到抵帆知识网。
搜索
您的当前位置:首页液晶显示器驱动实验

液晶显示器驱动实验

来源:抵帆知识网
液晶显示器驱动实验 硬件说明:

带中文字库的128X-0402B每屏可显示4行8列共32个16×16点阵的汉字,每个显示RAM可显示1个中文字符或2个16×8点阵全高ASCII码字符,即每屏最多可实现32个中文字符或个ASCII码字符的显示。带中文字库的128X-0402B内部提供128×2字节的字符显示RAM缓冲区(DDRAM)。字符显示是通过将字符显示编码写入该字符显示RAM实现的。根据写入内容的不同,可分别在液晶屏上显示CGROM(中文字库)、HCGROM(ASCII码字库)及CGRAM(自定义字形)的内容。三种不同字符/字型的选择编码范围为:0000~0006H(其代码分别是0000、0002、0004、0006共4个)显示自定义字型,02H~7FH显示半宽ASCII码字符,A1A0H~F7FFH显示8192种GB2312中文字库字形。字符显示RAM在液晶模块中的地址80H~9FH。字符显示RAM地址与32个字符显示区域有着一一对应的关系。

设计内容:在128液晶上显示字符、动画

实验程序:

#include #include

sbit RS = P2^0; //定义管脚 sbit RW = P2^1; sbit E = P2^2; sbit RES = P2^6;

#define Lcd_Bus P1 //MCU P1<------> LCM #define FIRST_ADDR 0 //定义字符/汉字显示起始位置 unsigned char code zk[]={

0x08,0x20,0x1c,0x10,0x1c,0x1c,0xff,0x9e,0x7f,0x1e,0x1c,0x1f,0x3e,0x1f,0x3e,0x1f,0x77,0x1f,0x41,0x3f,0x00,0x7e,0x00,0xfe,0x83,0xfc,0x7f,0xf8,0x3f,0xf0,0x0f,0xc0 };

/*------------------检查忙位-----------------------------*/ void chk_busy() { RS=0; RW=1; E=1;

Lcd_Bus=0xff;

while((Lcd_Bus&0x80)==0x80);

E=0; }

/*------------------延时子程序-----------------------------*/ void delay(unsigned int t) { unsigned int i,j; for(i=0;i/*------------------写命令到LCD------------------------------*/ void write_com(unsigned char cmdcode) { chk_busy(); }

/*-------------------写数据到LCD----------------------------*/ void write_data(unsigned char Dispdata) { chk_busy(); }

2

RS=0; RW=0; E=1;

Lcd_Bus=cmdcode;

delay(5); //在数据写入的时候加入适当的延时 E=0; delay(5);

RS=1; RW=0; E=1;

Lcd_Bus=Dispdata;

delay(5);///////////////////在数据写入的时候加入适当的延时 E=0; delay(5);

/*------------------初始化LCD屏--------------------------*/ void lcdreset() { delay(2000); write_com(0x30);

delay(10); //选择基本指令集 write_com(0x30); //选择8bit数据流 delay(5);

write_com(0x0c); //开显示 delay(10);

write_com(0x01); //清除显示,并且设定地址指针为00H delay(500);

write_com(0x06); //读取及写入时,设定游标的移动方向及指定显示的移位 delay(0); }

/*------------------自定义一个字符代码--------------------------*/ void CGRAM() { int i;

write_com(0x30); write_com(0x40); for(i=0;i<16;i++) {write_data(zk[i*2]); write_data(zk[i*2+1]);} }

/*------------------显示字符串--------------------------*/ void hzkdis(unsigned char code *s) { while(*s>0) { write_data(*s); s++; delay(50);} }

3

/*------------------首屏显示--------------------------*/ void ceshi()

{write_com(0x01); //清除显示,并且设定地址指针为00H delay(5);

write_com(0x80);//第一行(如果是地址是:80H,即LCD的第一行的第一个位置显示) hzkdis(\" LCD液晶显示\"); delay(10000);

write_com(0x90);//第二行(如果是地址是:90H,即LCD的第二行的第一个位置显示) hzkdis(\" 测试程序 \"); delay(10000);

write_com(0x88);//第三行(如果是地址是:88H,即LCD的第二行的第一个位置显示) hzkdis(\" B09090315 \"); delay(10000);

write_com(0x9A);//第四行(如果是地址是:98H,即LCD的第二行的第一个位置显示) hzkdis(\" 高凡\"); }

/*------------------显示图片------------------------*/ void Disp_Img(unsigned char code *img) { unsigned int j=0; unsigned char x,y,i; for(i=0;i<9;i+=8) for(y=0;y<32;y++)// for(x=0;x<8;x++)

{ write_com(0x36); //功能设置---8BIT控制界面,扩充指令集 write_com(y+0x80); //行地址 write_com(x+0x80+i); //列地址 write_com(0x30); write_data(img[j++]); write_data(img[j++]); } }

4

/*------------------清整个GDRAM空间----------------------------*/ void clrgdram() { unsigned char x,y; for(y=0;y<;y++) for(x=0;x<16;x++) { write_com(0x34);

write_com(y+0x80); //行地址 write_com(x+0x80); //列地址 write_com(0x30); write_data(0x00); write_data(0x00); } }

/*------------------清屏命令--------------------------*/ void clrscreen() { write_com(0x01); delay(10); }

/*------------------古诗(宋)王观--------------------------*/ void gushi_display() { write_com(0x30); clrscreen();

write_com(0x80+FIRST_ADDR);

hzkdis(\" 水是眼波横\");delay(10000); write_com(0x90+FIRST_ADDR);

hzkdis(\" 山是眉峰聚\");delay(10000); write_com(0x88+FIRST_ADDR);

hzkdis(\"欲问行人去那边\");delay(10000); write_com(0x98+FIRST_ADDR); hzkdis(\" 眉眼盈盈处\"); }

5

//主程序 main()

{ unsigned char i; while(1) { RW=0;

lcdreset(); //初始化LCD屏 CGRAM();

ceshi(); delay(200); // clrgdram();clrscreen(); // Disp_Img(BMP); // gushi_display(); // clrgdram();

write_com(0x87); // write_data(0x00); write_data(0x00); gushi_display01(); delay(6000);

for(i=0;i<8;i++) // {write_com(0x18); delay(2000);}

write_com(0x03); // write_com(0x60); delay(6000); } }

实验结果:

显示测试字样 清屏 调入一幅图画 显示宋词 调用自定义的CGRAM的代码 字符循环左移 垂直滚动屏幕的内容 6

初始化测试程序 动画显示

逐行显示宋词 反白显示

实验小结:

这次课程设计根据课题要求,第一次学习单片机内容,通过查询相关的资料,简要的了解一下。上学期老师上课讲过危机原理相关内容,对这次实验有很大的帮助。根据课程设计的要求和自己通过参考有关资料拟的方案,写好程序流程图,在程序流程图的基础上,根据芯片的功能写出相应的程序,达到能够实现所要求的功能的目的。这次的单片机课程设计重点是理论与实际的相结合,不单单只是一条条分离的指令。通过这次设计让我更系统的了解了各个指令以及单片机的扩展内容,。

学习任何知识,仅从理论上去求知,而不去实践、探索是不够的,所以在学期末单片机课程设计是很及时、很必要的。这样不仅能加深我们对单片机的更深理解,而且还及时、真正的做到了学以致用。通过实践,我领悟到了很多以前不知道的东西,可以说是受益匪浅。虽然时间不是很长,但是还是有不少长进,这不仅是局限在程序设计的功能实现上,更多的是对程序设计的技巧的追求上。

7

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- dfix.cn 版权所有 湘ICP备2024080961号-1

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务