鸿蒙开发板Hi3861模拟SPI驱动12864LCD_ST7920_基于code-2.0-CANARY

鸿蒙开发板Hi3861模拟SPI驱动12864LCD_ST7920_基于code-2.0-CANARY

https://blog.csdn.net/txwtech/article/details/120609456

 核心代码:

void WriteCommand(unsigned char CMD) //c
{
 // IoTGpioSetOutputVal(lcd_rs,IOT_GPIO_VALUE0);//txwtech
   unsigned char H_data,L_data;
   H_data = CMD;
   H_data &= 0xf0;           //屏蔽低4位的数据
   L_data = CMD;             //xxxx0000格式
   L_data &= 0x0f;           //屏蔽高4位的数据
   L_data <<= 4;             //xxxx0000格式
   WriteByte(0xf8);          //RS=0,写入的是指令;
   WriteByte(H_data);
   WriteByte(L_data);
  
  // IoTGpioSetOutputVal(lcd_rs,IOT_GPIO_VALUE0);//txwtech
}
void delay_ms(unsigned int ms)
{
    osDelay((ms*5)/10);
}
void Initialise()
{
    
    IoTGpioSetDir(lcd_rs,IOT_GPIO_DIR_OUT);  //
    IoTGpioSetDir(lcd_sclk,IOT_GPIO_DIR_OUT);
    IoTGpioSetDir(lcd_sid,IOT_GPIO_DIR_OUT);  //
 
    //digitalWrite(latchPin, LOW);
    IoTGpioSetOutputVal(lcd_rs,IOT_GPIO_VALUE0);
     
    //delayns();
    delay_ms(10);
 
    WriteCommand(0x30);        //功能设定控制字
    WriteCommand(0x0c);        //显示开关控制字
    WriteCommand(0x01);        //清除屏幕控制字
    WriteCommand(0x06);        //进入设定点控制字
}
 
void CLEAR(void)
{  
   
   /*  WriteCommand(0x01);//清除显示
     WriteCommand(0x34);//
     WriteCommand(0x30);// */
 
    WriteCommand(0x30);//
    WriteCommand(0x01);//清除显示
    
}
void DisplayString(unsigned char X,unsigned char Y,unsigned char *ptr,int dat)
{
  int i;
 
  switch(X)
   {
     case 0:  Y|=0x80;break;
 
     case 1:  Y|=0x90;break;
 
     case 2:  Y|=0x88;break;
 
     case 3:  Y|=0x98;break;
 
     default: break;
   }
  WriteCommand(Y); // 定位显示起始地址
 
  for(i=0;i<dat;i++)
    { 
      WriteData(ptr[i]);//显示汉字时注意码值,连续两个码表示一个汉字
    }
}
static void st7920_12864Task(void *arg)
{
    (void) arg;
   
    
    IoTGpioInit(lcd_rs);  
    IoTGpioInit(lcd_sclk); 
    IoTGpioInit(lcd_sid);  
   
    Initialise();
    delay_ms(100);
    
    
    
       
       while (1)
       {
         CLEAR();
        delay_ms(100);
        DrawFullScreen(nPianWoFish); 
         delay_ms(1000);
        CLEAR();
        delay_ms(100);
         DrawFullScreen(hmosLogo);
        delay_ms(1000);
        CLEAR();
        delay_ms(100);
            DisplayString(0,2,show0,AR_SIZE(show0));//第一行第三格开始
         DisplayString(1,2,show_hm,AR_SIZE(show_hm));//第一行第三格开始
         DisplayString(2,1,show_we_chat,AR_SIZE(show_we_chat));//第一行第三格开始
        DisplayString(3,2,show_nick,AR_SIZE(show_nick));//
        delay_ms(1000);
       // CLEAR();
       
     
       }
       
      
      
  //  }
   
    
 
}
static void GpioEntry(void)
{
    osThreadAttr_t attr={0};
    attr.name="st7920_12864Task";
    attr.stack_size=4096;
    attr.priority=osPriorityNormal;
    if(osThreadNew(st7920_12864Task,NULL,&attr)==NULL)
    {
        printf("[GpioEntry] create st7920_12864Task failed!\n");
    }
}
SYS_RUN(st7920_12864Task);
//SYS_RUN(GpioEntry);

 

 

posted @ 2021-10-04 23:20  txwtech  阅读(350)  评论(0编辑  收藏  举报