⑴ 51单片机12864lcd显示汉字
会用1602显示英文,就可以用12864lcd显示汉字,二者区别就在于,显示汉字要送两个字节的代码,其中首个字节的值要大于128,而ASCI码的值均小于128。
汉字的机器码不用计算,编译器会自动编译,例如
unsigned char code table[]={ "我爱单片机"“hello” };
显示时,只要先送显示的首地址即可,然后送数组里的内容即可
write_LCD_command(0x88);//第2 行首地址
for(i=0;i<16;i++)
{
write_LCD_data(tab[i]);
delay(5000);
}
⑵ 利用51单片机、LCD显示器设计一个单片机显示系统,要求在液晶上显示“HELLO,PROTUS”。
#include<reg52.h> //包含头文件,这个嘛,就不用多说了~~
#define uint unsigned int //预定义一下
#define uchar unsigned char
sbit rs=P2^5; //1602的数据/指令选择控制线
sbit rw=P2^6; //1602的读写控制线
sbit en=P2^7; //1602的使能控制线
/*P2口接1602的D0~D7,注意不要接错了顺序,我以前可在这上面吃过亏~*/
uchar code table[]="LCD1602 check ok"; //要显示的内容1放入数组table
uchar code table1[]="study up"; //要显示的内容2放入数组table1
void delay(uint n) //延时函数
{
uint x,y;
for(x=n;x>0;x--)
for(y=110;y>0;y--);
}
/*********************************************************************************/
void lcd_wcom(uchar com) //1602写命令函数 (单片机给1602写命令)
{ //1602接收到命令后,不用存储,直接由HD44780执行并产生相应动作
rs=0; //选择指令寄存器
rw=0; //选择写
P0=com; //把命令字送入P2
delay(5); //延时一小会儿,让1602准备接收数据
en=1; //使能线电平变化,命令送入1602的8位数据口
en=0;
}
void lcd_wdat(uchar dat) //1602写数据函数
{
rs=1; //选择数据寄存器
rw=0; //选择写
P0=dat; //把要显示的数据送入P2
delay(5); //延时一小会儿,让1602准备接收数据
en=1; //使能线电平变化,数据送入1602的8位数据口
en=0;
}
void lcd_init() //1602初始化函数
{
lcd_wcom(0x38); //8位数据,双列,5*7字形
lcd_wcom(0x0c); //开启显示屏,关光标,光标不闪烁
lcd_wcom(0x06); //显示地址递增,即写一个数据后,显示位置右移一位
lcd_wcom(0x01); //清屏
}
void main() //主函数
{
uchar n,m=0;
lcd_init(); //液晶初始化
lcd_wcom(0x80); //显示地址设为80H(即00H,)上排第一位(也是执行一条命令)
for(m=0;m<16;m++) //将table[]中的数据依次写入1602显示
{
lcd_wdat(table[m]);
delay(200);
}
lcd_wcom(0x80+0x44); //重新设定显示地址为0xc4,即下排第5位
for(n=0;n<8;n++) //将table1[]中的数据依次写入1602显示
{
lcd_wdat(table1[n]);
delay(200);
}
while(1); //动态停机
}
能看懂吧?把引脚和字符改改 用的是1602 不懂的问