鸿蒙开发板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);
欢迎讨论,相互学习。
cdtxw@foxmail.com