zoukankan      html  css  js  c++  java
  • 鸿蒙开发板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!
    ");
        }
    }
    SYS_RUN(st7920_12864Task);
    //SYS_RUN(GpioEntry);

     

    欢迎讨论,相互学习。 txwtech@163.com
  • 相关阅读:
    setjmp()和longjmp()函数
    C语言过程活动记录
    【剑指Offer】字符串的排列
    python剑指offer系列二叉树中和为某一值的路径
    二叉搜索树的后续遍历
    如何设置学习率
    各种机器学习算法的优缺点(未完成)
    机器学习中梯度下降法和牛顿法的比较
    特征图大小的计算
    为什么L1稀疏,L2平滑?
  • 原文地址:https://www.cnblogs.com/txwtech/p/15367545.html
Copyright © 2011-2022 走看看