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对应的字符