51单片机驱动LCD12864中文字库显示

1.LCD12864介绍

① 可显示四行字符,每行可显示8个汉字或者16个数字和字母;
②可串行通信和并行通信;
③ 串口接口管脚信号

管脚号名称LEVEL说明
1VSS0V电源地
2VDD+5V电源正(3.0V——5.5V)
3V0-对比度(亮度)调整
4CSH/L模组片选端,高电平有效
5SIDH/L串行数据输入端
6CLKH/L串行同步时钟:上升沿时读取 SID 数据
15PSBLL:串口方式
17/RESETH/L复位端,低电平有效
19AVDD背光源电压+5V
20KVSS背光源电压0V

④ 并行接口

管脚号名称LEVEL说明
1VSS0V电源地
2Vcc+5V电源正(3.0V——5.5V)
3V0-对比度(亮度)调整
4RS(CS)H/LRS=“H”,表示 DB7——DB0 为显示数据;RS=“L”,表示 DB7——DB0 为显示指令数据
5R/W(SID)H/LR/W=“H”,E=“H”,数据被读到 DB7——DB0;R/W=“L”,E=“H→L”, DB7——DB0 的数据被写到 IR 或 DR
6E(SCLK)H/L使能信号
7SIDH/L三态数据线
8SIDH/L三态数据线
9SIDH/L三态数据线
10SIDH/L三态数据线
11SIDH/L三态数据线
12SIDH/L三态数据线
13SIDH/L三态数据线
14SIDH/L三态数据线
15PSBH/LH:8 位或 4 位并口方式,L:串口方式
16NC-悬空
17/RESETH/L复位端,低电平有效
18VOUTH/LLCD 驱动电压输出端
19AVDD背光源电压+5V
20KVSS背光源电压0V

2.LCD地址码、字符表、汉字码址表

①字符显示地址(每一个地址代表显示区域的一个8x16的点阵)
80H 81H 82H 83H 84H 85H 86H 87H
90H 91H 92H 93H 94H 95H 96H 97H
88H 89H 8AH 8BH 8CH 8DH 8EH 8FH
98H 99H 9AH 9BH 9CH 9DH 9EH 9FH
②符号表(比如显示“ ?” ,则发送字符码为 0X3F )
在这里插入图片描述
③汉字码址表
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.LCD12864 例程

lcd12864.c 文件👇

#include<lcd12864.h>

void initinal(void)           //初始化,12864有要求的要写上
{
delay(40);
PSB=1;   //并口工作模式
delay(1);
RES=0; //复位
delay(1);
RES=1;   //复位置高
delay(10);
TransferData(0x30,0);
delay(100);
TransferData(0x30,0);
delay(37);
TransferData(0x08,0);
delay(100);
TransferData(0x10,0);
delay(100);
TransferData(0x0C,0);
delay(100);
TransferData(0x01,0);
delay(10);
TransferData(0x06,0);
delay(100);
}


void lcd_mesg(unsigned char code *addr1)   //显示汉字函数,8*4=32
{
    unsigned char i;
    TransferData(0x80,0);
    delay(10);
    for(i=0;i<16;i++)
        {
            TransferData(*addr1,1);
            addr1++;
        }
    TransferData(0x90,0);
    delay(10);
   for(i=16;i<32;i++)
         {
            TransferData(*addr1,1);
            addr1++;
         }
     TransferData(0x88,0);
     delay(10);
     for(i=32;i<48;i++)
         {
            TransferData(*addr1,1);
            addr1++;
         }  
     TransferData(0x98,0);
     delay(10);
     for(i=48;i<64;i++)
         {
            TransferData(*addr1,1);
            addr1++;
         }                 
}

