单片机:LCD12864显示屏实验(内含LCD12864介绍+硬件设计+软件设计+原始代码)

简介: 单片机:LCD12864显示屏实验(内含LCD12864介绍+硬件设计+软件设计+原始代码)

0681efbc1764486f9ea5a2da29c9d863.png

LCD12864与LCD162的区别:


不仅能显示字符,而且能显示汉字和图形


f9aaec4b42494af68adb712bb8752552.png


1:LCD12864介绍


d1f27f93544f4e2fa3e5f3b2799bb0c1.png


完整的像素点,无空隙


一个汉字最小占16*16,所以有8*4的汉字


图左的汉字是带字库里所包含的。。。中间的汉字是用户需要自己取模计算得出的汉字。。


b9a114e5b3814dc8a0fc1ac9a483aace.png

1130e3eccea845a98be01040bcc8b099.png


注:  0011 0000--->0x30


9573869cb06045a8b3297a0b2d6210ab.png


注: 0000 0001---->0x01 0000 0110---->0x06


5606c393b07546aaa7fb3845b34c5bdf.png


0000 1100--->0x0c


注:B为光标闪烁


注:图下为显示范围。含有壹区,贰区,叁区,肆区。但是只有一区三区可以显示,并且每个区的每一格代表能显示一个汉字,两个字符。


ba109010b5ec47559df23ab8127ca388.png


注:不带字库的LCD12864特点:面积小,,,显示汉字,图像,都需要取模软件


2:硬件设计


1a536bf650cc453ea9ae3110ba68ff7d.png


3:软件设计


4f314a03eeb64716b953637fe6ec3425.png


或运算,有0则为0,有一则为该对应的数值,所以x|=0x80,如x=1,变为1|0x80=0x81


002527a307c349fdb1e33ad47a6f77dd.png

b7498bf7047d4557be4e86b3dd264a9c.png

2a0e491555c442f7bed8feadb657c79e.png

633df3c3afa34137a617473ca0858dd0.png

5edb416b717341c5915823e882bdb97f.png


4:原始代码


1.main部分


#include "public.h"
#include "lcd12864.h"
void main()
{    
    lcd12864_init();//LCD12864初始化
    lcd12864_show_string(0,0,"Hello World!");//第1行字符串显示
    lcd12864_show_string(0,1,"大家好!");//第2行字符串显示
    lcd12864_show_string(0,2,"欢迎光临");//第3行字符串显示
    lcd12864_show_string(0,3,"再见");//第4行字符串显示
    while(1)
    {
    }    
}

2.lcd12864.c部分

#include "lcd12864.h"
//LCD12864写命令
void lcd12864_write_cmd(u8 cmd)
{
    LCD12864_RS=0;//选择命令
    LCD12864_WR=0;//选择写
    LCD12864_E=0;
    LCD12864_DATAPORT=cmd;//准备命令
    delay_ms(1);
    LCD12864_E=1;//使能脚E先上升沿写入
    delay_ms(1);
    LCD12864_E=0;//使能脚E后负跳变完成写入
}
//LCD12864写数据
void lcd12864_write_data(u8 dat)
{
    LCD12864_RS=1;//选择数据
    LCD12864_WR=0;//选择写
    LCD12864_E=0;
    LCD12864_DATAPORT=dat;//准备数据
    delay_ms(1);
    LCD12864_E=1;//使能脚E先上升沿写入
    delay_ms(1);
    LCD12864_E=0;//使能脚E后负跳变完成写入
}
//LCD12864初始化
void lcd12864_init(void)
{
    LCD12864_PSB=1;//选择8位或4位并口方式
    lcd12864_write_cmd(0x30);//数据总线8位,基本指令操作
    lcd12864_write_cmd(0x0c);//整体显示关,游标显示关,游标正常显示
    lcd12864_write_cmd(0x06);//写入新数据后光标右移,显示屏不移动
    lcd12864_write_cmd(0x01);//清屏    
}
//LCD12864清屏
void lcd12864_clear(void)
{
    lcd12864_write_cmd(0x01);    
} 
//LCD12864显示字符串
void lcd12864_show_string(u8 x,u8 y,u8 *str)
{
    if(y<=0)y=0;
    if(y>3)y=3;
    x&=0x0f;    //限制x,y不能大于显示范围
    switch(y)
    {
        case 0: x|=0x80;break;//第1行地址+x的偏移
        case 1: x|=0x90;break;//第2行地址+x的偏移
        case 2: x|=0x88;break;//第3行地址+x的偏移
        case 3: x|=0x98;break;//第4行地址+x的偏移
    }
    lcd12864_write_cmd(x);
    while(*str!='\0')
    {
        lcd12864_write_data(*str);
        str++;        
    }
} 

3:lcd12864.h 部分


#ifndef _lcd12864_H
#define _lcd12864_H
#include "public.h"
//管脚定义
sbit LCD12864_RS=P2^6;//数据命令选择
sbit LCD12864_WR=P2^5;//读写选择
sbit LCD12864_E=P2^7;//使能信号
#define LCD12864_DATAPORT    P0    //LCD12864数据端口定义
sbit LCD12864_PSB=P3^2;//8位或4并口/串口选择
//函数声明
void lcd12864_init(void);
void lcd12864_clear(void);
void lcd12864_show_string(u8 x,u8 y,u8 *str);
#endif


相关文章
|
1月前
|
存储 算法 编译器
如何优化单片机程序里面的C代码方法
如何优化单片机程序里面的C代码方法
20 0
|
4月前
|
物联网
STC51单片机-实验开发装置仿真-物联网应用系统设计
STC51单片机-实验开发装置仿真-物联网应用系统设计
53 0
|
7月前
单片机实验:外部中断系统实验 如何1357,2468灯交替亮
单片机实验:外部中断系统实验 如何1357,2468灯交替亮
120 0
|
7月前
单片机实验:兰花草
单片机实验:兰花草
52 0
|
7月前
单片机实验:外部中断系统实验 如何1357,2468灯交替亮
单片机实验:外部中断系统实验 如何1357,2468灯交替亮
305 0
|
4月前
|
物联网
STC51单片机-控制LED闪亮的仿真-物联网应用系统设计
STC51单片机-控制LED闪亮的仿真-物联网应用系统设计
42 0
|
4月前
|
物联网 人机交互 开发工具
STC51单片机-阵列LED显示-物联网应用系统设计项目开发
STC51单片机-阵列LED显示-物联网应用系统设计项目开发
78 0
|
4月前
|
物联网
STC51单片机-中断控制LED-物联网应用系统设计项目开发
STC51单片机-中断控制LED-物联网应用系统设计项目开发
53 0
|
1月前
|
传感器 物联网 C语言
单片机在智能家居中的应用:以LED灯控制为例
单片机在智能家居中的应用:以LED灯控制为例
55 0
单片机在智能家居中的应用:以LED灯控制为例
|
1月前
|
网络协议 机器人 中间件
单片机和FreeRTOS上跑机器人ROS的应用
单片机和FreeRTOS上跑机器人ROS的应用
67 0