鸿蒙开发板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
"); 
    
        //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!
");
    }
}
SYS_RUN(jlx12864Task);
//SYS_RUN(GpioEntry);
欢迎讨论,相互学习。 txwtech@163.com
原文地址:https://www.cnblogs.com/txwtech/p/15340228.html