浅谈用单片机控制12864液晶
//往12864内部写入一个字节的数据
void write_dat(uchar dat)
{
lcd12864_rs=1;//表示写数据
lcd12864_rw=0;//表示写
P0=dat;//把数据送到数据线上
lcd12864_en=0; //给en引脚一个高脉冲
delay_ms(5);
lcd12864_en=1;
delay_ms(5);
lcd12864_en=0;
}
这样基本的函数便写好了,关于12864的操作是这样的:首先需要对其进行配置,即执行初始化函数,然后就可以进行进行显示字符了。如果我们要在屏幕上显示汉字“好”,需要这样操作:首先写入命令,内容为显示地址(第一行首空间为0x80),然后写入数据,内容为我们要显示的字符(内容为“好”),于是我们的代码这样写:
init_12864();
write_cmd(0x80);
write_dat(“好”);
这样我们进行代码编译,将文件下载到单片机就可以在12864上看见在屏幕最左上角的“好”字了。下面进行一些更加复杂一点的操作。即在屏幕任意的地方显示任意的字符串(当然需要的显示空间要够,不然会没有地方显示的),代码如下:
void set_xy(uchar row,uchar line) //设置显示地址为第x行y列
{
switch(row) //对行进行判断
{
case 1: {write_cmd(0x80|line);break;} //第一行,则设定列位置
case 2: {write_cmd(0x90|line);break;} //第二行,则设定列位置
case 3: {write_cmd(0x88|line);break;} //第三行,则设定列位置
case 4: {write_cmd(0x98|line);break;} //第四行,则设定列位置
}
}
void write_xy(uchar row,uchar line,uchar *string) //在坐标为x行y列的地方显示出字符串string
{
uchar lcd_temp; //定义显示数据暂存变量
set_xy(row,line); //设定显示地址为第x行y列
lcd_temp=*string; //将string的内容赋给lcd_temp
while(lcd_temp!=0x00) //判断字符串截止标志
{
write_dat(lcd_temp); //写入字符串的相应内容
lcd_temp=*(++string); //读取字符串下一位字符
}
}
这样,一个函数就编写好了,如果我们想在第三行第二列的位置显示“我爱电子”,则这样进行操作:行x=3,列y=2,字符串为“我爱电子”,于是我们在主函数里面写这样的代码:
unsigned char string=“我爱电子”;
write_xy(3,2,uchar *string);
这样我们进行代码编译,将文件下载到单片机就可以在12864上看见在屏幕第三行第二列的位置显示“我爱电子”。下面介绍一下在12864上进行局部显示图片,在显示图片之前我们需要获得所显示图片的二进制编码。这个可以借助字模提取软件>来进行,然后在函数中定义一下(我定义为logo[ ]={ }),下面是局部显示图片的函数
void lcd12864_display(uchar code *img)/*显示函数*/
{
uchar x,y;
uint i=0;//不可定义为uchar,数量不够用
for(y=24;y=31;y++) //我们可以更改y的最小值和最大值来控制显示区域
{
for(x=1;x3;x++)//每个x对应于2个字节,我们可以更改x的最小值和最大值来控制显示区域
{
write_cmd(0x36); //扩充指令,同时开通图形显示
write_cmd(0x80+y);//垂直地址
write_cmd(0x80+x);//水平地址
write_cmd(0x30);//改为基本指令,进而进行基本输入
write_dat(img[i++]); //数据写入
write_dat(img[i++]);
}
}
for(y=0;y=23;y++) //我们可以更改y的最小值和最大值来控制显示区域
{
for(x=1;x3;x++) //我们可以更改x的最小值和最大值来控制显示区域
{
write_cmd(0x36);//扩充指令,同时开通图形显示
write_cmd(0x80+y);//垂直地址
write_cmd(0x88+x); //显示下半屏,y的坐标不变,x的坐标加8(看datasheet上的图)
write_cmd(0x30);//改为基本指令,进而进行基本输入
write_dat(img[i++]); //数据写入
write_dat(img[i++]);
}
}
}
- 基于DSP实现的LCD液晶屏显示技术(06-04)
- 基于PROTEUS技术的ARM7显示系统设计与仿真实现(11-22)
- uC/GUI在S3C44B0X的移植及其在数据显示系统中的应用(02-15)
- 基于DSP和单片机通信的液晶显示设计方案(07-20)
- 基于DSP和ST7920的液晶显示模块的实现(09-11)
- 基于DSP的液晶显示器接口设计及控制实现(10-15)