鸿蒙开发板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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)