微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 12864液晶深入学习笔记_1

12864液晶深入学习笔记_1

时间:11-28 来源:互联网 点击:

0x88,0x49,0x88,0x49,0xF8,0x49,0x04,0x52,0x02,0x44,0x01,0x48,0x00,0xC0,0x00,0x00};

WDTCTL=WDTPW+WDTHOLD;//关狗

BCSCTL1=CALBC1_12MHZ;//设定cpu时钟DCO频率为12MHz

DCOCTL=CALDCO_12MHZ;

P2DIR|=BIT5+BIT4;//液晶的两条线

init_lcd();//初始化液晶

//下面是显示液晶字符表中的字符

wr_lcd(comm,0x80);//写第一行的显示地址写命令0x80

for(i=0;i16;i++)//每一行可以显示16个字符

wr_lcd(dat,0x00+i);//显示0x00~0x0f对应的字符写数据

wr_lcd(comm,0x90);//写第二行的显示地址因为12864的13行和24行分别由控制器ST7920的两行切割来的,为了看起来方便

//这里要手动把地址切换到第二行。要不然的话,显示完了第一行,液晶会自动切换显示到第三行上去

for(i=0;i16;i++)

wr_lcd(dat,0x10+i);//显示0x10~0x1f对应的字符

wr_lcd(comm,0x88);//写第三行的显示地址

for(i=0;i16;i++)

wr_lcd(dat,0x20+i);//显示0x20~0x2f对应的字符

wr_lcd(comm,0x98);//写第四行的显示地址

for(i=0;i16;i++)

wr_lcd(dat,0x30+i);//显示0x30~0x3f对应的字符

//delay_ms(1000);//延迟1s,观察效果

//调试时,可以在此处设置断点,单步执行下面的指令,观察结果

//在显示时DDAM和GDRAM是同时显示的,也就是它们的显示结果是叠加在一起的

//1.设定DDRAM地址命令

wr_lcd(comm,0x90);//设定DDRAM地址,因为此时DDRAM地址已经溢出

//2.显示状态命令

wr_lcd(comm,0x08);//整体显示关,游标关,游标位置关

wr_lcd(comm,0x0c);//整体显示开,游标关,游标位置关

wr_lcd(comm,0x0e);//整体显示开,游标开,游标位置关

wr_lcd(comm,0x0f);//整体显示开,游标开,游标位置开游标闪烁

//3.位址归位

wr_lcd(comm,0x02);//位址归位,游标回到原点

wr_lcd(comm,0x84);//将DDRAM地址设为0x88,游标在此闪烁

//4.点设定指令

//(以下四个命令是控制写入字符以后光标及整屏显示的移动)

wr_lcd(comm,0x07);//光标右移整体显示左移

wr_lcd(comm,0x20);//写入两个空格

wr_lcd(dat,0x20);

wr_lcd(comm,0x05);//光标左移整体显示右移

wr_lcd(dat,0x20);//写入两个空格

wr_lcd(dat,0x20);

wr_lcd(comm,0x06);//光标右移整体显示不移动

wr_lcd(dat,0x20);//写入两个空格

wr_lcd(dat,0x20);

wr_lcd(comm,0x04);//光标左移整体显示不移动

wr_lcd(dat,0x20);//写入两个空格

wr_lcd(dat,0x20);

//5.游标和显示移位控制

//(以下四个命令无需写入显示数据,直接控制光标和整屏显示的移动,上面执行的命令是写入空格实现光标移动和整屏的移动)

wr_lcd(comm,0x10);//光标左移

wr_lcd(comm,0x14);//光标右移

wr_lcd(comm,0x18);//整体显示左移,光标跟随

wr_lcd(comm,0x1c);//整体显示右移,光标跟随

wr_lcd(comm,0x0c);//关闭光标

//6.进入扩展功能模式命令

wr_lcd(comm,0x34);//打开扩展功能模式,绘图显示关闭

//7.反白命令

wr_lcd(comm,0x04);//同时反白1、3行

wr_lcd(comm,0x04);//再次反白1、3行,相当于关闭1、3行反白

wr_lcd(comm,0x05);//同时反白2、4行

wr_lcd(comm,0x05);//再次反白2、4行,相当于关闭2、4行反白

//8.睡眠模式命令

wr_lcd(comm,0x08);//进入睡眠模式液晶的控制器ST7920关闭,降低功耗。但是背光还是亮的

wr_lcd(comm,0x0c);//退出睡眠模式继续显示

//9.待命模式命令

wr_lcd(comm,0x01);//进入待命模式也是不显示内容的,液晶已经准备好接受数据或命令了

//10.打开GDRAM显示//这样打开GDRAM显示,液晶的GDRAM和DDRAM会同时控制液晶的显示

wr_lcd(comm,0x36);//打开扩展功能模式,打开绘图显示由于上电后GDRAM中的数据是随机的,所以如果在显示之前不清除的话,会显示乱码

Draw_TX(0x80,0x84,laba);//显示16*16大小图形显示上面定义的图像,是一个小喇叭

Clear_GDRAM();//清除上电复位后GDRAM中的随机数值,此时GDRAM显示空字符,但是DDRAM中还是有数据,所以此时会显示DDRAM中的数据

Draw_TX(0x80,0x84,laba);//重新显示设置16*16大小图形

//11.关闭GDRAM显示

wr_lcd(comm,0x34);//打开扩展功能模式,关闭绘图显示显示DDRAM中的数据

//12.设定基本指令集

wr_lcd(comm,0x30);//回到基本指令集

//13.清除显示命令

wr_lcd(comm,0x01);//清屏只能清除DDRAM此时液晶就什么都不显示了

//下面是显示液晶字符表中的字符

wr_lcd(comm,0x80);//写第一行的显示地址

for(i=0;i16;i++)

wr_lcd(dat,0x40+i);//显示0x40~0x4f对应的字符

wr_lcd(comm,0x90);//写第二行的显示地址

for(i=0;i16;i++)

wr_lcd(dat,0x50+i);//显示0x50~0x5f对应的字符

wr_lcd(comm,0x88);//写第三行的显示地址

for(i=0;i16;i++)

wr_lcd(dat,0x60+i);//显示0x60~0x6f对应的字符

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top