鸿蒙开发板Hi3861模拟SPI驱动JLX_LCD_基于code-2.0-CANARY
鸿蒙开发板Hi3861模拟SPI驱动JLX_LCD12864显示屏液晶屏_基于code-2.0-CANARY
2.0支持windows编译与上传,不需要ubuntu编译
环境搭建需要有耐心:
https://www.cnblogs.com/txwtech/p/15041927.html
首先学会点亮LED的实验
https://www.cnblogs.com/txwtech/p/15139405.html
————————————————
版权声明:本文为CSDN博主「txwtech」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/txwtech/article/details/120190704
// //,by txwtech2021.9 #include "_ansi.h" #include <stdio.h> #include "ohos_init.h" #include "cmsis_os2.h" #include "iot_gpio.h" #include "hi_io.h" #include "iot_pwm.h" #include "hi_pwm.h" #include "font.h" #define Rom_IN HI_IO_NAME_GPIO_13 //1// 字库 IC 接口定义:Rom_IN 就是字库 IC 的 SI #define Rom_OUT HI_IO_NAME_GPIO_14//2//字库 IC 接口定义:Rom_OUT 就是字库 IC 的 SO #define Rom_SCK HI_IO_NAME_GPIO_3 //3//字库 IC 接口定义:Rom_SCK 就是字库 IC 的 SCK #define Rom_CS HI_IO_NAME_GPIO_4 //4//MOSI,,字库 IC 接口定义 Rom_CS 就是字库 IC 的 CS# ,MOSI #define lcd_sclk HI_IO_NAME_GPIO_8 //8//蓝INT0,SCLK,中断0,接口定义:lcd_sclk 就是 LCD 的 SCLK ,INT0,中断0,txianwu #define lcd_sid HI_IO_NAME_GPIO_9 //9//TXD,SDA,接口定义:lcd_sid 就是 LCD 的 SDA, by txwtech #define lcd_rs HI_IO_NAME_GPIO_10 ////10//灰RXD,接口定义:lcd_rs 就是 LCD 的 RS,也叫“CD” txwtech,txianwu #define lcd_reset HI_IO_NAME_GPIO_11 //11// 接口定义:lcd_reset 就是 LCD 的 RESET #define lcd_cs1 HI_IO_NAME_GPIO_12 //12//,接口定义:lcd_cs1 就是 LCD 的 CS1 ,低电平片选
//36x40_6x8 void display_28x32(unsigned char *dp) { uint i, j; for (j = 0; j<4; j++) { lcd_address(j + 1, 1); for (i = 0; i<28; i++) { transfer_data_lcd(*dp); //写数据到 LCD,每写完一个 8 位的数据后列地址自动加 1 dp++; } } for(uint k=1;k<=3;k++) { for (j = 0; j<4; j++) { lcd_address(j + 1, 28*k); for (i = 0; i<28; i++) { transfer_data_lcd(*dp); //写数据到 LCD,每写完一个 8 位的数据后列地址自动加 1 dp++; } } } for (j = 0+4; j<4+4; j++) { lcd_address(j + 1, 1); for (i = 0; i<28; i++) { transfer_data_lcd(*dp); //写数据到 LCD,每写完一个 8 位的数据后列地址自动加 1 dp++; } } for(uint k=1;k<=3;k++) { for (j = 0+4; j<4+4; j++) { lcd_address(j + 1, 28*k); for (i = 0; i<28; i++) { transfer_data_lcd(*dp); //写数据到 LCD,每写完一个 8 位的数据后列地址自动加 1 dp++; } } } } //显示 128x64 点阵图像 void display_128x64(unsigned char *dp) //code is not free, you could contact v ID:txianwu to get full code { uint i, j; for (j = 0; j<8; j++) { lcd_address(j + 1, 1); for (i = 0; i<128; i++) { transfer_data_lcd(*dp); //写数据到 LCD,每写完一个 8 位的数据后列地址自动加 1 dp++; } } } static void jlx12864Task(void *arg) { (void) arg; /* #define lcd_reset HI_IO_NAME_GPIO_11 //gpio11, 接口定义:lcd_reset 就是 LCD 的 RESET #define lcd_cs1 HI_IO_NAME_GPIO_12 //gpio12,接口定义:lcd_cs1 就是 LCD 的 CS1 ,低电平片选 #define lcd_rs HI_IO_NAME_GPIO_14 ////10//灰RXD,gpio14,接口定义:lcd_rs 就是 LCD 的 RS,也叫“CD” txwtech,txianwu #define lcd_sclk HI_IO_NAME_GPIO_10 //8//蓝INT0,gpio10,中断0,接口定义:lcd_sclk 就是 LCD 的 SCLK ,INT0,中断0,txianwu #define lcd_sid HI_IO_NAME_GPIO_13 //TXD,gpio13,接口定义:lcd_sid 就是 LCD 的 SDA, by txwtech #define Rom_CS HI_IO_NAME_GPIO_9 //MOSI,gpio9,字库 IC 接口定义 Rom_CS 就是字库 IC 的 CS# ,MOSI #define Rom_IN HI_IO_NAME_GPIO_2 //gpio2 字库 IC 接口定义:Rom_IN 就是字库 IC 的 SI #define Rom_OUT HI_IO_NAME_GPIO_4//gpio4字库 IC 接口定义:Rom_OUT 就是字库 IC 的 SO #define Rom_SCK HI_IO_NAME_GPIO_3 //gpio3字库 IC 接口定义:Rom_SCK 就是字库 IC 的 SCK */ IoTGpioInit(lcd_reset); IoTGpioInit(lcd_cs1); IoTGpioInit(lcd_rs); IoTGpioInit(lcd_sclk); IoTGpioInit(lcd_sid); IoTGpioInit(Rom_CS); IoTGpioInit(Rom_IN); IoTGpioInit(Rom_OUT); IoTGpioInit(Rom_SCK); IoTGpioSetDir(lcd_reset,IOT_GPIO_DIR_OUT); IoTGpioSetDir(lcd_cs1,IOT_GPIO_DIR_OUT); IoTGpioSetDir(lcd_rs,IOT_GPIO_DIR_OUT); // IoTGpioSetDir(lcd_sclk,IOT_GPIO_DIR_OUT); IoTGpioSetDir(lcd_sid,IOT_GPIO_DIR_OUT); // IoTGpioSetDir(Rom_CS,IOT_GPIO_DIR_OUT); IoTGpioSetDir(Rom_IN,IOT_GPIO_DIR_OUT); // IoTGpioSetDir(Rom_OUT,IOT_GPIO_DIR_OUT); IoTGpioSetDir(Rom_SCK,IOT_GPIO_DIR_OUT); // //hi_gpio_init(); //hi_io_set_func(lcd_reset,); //while (1) // { //clear all dots while (1) { initial_lcd(); clear_screen(); // DrawFullScreenImage(gImage_11); display_28x32(txw_tech); osDelay(500); clear_screen(); display_128x64(fish1); osDelay(100); // continue; clear_screen(); Dis_str(0,1,"-----Hello-----"); // Dis_str(1,1,"-----HarmoneyOS-----"); osDelay(100); clear_screen(); Dis_str(1,1,"*-welcome home-*"); //Dis_str(2,31,"welcome home"); osDelay(100); // initial_lcd(); clear_screen(); /* 根据arduino12864LCD_SPI_资料,改写 */ Dis_str(1,1,"---HarmoneyOS---"); Dis_str(2,31,"txwtech"); //Dis_str(3,29,"2021.9.25"); osDelay(300); printf("show JLX LCD symbol\n"); //clear_screen(); // Display_char_image(1,1,logo0); } // } } static void GpioEntry(void) { osThreadAttr_t attr={0}; attr.name="jlx12864Task"; attr.stack_size=4096; attr.priority=osPriorityNormal; if(osThreadNew(jlx12864Task,NULL,&attr)==NULL) { printf("[GpioEntry] create jlx12864Task failed!\n"); } } SYS_RUN(jlx12864Task); //SYS_RUN(GpioEntry);
欢迎讨论,相互学习。
cdtxw@foxmail.com