LCD12864怎么实现任意位置显示字符或汉字
展开全部
1.大小可调
字库里的字符大小应该是固定的,你要是实现大小可调就要用到字模提取软件,把字符转换为像素点。
2. 任意位置显示
#include<reg52.h> //包含单片机寄存器的头文件
sbit RS=P2^2; //寄存器选择位,将RS位定义为P2.2引脚
sbit RW=P2^3; //读写选择位,将RW位定义为P2.3引脚
sbit EN=P2^4; //使能信号位,将E位定义为P2.4引脚
unsigned char table[]=" 你好 ";
unsigned char code digit[ ]={"0123456789"}; //定义字符数组显示数字
void read_busy() //读忙标志
{
RS=0;
RW=1;
EN=1;
while(P0 & 0x80);
EN=0;
}
void delay(unsigned int i) //延时函数
{
while(--i);
}
void Write_LCD_command(unsigned char value) //写命令函数
{
read_busy(); //每次读写前都要惊醒“忙”判断
RS=0;
RW=0;
delay(200);
EN=1; //EN从1---0锁存有效数据
P0=value;
delay(200);
EN=0;
}
void Write_LCD_data(unsigned char value)//写数据函数
{
read_busy(); //每次读写前都要惊醒“忙”判断
RS=1;
RW=0;
delay(200);
EN=1; //EN从1---0锁存有效数据
P0=value;
delay(200);
EN=0;
}
void init_LCD() //LCD12864初始化
{
delay(4000);
Write_LCD_command(0x30);//8位数据格式,基本指令显示
delay(100); //延时时间
Write_LCD_command(0x30);//8位数据格式,基本指令显示
delay(37);
Write_LCD_command(0x0C);//开显示、关闭光标
delay(100);
Write_LCD_command(0x01);//清屏指令
delay(10000); //延时
Write_LCD_command(0x06);//设置显示点:指针自加1
}
//*************************************************
//以上是我测温程序的显示驱动部分,下面给你实现任意位置显示的程序
//*************************************************
void main()
{
unsigned int num;
init_LCD() //LCD12864初始化
while(1)
{
for(num=0;num<4;num++)//2个汉字
{
Write_LCD_command(0x90);//根据需要改变数值从而实现不同位置显示,看看12864的手册就知道了
Write_LCD_data(table[num]);
delay(10000);
}
}
}
字库里的字符大小应该是固定的,你要是实现大小可调就要用到字模提取软件,把字符转换为像素点。
2. 任意位置显示
#include<reg52.h> //包含单片机寄存器的头文件
sbit RS=P2^2; //寄存器选择位,将RS位定义为P2.2引脚
sbit RW=P2^3; //读写选择位,将RW位定义为P2.3引脚
sbit EN=P2^4; //使能信号位,将E位定义为P2.4引脚
unsigned char table[]=" 你好 ";
unsigned char code digit[ ]={"0123456789"}; //定义字符数组显示数字
void read_busy() //读忙标志
{
RS=0;
RW=1;
EN=1;
while(P0 & 0x80);
EN=0;
}
void delay(unsigned int i) //延时函数
{
while(--i);
}
void Write_LCD_command(unsigned char value) //写命令函数
{
read_busy(); //每次读写前都要惊醒“忙”判断
RS=0;
RW=0;
delay(200);
EN=1; //EN从1---0锁存有效数据
P0=value;
delay(200);
EN=0;
}
void Write_LCD_data(unsigned char value)//写数据函数
{
read_busy(); //每次读写前都要惊醒“忙”判断
RS=1;
RW=0;
delay(200);
EN=1; //EN从1---0锁存有效数据
P0=value;
delay(200);
EN=0;
}
void init_LCD() //LCD12864初始化
{
delay(4000);
Write_LCD_command(0x30);//8位数据格式,基本指令显示
delay(100); //延时时间
Write_LCD_command(0x30);//8位数据格式,基本指令显示
delay(37);
Write_LCD_command(0x0C);//开显示、关闭光标
delay(100);
Write_LCD_command(0x01);//清屏指令
delay(10000); //延时
Write_LCD_command(0x06);//设置显示点:指针自加1
}
//*************************************************
//以上是我测温程序的显示驱动部分,下面给你实现任意位置显示的程序
//*************************************************
void main()
{
unsigned int num;
init_LCD() //LCD12864初始化
while(1)
{
for(num=0;num<4;num++)//2个汉字
{
Write_LCD_command(0x90);//根据需要改变数值从而实现不同位置显示,看看12864的手册就知道了
Write_LCD_data(table[num]);
delay(10000);
}
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询