液晶显示器驱动实验
硬件说明:
带中文字库的128X64-0402B每屏可显示4行8列共32个16×16点阵的汉字,每个显示RAM可显示1个中文字符或2个16×8点阵全高ASCII码字符,即每屏最多可实现32个中文字符或64个ASCII码字符的显示。带中文字库的128X64-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个字符显示区域有着一一对应的关系。
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
内容:在12864液晶上显示字符、动画
实验程序:
#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;i0)
{ write_data(*s);
s++;
delay(50);}
}
/*------------------首屏显示--------------------------*/
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++]); }
}
/*------------------清整个GDRAM空间----------------------------*/
void clrgdram()
{ unsigned char x,y;
for(y=0;y<64;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(" 眉眼盈盈处");
}
//主程序
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); //调用自定义的CGRAM的代码
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);
}
}
实验结果:
初始化测试程序 动画显示
逐行显示宋词 反白显示
实验小结:
这次课程设计根据课题要求,第一次学习单片机内容,通过查询相关的资料,简要的了解一下。上学期老师上课讲过危机原理相关内容,对这次实验有很大的帮助。根据课程设计的要求和自己通过参考有关资料拟的
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
,写好程序流程图,在程序流程图的基础上,根据芯片的功能写出相应的程序,达到能够实现所要求的功能的目的。这次的单片机课程设计重点是理论与实际的相结合,不单单只是一条条分离的指令。通过这次设计让我更系统的了解了各个指令以及单片机的扩展内容,。
学习任何知识,仅从理论上去求知,而不去实践、探索是不够的,所以在学期末单片机课程设计是很及时、很必要的。这样不仅能加深我们对单片机的更深理解,而且还及时、真正的做到了学以致用。通过实践,我领悟到了很多以前不知道的东西,可以说是受益匪浅。虽然时间不是很长,但是还是有不少长进,这不仅是局限在程序设计的功能实现上,更多的是对程序设计的技巧的追求上。