/*******************************************************************************
* 函 数 名         : TransferData(data1,DI);
* 函数功能		   : 向LCD发送数据
* 参数:data1  当发送的为数字、英文字母、符号时发送的为一个字节
               当发送的为汉字时为两个字节
         DI    0   发送的是命令
               1   发送的是命令
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/

void TransferData(char data1,bit DI) //传送数据或是命令,当DI=0时,传送命令,当DI=1时,传送数据
{
    WRD=0;
    RS=DI;
    delay(1);
    P0=data1;
    E=1;
    delay(1);
    E=0;
}

/*******************************************************************************
* 函 数 名         : delayms();  delay
* 函数功能		   : 计算测得的距离数据
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void delayms(unsigned int n)    
{
    unsigned int i,j;
    for(i=0;i<n;i++)
    for(j=0;j<2000;j++);
}
void delay(unsigned int m)
{
    unsigned int i,j;
    for(i=0;i<m;i++)
    for(j=0;j<10;j++);
}

/*********************************************************************
** 函数名称: display_Chinese();
** 入口参数:
** 出口参数:无
** 功能描述: 显示汉字
**********************************************************************/
/*因显示出错,搁置
void display_Chinese(unsigned char page,unsigned char column, unsigned char code *hzk)//显示自己生成的汉字
{
   unsigned char j=0,i=0;
	for(j=0;j<2;j++)
	{
		Send_Cmd(Page_Add+page+j);
		Send_Cmd(LCDCol_Add+column);
		for(i=0;i<16;i++) 
			Send_date(hzk[16*j+i]);
	}
} 

*/
 

lcd12864.h 文件👇

#ifndef _LCD12864_H
#define _LCD12864_H

#include <reg52.h>
#include <stdio.h>
#include <math.h>
#include <string.h>

//sbit RS=P2^6;          //定义LCD显示引脚
//sbit WRD=P2^5;
//sbit E=P2^7;
//sbit PSB=P3^2;
//sbit RES=P3^4;


sbit RS=P2^6;          //定义LCD显示引脚
sbit WRD=P2^5;
sbit E=P2^7;
sbit PSB=P2^3;
sbit RES=P2^4;


#define Page_Add     0xb8//页地址
#define LCDCol_Add     0x40//列地址
#define Start_Line     0xC0//行地址

void initinal(void);
void TransferData(char data1,bit DI);
void delayms(unsigned int n);
void delay(unsigned int m);
void lcd_mesg(unsigned char code *addr1);

//void Send_Cmd(unsigned char date2) ;//写命令  
//void Send_date(unsigned char date3);//写数据
//void display_Chinese(unsigned char page,unsigned char column, unsigned char code *hzk);//显示自己生成的汉字

#endif

Vivado2023是一款集成开发环境软件,用于设计和验证FPGA(现场可编程门阵列)和可编程逻辑器件。对于使用Vivado2023的用户来说,license是必不可少的。 Vivado2023的license是一种许可证,用于授权用户合法使用该软件。许可证分为多种类型,包括评估许可证、开发许可证和节点许可证等。每种许可证都有不同的使用条件和功能。 评估许可证是免费提供的,让用户可以在一段时间内试用Vivado2023的全部功能。用户可以使用这个许可证来了解软件的性能和特点,对于初学者和小规模项目来说是一个很好的选择。但是,使用评估许可证的用户在使用期限过后需要购买正式的许可证才能继续使用软件。 开发许可证是付费的,可以永久使用Vivado2023的全部功能。这种许可证适用于需要长期使用Vivado2023进行开发的用户,通常是专业的FPGA设计师或工程师。购买开发许可证可以享受Vivado2023的技术支持和更新服务,确保软件始终保持最新的版本和功能。 节点许可证是用于多设备或分布式设计的许可证,可以在多个计算机上安装Vivado2023,并共享使用。节点许可证适用于大规模项目或需要多个处理节点进行设计的用户,可以提高工作效率和资源利用率。 总之,Vivado2023 license是用户在使用Vivado2023时必须考虑的问题。用户可以根据自己的需求选择合适的许可证类型,以便获取最佳的软件使用体验。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jun8086

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值