esp32 控制并口12864,显示自定义字符和显示自带字库字符

图片

ae2d8f1dbd7549b5a8bdc725f56e4d88.jpg

自带字库

87992c49354740afb085728dd568e146.jpg


#include <stdio.h>
#include "driver/gpio.h"
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_rom_sys.h"

#define DATA0_GPIO 16
#define DATA1_GPIO 17
#define DATA2_GPIO 18
#define DATA3_GPIO 19
#define DATA4_GPIO 23
#define DATA5_GPIO 25
#define DATA6_GPIO 26
#define DATA7_GPIO 27

#define RS_GPIO 21  // 数据/命令选择引脚
#define RST_GPIO 15 // 复位引脚
#define EN_GPIO 22  // 使能引脚
#define RW  13 

void pd(){                   //判断lcd 忙
	gpio_set_level(RW, 1);
	gpio_set_level(RS_GPIO, 0);

	while(gpio_get_level(27)!=0){
	    esp_rom_delay_us(10);	
	}
}

void lcd_write_command(uint8_t cmd) {
    pd();
    gpio_set_level(RS_GPIO, 0); // 设置为命令模式
	gpio_set_level(RW, 0);
	gpio_set_level(EN_GPIO, 0);
	esp_rom_delay_us(50);
    gpio_set_level(EN_GPIO, 1);
    gpio_set_level(DATA0_GPIO, cmd & 0x01);
    gpio_set_level(DATA1_GPIO, (cmd >> 1) & 0x01);
    gpio_set_level(DATA2_GPIO, (cmd >> 2) & 0x01);
    gpio_set_level(DATA3_GPIO, (cmd >> 3) & 0x01);
    gpio_set_level(DATA4_GPIO, (cmd >> 4) & 0x01);
    gpio_set_level(DATA5_GPIO, (cmd >> 5) & 0x01);
    gpio_set_level(DATA6_GPIO, (cmd >> 6) & 0x01);
    gpio_set_level(DATA7_GPIO, (cmd >> 7) & 0x01);
	esp_rom_delay_us(500);
    gpio_set_level(EN_GPIO, 0); // 使能低电
	esp_rom_delay_us(50);
	 gpio_set_level(RS_GPIO, 1);
	 gpio_set_level(RW, 1);
	 esp_rom_delay_us(20);
}

void lcd_init() {
	
    // 初始化引脚
    gpio_set_direction(DATA0_GPIO, GPIO_MODE_OUTPUT);
    gpio_set_direction(DATA1_GPIO, GPIO_MODE_OUTPUT);
    gpio_set_direction(DATA2_GPIO, GPIO_MODE_OUTPUT);
    gpio_set_direction(DATA3_GPIO, GPIO_MODE_OUTPUT);
    gpio_set_direction(DATA4_GPIO, GPIO_MODE_OUTPUT);
    gpio_set_direction(DATA5_GPIO, GPIO_MODE_OUTPUT);
    gpio_set_direction(DATA6_GPIO, GPIO_MODE_OUTPUT);
    gpio_set_direction(DATA7_GPIO, GPIO_MODE_OUTPUT);

    gpio_set_direction(RS_GPIO, GPIO_MODE_OUTPUT);
    gpio_set_direction(RST_GPIO, GPIO_MODE_OUTPUT);
    gpio_set_direction(EN_GPIO, GPIO_MODE_OUTPUT);

    // 复位 LCD
    gpio_set_level(RST_GPIO, 0);
	esp_rom_delay_us(500);
    gpio_set_level(RST_GPIO, 1);
}


void lcd_write_data(uint8_t data) {
	pd();
    gpio_set_level(RS_GPIO, 1); // 设置为数据模式
	gpio_set_level(RW, 0);
	gpio_set_level(EN_GPIO, 0); // 使能低电平
	esp_rom_delay_us(50);
    gpio_set_level(EN_GPIO, 1); 
    gpio_set_level(DATA0_GPIO, data & 0x01);
    gpio_set_level(DATA1_GPIO, (data >> 1) & 0x01);
    gpio_set_level(DATA2_GPIO, (data >> 2) & 0x01);
    gpio_set_level(DATA3_GPIO, (data >> 3) & 0x01);
    gpio_set_level(DATA4_GPIO, (data >> 4) & 0x01);
    gpio_set_level(DATA5_GPIO, (data >> 5) & 0x01);
    gpio_set_level(DATA6_GPIO, (data >> 6) & 0x01);
    gpio_set_level(DATA7_GPIO, (data >> 7) & 0x01);
   
	esp_rom_delay_us(500);
    gpio_set_level(EN_GPIO, 0); // 使能低电平
	esp_rom_delay_us(50);
    gpio_set_level(RS_GPIO, 0); 
	gpio_set_level(RW, 1);
	esp_rom_delay_us(20);
}
		

// 应用主函数
void app_main() {
        lcd_init();
 
    // 定义字符'请'并绘制
   
	 uint8_t z[]={
  0x00,0x40,0x20,0x70,0x13,0xC0,0x10,0x70,0x01,0xC0,0x00,0x7C,0x77,0x80,0x10,0x70,
  0x13,0x90,0x12,0x70,0x13,0x90,0x1A,0x70,0x13,0x90,0x02,0x30,0x02,0x10,0x00,0x00,
  };
     // 初始化 LCD 控制器(根据 LCD 模型设置命令)
    lcd_write_command(0x30); // 8-bit模式,
	// esp_rom_delay_us(200);
	 lcd_write_command(0x30); // 8-bit模式,
	// esp_rom_delay_us(37); 
    lcd_write_command(0x0c); // 开启显示,不显示光标
	// esp_rom_delay_us(100);
    lcd_write_command(0x01);
	// esp_rom_delay_us(10000);
	lcd_write_command(0x06);
//	 esp_rom_delay_us(10000);
	                                  //上面各命令的延时经验证,可以不加
	//----------------------------------
	
	lcd_write_command(0x40);
	for(int a=0;a<16;a++){
	     lcd_write_data(z[a*2]);
		 lcd_write_data(z[a*2+1]);	
	}
	 lcd_write_command(0x80);    //第一行显示自定义字符
	 lcd_write_data(0x00);
	 lcd_write_data(0x00);

	 lcd_write_command(0x90);    // 第二行显示字库0-9
	 lcd_write_data(0x30); 
	 lcd_write_data(0x31);
	  lcd_write_data(0x32);
	 lcd_write_data(0x33);
	  lcd_write_data(0x34);
	 lcd_write_data(0x35);
	  lcd_write_data(0x36);
	 lcd_write_data(0x37);
	  lcd_write_data(0x38);
	 lcd_write_data(0x39);
	 
	 lcd_write_command(0x88);   // 显示字库
	 lcd_write_data(0x61);
	 lcd_write_data(0x62);
	  lcd_write_data(0x63);
	 lcd_write_data(0x64);
	  lcd_write_data(0x65);
	 lcd_write_data(0x66);
	  lcd_write_data(0x67);
	 lcd_write_data(0x68);
	  lcd_write_data(0x69);
	 lcd_write_data(0x6a);
	 
	  lcd_write_command(0x98);  //显示字库汉字
	  lcd_write_data(0xc0);      //乐 0xc0d0 +6  =0xc0d6
	 lcd_write_data(0xd6);
	 
	 
	 
	 
}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值