esp32 驱动液晶屏12864b(20 pin)已验证正常运行,显示自定义字符

chatgpt 给出的程序不能运行,所以也不要迷信chatgpt,现在是参照 12864指令时序写的程序,能正常显示自定义字符“请”。

因为找不到自定义字符资料,从网上下的请的自定义数组。

照片

2e6334049d7a4546b930bb1a465dcad4.jpg

硬件连接:

 Lcd                      esp32

RS                         d21

rw                         d13

E                           22

db0-db3               d16-d19

db4-db7               d23-d27

PSB                     vcc(并行)

RST                    d15


#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);
	
}







  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ESP32-C3是一款高性能、低功耗的Wi-Fi和蓝牙SoC芯片。它可以与各种显示屏连接,包括IPS 30pin接口的显示屏。下面是一个连接IPS 30pin接口的显示屏显示股票信息的程序的示例。 首先,需要使用IPS 30pin接口的显示屏。这种接口通常包括30个引脚,通过这些引脚可以传输视频信号和控制信号。 然后,需要选择合适的显示驱动芯片和库。常用的IPS显示屏驱动芯片有ILI9341、ILI9486等。可以根据具体的显示屏型号选择适合的显示驱动芯片和库。 接下来,需要编写程序来控制显示屏。可以使用Arduino IDE或其他开发工具,编写程序实现显示股票信息。以下是一个示例程序: ```C++ #include <SPI.h> #include <Adafruit_GFX.h> #include <Adafruit_ILI9341.h> #define TFT_DC 9 #define TFT_CS 10 #define TFT_RST 11 Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC, TFT_RST); void setup() { tft.begin(); tft.setRotation(3); tft.fillScreen(ILI9341_BLACK); tft.setTextColor(ILI9341_WHITE); tft.setTextSize(2); } void loop() { // 获取股票信息 float stock_price = get_stock_price(); // 显示股票信息 tft.setCursor(50, 50); tft.print("Stock price: "); tft.print(stock_price); delay(1000); } float get_stock_price() { // 获取股票价格的代码 // ... return 100.0; // 假设当前股票价格为100.0 } ``` 在上面的程序中,我们首先初始化了显示屏,设置了显示屏的旋转方向、背景颜色、文本颜色和字体大小。然后在循环中获取股票信息,显示显示屏上。在这个示例程序中,我们假设股票价格为100.0。 需要注意的是,这只是一个示例程序,实际开发中需要根据具体的需求进行修改。同时,还需要注意显示屏和芯片的电气连接,以及SPI接口的设置等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值