jennyzhaojie

  • 2025-03-29
  • 回复了主题帖: 测评颁奖: NXP 边缘AI FRDM-MCXN947开发板(含NXP官方福利礼品)

    已确认地址无误

  • 2025-03-27
  • 回复了主题帖: 【MIKROE TFT-PROTO Board测评】关于触摸功能的实现分析

    秦天qintian0303 发表于 2025-3-27 13:50 那也比不上电容屏吧      只是电容屏要稍贵些

  • 2025-03-26
  • 发表了主题帖: 【MIKROE TFT-PROTO Board测评】关于触摸功能的实现分析

    本帖最后由 jennyzhaojie 于 2025-3-26 23:51 编辑 MIKROE TFT-PROTO Board包含一个2.83英寸的TFT彩色显示屏MI0283QT-9A分辨率为320x240像素,由ILI9341显示控制器驱动,能够显示高级图形内容。每个像素可以显示22K种不同的颜色。TFT显示屏上覆盖了一个电阻式触摸面板,可以作为输入设备使用。为了进一步连接,有一个2X20的头。经过测试和构建最终程序后,这个电路板也可以用于您的最终设备。电路板还包含安装孔,以便更容易地集成到您的设计。   那么它是否具有直接可用得触摸功能呢? 图1是一种常规的触摸屏所配置触摸电路,其触摸功能是通过触摸控制芯片XPT2046来完成的。     图1 触摸控制电路   图2是MIKROE TFT-PROTO Board的应用电路,由此可知它只配置了电阻式触摸面板,而没有配置触摸控制芯片XPT2046,也就是说不经外部的扩展它是无法直接实现触摸控制的。     图2 应用电路

  • 2025-03-24
  • 发表了主题帖: 【MIKROE TFT-PROTO Board测评】显示功能多方位测试

    本帖最后由 jennyzhaojie 于 2025-3-25 11:03 编辑 在完成对MIKROE TFT-PROTO Board的显示驱动后,为其扩展丰富的显示功能是十分必要的。 为此,对其添加了标准的测试界面,并对扩展的功能进行了相应的测试。 图1是为其配置的标准测试界面,其实现的程序内容为: void main_test(void) { LCD_Fill(0,0,239,20,BLUE); POINT_COLOR=WHITE; BACK_COLOR=BLUE; LCD_ShowString(20,2,"TEST 1: MIKROE TFT-PROTO"); LCD_Fill(0,300,239,319,BLUE); LCD_ShowString(20,300,"by: jennyzhaojie"); Delay(0x28FFFF); Delay(0x28FFFF); }      图1 测试界面 为评判色彩表现力,其测试如图2所示,其测试程序为: void Test_Color(void) { LCD_Fill(0,0,239,319,WHITE); POINT_COLOR=YELLOW; BACK_COLOR=BLUE; LCD_ShowString(20,30,"BL Test"); Delay(0xFFFFFF); LCD_Fill(0,0,239,319,RED); LCD_ShowString(20,30,"RED"); Delay(0xFFFFFF); LCD_Fill(0,0,239,319,GREEN); LCD_ShowString(20,30,"GREEN"); Delay(0xFFFFFF); LCD_Fill(0,0,239,319,BLUE); POINT_COLOR=YELLOW; BACK_COLOR=RED; LCD_ShowString(20,30,"BLUE"); Delay(0xFFFFFF); }   图2 背景测试   此外,还对图形的表现力进行了测试,主要包括矩形,圆形及三角形。 对矩形的测试如图3所示,其实现的程序为: void Test_FillRec(void) { u8 i=0; u16 ColorTab[5]={RED,GREEN,BLUE,YELLOW,BRED}; LCD_Fill(0,0,239,20,BLUE); POINT_COLOR=WHITE; BACK_COLOR=BLUE; LCD_ShowString(20,2,"TEST 2: GUI Rectangle"); LCD_Fill(0,300,239,319,BLUE); LCD_ShowString(20,300,"by: jennyzhaojie"); LCD_Fill(0,20,239,319-20,WHITE); for (i=0; i<5; i++) { POINT_COLOR=ColorTab[i]; LCD_DrawRectangle(239/2-80+(i*15),319/2-80+(i*15),239/2-80+(i*15)+60,319/2-80+(i*15)+60); } Delay(0xFFFFFF); LCD_Fill(0,20,239,319-20,WHITE); for (i=0; i<5; i++) { POINT_COLOR=ColorTab[i]; LCD_DrawFillRectangle(239/2-80+(i*15),319/2-80+(i*15),239/2-80+(i*15)+60,319/2-80+(i*15)+60); } Delay(0xFFFFFF); }     图3 矩形测试   对圆形的测试如图4所示,其实现的程序为: void Test_Circle(void) { u8 i=0; u16 ColorTab[5]={RED,GREEN,BLUE,YELLOW,BRED}; u16 width=239,height=319; LCD_Fill(0,0,239,20,BLUE); POINT_COLOR=WHITE; BACK_COLOR=BLUE; LCD_ShowString(20,2,"TEST 3: GUI Circle"); LCD_Fill(0,300,239,319,BLUE); LCD_ShowString(20,300,"by: jennyzhaojie"); LCD_Fill(0,20,width,height-20,WHITE); for (i=0; i<5; i++) { POINT_COLOR=ColorTab[i]; Draw_Circle(width/2-80+(i*25),height/2-50+(i*25),30); } Delay(0xFFFFFF); LCD_Fill(0,20,width,height-20,WHITE); for (i=0; i<5; i++) { gui_circle(width/2-80+(i*25),height/2-50+(i*25),ColorTab[i],30,1); } Delay(0xFFFFFF); }     图4 圆形测试   对三角形的测试如图5所示,其实现的程序为: void Test_Triangle(void) { u8 i=0; u16 ColorTab[5]={RED,GREEN,BLUE,YELLOW,BRED}; u16 width=239,height=319; LCD_Fill(0,0,239,20,BLUE); POINT_COLOR=WHITE; BACK_COLOR=BLUE; LCD_ShowString(20,2,"TEST 3: GUI Triangle̮"); LCD_Fill(0,300,239,319,BLUE); LCD_ShowString(20,300,"by: jennyzhaojie"); LCD_Fill(0,20,width,height-20,WHITE); for(i=0;i<5;i++) { POINT_COLOR=ColorTab[i]; Draw_Triangel(width/2-80+(i*20),height/2-20+(i*15),width/2-50-1+(i*20),height/2-20-52-1+(i*15),width/2-20-1+(i*20),height/2-20+(i*15)); } Delay(0xFFFFFF); LCD_Fill(0,20,width,height-20,WHITE); for(i=0;i<5;i++) { POINT_COLOR=ColorTab[i]; Fill_Triangel(width/2-80+(i*20),height/2-20+(i*15),width/2-50-1+(i*20),height/2-20-52-1+(i*15),width/2-20-1+(i*20),height/2-20+(i*15)); } Delay(0xFFFFFF); }     图5 三角形测试   对字符串显示的测试如图6所示,其实现的程序为: void English_Font_test(void) { u16 width=239,height=319; LCD_Fill(0,0,239,20,BLUE); POINT_COLOR=WHITE; BACK_COLOR=BLUE; LCD_ShowString(20,2,"TEST 4: English_Font̮"); LCD_Fill(0,300,239,319,BLUE); LCD_ShowString(20,300,"by: jennyzhaojie"); LCD_Fill(0,20,width,height-20,WHITE); POINT_COLOR=BLUE; BACK_COLOR=WHITE; LCD_ShowString(10,30,"8X16:abcdefghijklmnopqrstuvw"); LCD_ShowString(10,45,"8X16:xyz0123456789̮"); LCD_ShowString(10,60,"8X16:ABCDEFGHIJKLMNOPQRSTUVW"); LCD_ShowString(10,75,"8X16:XYZ0123456789̮"); LCD_ShowString(10,90,"8X16:~!@#$%^&*()_+{}:<>?/|-+.̮"); Delay(0xFFFFFF); }     图6 字符串显示测试 对中文的显示测试如图7所示,其实现的程序为: void Chinese_Font_test(void) { u16 width=239,height=319; LCD_Fill(0,0,239,20,BLUE); POINT_COLOR=WHITE; BACK_COLOR=BLUE; LCD_ShowString(20,2,"TEST 5: Chinese_Font̮"); LCD_Fill(0,300,239,319,BLUE); LCD_ShowString(20,300,"by: jennyzhaojie"); LCD_Fill(0,20,width,height-20,WHITE); POINT_COLOR=BLUE; BACK_COLOR=WHITE; showhanzi(10,30,0); Delay(0xFFFFFF); }     图7 中文显示测试   对图标的测试如图8所示,其实现的程序为: void Pic_test(void) { POINT_COLOR=WHITE; BACK_COLOR=BLUE; LCD_ShowString(20,2,"TEST 6: Pic_test "); LCD_Fill(0,20,width,height-20,WHITE); TB1(30,30); }     图8 图标显示测试   触摸校正的界面如图9所示,其实现界面效果的程序为: void TP_Adjust(void) { u16 pos_temp[4][2]; u8 cnt=0; u16 d1,d2; u32 tem1,tem2; float fac; u16 outtime=0; cnt=0; ili9341_clear(WHITE); POINT_COLOR=BLACK; LCD_ShowString(10,40,"Please use the stylus click"); LCD_ShowString(10,56,"the cross on the screen."); LCD_ShowString(10,72,"The cross will always move"); LCD_ShowString(10,88,"until the screen adjustment"); LCD_ShowString(10,104,"is completed."); TP_Drow_Touch_Point(20,20,RED); ... }     图9 触摸校正界面   进行触摸绘制的界面如图10所示,其实现程序为: void Touch_Test(void) { u8 key; u16 i=0; u16 j=0; u16 colorTemp=0; LCD_Fill(0,0,239,20,BLUE); POINT_COLOR=WHITE; BACK_COLOR=BLUE; LCD_ShowString(20,2,"TEST 8: Touch RST "); LCD_Fill(0,300,239,319,BLUE); LCD_ShowString(20,300,"by: jennyzhaojie"); POINT_COLOR=RED; LCD_Fill(140-52,2,140-50+20,18,RED); ... }     图10 触摸绘制界面   实现屏幕旋转的界面如图11和图12所示,其程序为: void Rotate_Test(void) { u8 i=0; u8 *Direction[4]={"Rotation:0","Rotation:90","Rotation:180","Rotation:270"}; LCD_Fill(0,20,width,height-20,WHITE); LCD_Fill(0,0,width,20,BLUE); POINT_COLOR=WHITE; BACK_COLOR=BLUE; LCD_ShowString(20,2,"TEST 7: Rotate_Test"); LCD_Fill(0,height-20,width,height,BLUE); LCD_ShowString(20,300,"by: jennyzhaojie"); for(i=0;i<4;i++) { LCD_direction(i); Gui_Drawbmp16(30,50,gImage_qq); LCD_Fill(0,0,width,20,BLUE); POINT_COLOR=WHITE; BACK_COLOR=BLUE; LCD_ShowString(20,2,"TEST 7: Rotate_Test̮"); LCD_Fill(0,height-20,width,height,BLUE); LCD_ShowString(20,height-20,"by: jennyzhaojie"); POINT_COLOR=BLUE; BACK_COLOR=WHITE; LCD_ShowString(20,30,Direction[i]); while(GPIO_ReadInputDataBit(GPIOC, GPIO_PIN_6)==1); LCD_Fill(0,0,width,height,WHITE); } LCD_direction(0); }     图11 屏幕旋转效果1     图12 屏幕旋转效果2  

  • 2025-02-19
  • 发表了主题帖: 【MIKROE TFT-PROTO Board测评】 动态波形绘制篇

    除了使用显示屏显示各种数据和信息,还可以使用它的图形绘制功能来实现采集数据的波形绘制。 借助N32A455开发板的A/D数据采集功能,,将它与显示屏相结合即可实现动态波形的绘制。 利用板载的电位器,可提供测试的模拟信号,其所连接的引脚为PB15,见图1所示。         图1 测试资源   进行ADC初始化的函数为:   void ADC_Initial(ADC_Module* ADCx) { ADC_InitStructure.WorkMode = ADC_WORKMODE_INDEPENDENT; ADC_InitStructure.MultiChEn = DISABLE; ADC_InitStructure.ContinueConvEn = DISABLE; ADC_InitStructure.ExtTrigSelect = ADC_EXT_TRIGCONV_NONE; ADC_InitStructure.DatAlign = ADC_DAT_ALIGN_R; ADC_InitStructure.ChsNumber = 1; ADC_Init(ADCx, &ADC_InitStructure); ADC_Enable(ADCx, ENABLE); while(ADC_GetFlagStatusNew(ADCx,ADC_FLAG_RDY) == RESET); ADC_StartCalibration(ADCx); while (ADC_GetCalibrationStatus(ADCx)); } 读去检测值的函数为: uint16_t ADC_GetData(ADC_Module* ADCx, uint8_t ADC_Channel) { uint16_t dat; ADC_ConfigRegularChannel(ADCx, ADC_Channel, 1, ADC_SAMP_TIME_239CYCLES5); ADC_EnableSoftwareStartConv(ADCx, ENABLE); while(ADC_GetFlagStatus(ADCx, ADC_FLAG_ENDC)==0); ADC_ClearFlag(ADCx, ADC_FLAG_ENDC); ADC_ClearFlag(ADCx, ADC_FLAG_STR); dat=ADC_GetDat(ADCx); return dat; } 实现直线绘制的函数为: void LCD_DrawLine(unsigned int x1, unsigned int y1, unsigned int x2, unsigned int y2) { unsigned int t; int xerr=0,yerr=0,delta_x,delta_y,distance; int incx,incy,uRow,uCol; delta_x=x2-x1; delta_y=y2-y1; uRow=x1; uCol=y1; if(delta_x>0) incx=1; else if(delta_x==0) incx=0; else { incx=-1; delta_x=-delta_x; } if(delta_y>0) incy=1; else if(delta_y==0) incy=0; else { incy=-1; delta_y=-delta_y; } if( delta_x>delta_y) distance=delta_x; else distance=delta_y; for(t=0;t<=distance+1;t++ ) { ili9341_draw_pixel(POINT_COLOR, uRow, uCol); xerr+=delta_x ; yerr+=delta_y ; if(xerr>distance) { xerr-=distance; uRow+=incx; } if(yerr>distance) { yerr-=distance; uCol+=incy; } } } 实现字符转向显示的函数为: void LCD_ShowCharh(unsigned int x,unsigned int y,char num,char mode) { char temp; char pos,t; unsigned int y0=y; num=num-' '; Address_set(x,y,x+8-1,y+16-1); if(!mode) { for(pos=0;pos<16;pos++) { temp=asc2_1608[(unsigned int)num*16+pos]; for(t=0;t<8;t++) { if(temp&0x01) ili9341_draw_pixel(RED, x, y); else ili9341_draw_pixel(WHITE, x, y); temp>>=1; y++; } y=y0; x--; } } else { for(pos=0;pos<16;pos++) { temp=asc2_1608[(unsigned int)num*16+pos]; for(t=0;t<8;t++) { if(temp&0x01) ili9341_draw_pixel(RED,x+pos, y-t); temp>>=1; } } } } 对ADC1通道6采集数据并绘制波形曲线的主程序为: int main(void) { uint16_t u; uint16_t sj,sp,k; uint8_t i=0; LCD_config(); RCC_Configuration(); GPIO_Configuration(); ADC_Initial(ADC1); TFT_Init(); LCD_Clear(WHITE); BACK_COLOR=WHITE; POINT_COLOR=RED; LCD_DrawLine(10, 10, 10, 310); LCD_DrawLine(10, 10, 230, 10); sp=0; i=1; while (1) { ADC1ConvertedValue[0]=ADC_GetData(ADC1,ADC1_Channel_06_PC0); V=ADC1ConvertedValue[0]; LCD_ShowNumh(200,268,V,4); V=V*3300/4096; LCD_ShowNumh(180,268,V,4); if((V<3300)&&(V>0)) { sj=V/16; } else { sj=200; } POINT_COLOR=BLUE; LCD_DrawLine(10+sp, 10+4*(i-1), 10+sj, 10+4*(i)); POINT_COLOR=RED; sp=sj; i=i+1; if(i>74) { ili9341_clear(WHITE); sp=0; i=1; LCD_ShowStringh(200,230,"Ch6:"); LCD_ShowStringh(180,230,"Ch6: mV"); LCD_DrawLine(10, 10, 10, 310); LCD_DrawLine(10, 10, 230, 10); } Delay(0X8FFFFF); } } 经程序的编译与下载,将电位器输出引脚PB15与读取引脚PC0相连即可产生模拟信号的变化,其测试效果如图2至图4所示。   图2 数据显示     图3 波形绘制(稳定电压)   图4 波形绘制(电位上升)

  • 2025-02-14
  • 回复了主题帖: 【MIKROE TFT-PROTO Board测评】电子时钟计时篇

    okhxyyo 发表于 2025-2-13 15:28 不错不错。谢谢分享~~这个是不是有模板啊。好像看另外一个网友也分享过差不多的, 哈哈,那应该是在新年花灯中。

  • 2025-02-13
  • 发表了主题帖: 【MIKROE TFT-PROTO Board测评】电子时钟计时篇

    在实现了屏幕的显示功能后,还用它来干些什么呢? 可借助N32A455开发板的RTC计时功能与显示屏相结合来制作一个电子时钟,其实现的程序如下。 RTC配置函数为: void RTC_PrescalerConfig(void) { RTC_InitStructure.RTC_AsynchPrediv = AsynchPrediv; RTC_InitStructure.RTC_SynchPrediv = SynchPrediv; RTC_InitStructure.RTC_HourFormat = RTC_24HOUR_FORMAT; if (RTC_Init(&RTC_InitStructure) == ERROR) { log_info("\r\n //******* RTC Prescaler Config failed **********// \r\n"); } } 相应的时间设置函数为: ErrorStatus RTC_TimeRegulate(void) { uint32_t tmp_hh = 0xFF, tmp_mm = 0xFF, tmp_ss = 0xFF; log_info("\n\r //==============Time Settings=================// \n\r"); RTC_TimeStructure.H12 = RTC_TimeDefault.H12; log_info("\n\r Please Set Hours \n\r"); tmp_hh = RTC_TimeDefault.Hours; if (tmp_hh == 0xff) { return ERROR; } else { RTC_TimeStructure.Hours = tmp_hh; } log_info(": %0.2d\n\r", tmp_hh); log_info("\n\r Please Set Minutes \n\r"); tmp_mm = RTC_TimeDefault.Minutes; if (tmp_mm == 0xff) { return ERROR; } else { RTC_TimeStructure.Minutes = tmp_mm; } log_info(": %0.2d\n\r", tmp_mm); log_info("\n\r Please Set Seconds \n\r"); tmp_ss = RTC_TimeDefault.Seconds; if (tmp_ss == 0xff) { return ERROR; } else { RTC_TimeStructure.Seconds = tmp_ss; } log_info(": %0.2d\n\r", tmp_ss); if (RTC_ConfigTime(RTC_FORMAT_BIN, &RTC_TimeStructure) == ERROR) { log_info("\n\r>> !! RTC Set Time failed. !! <<\n\r"); return ERROR; } else { log_info("\n\r>> !! RTC Set Time success. !! <<\n\r"); RTC_TimeShow(); return SUCCESS; } }   以秒中断来唤醒时间显示的函数为: void EXTI_PA7_Configuration(void) { GPIO_InitType GPIO_InitStructure; EXTI_InitType EXTI_InitStructure; NVIC_InitType NVIC_InitStructure; GPIO_InitStruct(&GPIO_InitStructure); RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA | RCC_APB2_PERIPH_AFIO, ENABLE); GPIO_InitStructure.Pin = GPIO_PIN_7; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure); GPIO_ConfigEXTILine(GPIOA_PORT_SOURCE, GPIO_PIN_SOURCE7); EXTI_InitStructure.EXTI_Line = EXTI_LINE7; EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt; EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising; EXTI_InitStructure.EXTI_LineCmd = ENABLE; EXTI_InitPeripheral(&EXTI_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x05; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0F; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } 中断处理函数的内容为: void EXTI9_5_IRQHandler(void) { if (EXTI_GetITStatus(EXTI_LINE7) != RESET) { RTC_DateShow(); RTC_TimeShow(); EXTI_ClrITPendBit(EXTI_LINE7); } } 实现时钟显示效果的函数为: void RTC_TimeShow(void) { RTC_GetTime(RTC_FORMAT_BIN, &RTC_TimeStructure); (void)RTC->DATE; LCD_ShowNum(16,46,RTC_TimeStructure.Hours,2); LCD_ShowChar(32,46,':',0); LCD_ShowNum(40,46,RTC_TimeStructure.Minutes,2); LCD_ShowChar(56,46,':',0); LCD_ShowNum(64,46,RTC_TimeStructure.Seconds,2); } 实现电子时钟计时效果的主程序为: int main(void) { LCD_config(); LCD_init(); showimage(0,0); POINT_COLOR=RED; BACK_COLOR=WHITE; LCD_ShowString(16,20,"2025-2-2"); LCD_ShowString(16,46," : :"); log_init(); log_info("RTC Init"); RTC_DateAndTimeDefaultVale(); RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_PWR | RCC_APB1_PERIPH_BKP, ENABLE); PWR_BackupAccessEnable(ENABLE); if (USER_WRITE_BKP_DAT1_DATA != BKP_ReadBkpData(BKP_DAT1) ) { if(SUCCESS==RTC_CLKSourceConfig(RTC_CLK_SRC_TYPE_LSE, true, false)) { RTC_PrescalerConfig(); log_info("\r\n RTC configured...."); RTC_DateRegulate(); RTC_TimeRegulate(); BKP_WriteBkpData(BKP_DAT1, USER_WRITE_BKP_DAT1_DATA); log_info("\r\n RTC Init Success\r\n"); } else { log_info("\r\n RTC Init Faile\r\n"); } } EXTI_PA7_Configuration(); EXTI_ClrITPendBit(EXTI_LINE7); RTC_ConfigCalibOutput(RTC_CALIB_OUTPUT_1HZ); RTC_ConfigOutputType(RTC_OUTPUT_PUSHPULL); RTC_EnableCalibOutput(ENABLE); log_info("\r\n RTC Config end...."); while (1); } 经程序的编译和下载,其显示效果如下图所示。   显示效果图   视频效果: https://bbs.eeworld.com.cn/thread-1305513-1-1.html  

  • 2025-02-10
  • 发表了主题帖: 【MIKROE TFT-PROTO Board测评】信息显示篇

    本帖最后由 jennyzhaojie 于 2025-2-10 00:25 编辑 在完成显示驱动的基础上,提供添加字符库及字符显示函数即可实现信息的显示。 实现字符显示的函数为: void LCD_ShowChar(unsigned int x,unsigned int y,char num,char mode) { char temp; char pos,t; unsigned int x0=x; unsigned int colortemp=POINT_COLOR; num=num-' '; Address_set(x,y,x+8-1,y+16-1); if(!mode) { for(pos=0;pos<16;pos++) { temp=asc2_1608[(unsigned int)num*16+pos]; for(t=0;t<8;t++) { if(temp&0x01) ili9341_draw_pixel(POINT_COLOR, x, y); else ili9341_draw_pixel(BACK_COLOR, x, y); temp>>=1; x++; } x=x0; y++; } } else { for(pos=0;pos<16;pos++) { temp=asc2_1608[(unsigned int)num*16+pos]; for(t=0;t<8;t++) { temp>>=1; } } } POINT_COLOR=colortemp; } 为便于信息的显示,所配置的字符串显示函数为: void LCD_ShowString(unsigned int x,unsigned int y,const char *p) { while(*p!='\0') { LCD_ShowChar(x,y,*p,0); x+=8; p++; } } 为实现数据的显示,所配置的数据显示函数为: void LCD_ShowNum(unsigned int x,unsigned int y,unsigned int num,char len) { char t,temp; char enshow=0; num=(unsigned int)num; for(t=0;t<len;t++) { temp=(num/mypow(10,len-t-1))%10; if(enshow==0&&t<(len-1)) { if(temp==0) { LCD_ShowChar(x+8*t,y,' ',0); continue; } else enshow=1; } LCD_ShowChar(x+8*t,y,temp+48,0); } } 实现图片显示的函数为: void showimage(unsigned int x,unsigned int y) { unsigned int i,j; uint32_t k; k=0; set_cursor(x,y); gram_prepare(); for(i=0;i<320;i++) { for(j=0;j<240;j++) { write_data(gImage_l[k*2]); write_data(gImage_l[k*2+1]); k++; } } } 实现信息显示的测试主程序为: int main(void) { LCD_config(); ili9341_init(); ili9341_clear(RED); POINT_COLOR=WHITE; BACK_COLOR=RED; LCD_DrawLine(0, 40, 239,40); LCD_DrawLine(0, 292, 239,292); showhanzi(45,100,0); LCD_ShowString(20,16,"N32A455"); LCD_ShowString(82,16,"& MIKROE TFT "); LCD_ShowString(20,295,"2025-2-2"); POINT_COLOR=GREEN; LCD_ShowNum(180,16,123,3); while (1); } 经程序的编译和下载,其测试效果如图1和图2所示。     图1测试效果1        图2测试效果2

  • 2025-02-07
  • 回复了主题帖: 【MIKROE TFT-PROTO Board测评】 多屏贺新年的实现

    Jacktang 发表于 2025-2-6 07:33 喜庆,全是福气,,, 大家都福气满满

  • 2025-02-06
  • 回复了主题帖: 【MIKROE TFT-PROTO Board测评】 多屏贺新年的实现

    秦天qintian0303 发表于 2025-2-5 20:42 全都是SPI接口吗?    没错,全SPI !

  • 回复了主题帖: 【新年花灯】时间催人奋进

    秦天qintian0303 发表于 2025-2-5 21:14 这主控用的什么,估计还是有SD开还能多现实点,要不基本上一张全彩就占满了 说的没错,多张图显示绝对要用FLASH 存储器或SD卡,相对讲还是用SD卡合算。

  • 回复了主题帖: 【新年花灯】多屏贺新年

    秦天qintian0303 发表于 2025-2-5 21:09 SPI驱动大屏还是有点费劲的   的确

  • 2025-02-05
  • 发表了主题帖: 【MIKROE TFT-PROTO Board测评】 多屏贺新年的实现

    在探索MIKROE TFT-PROTO Board的使用过程中,参照了其它显示屏的驱动程序,为此掌握了多种显示屏的驱动方法,恰逢春节期间,就将它们组合在一起实现了多屏贺新年的效果。 使用3个显示屏的基本特点是都是以SPI方式工作,显示的分辨率也恰是320*240像素点,这样在准备显示图片和文件数据时提供了极大的便利。 此外,由于显示的图片比较消耗存储空间,故借助了TF卡和在其基础上建立的文件系统来进行存储。 开发板采用的是N32A455开发板,其最小系统如图1所示,其涉及的 TF卡接口如图2所示。              图1 最小系统   图2 TF卡接口   3款显示屏的引脚连接关系如下: 1)绿屏 该显示屏的型号是MI0283QT-9A,其引脚连接关系为: CS   --PE2 MOSI --PE4 CLK  --PE3   BLC  --PE6   2)蓝屏 该显示屏的型号是MDM_2802,其引脚连接关系为: CS   --PE10 MOSI --PE9 CLK  --PE8     3)红屏 该显示屏的控制芯片是ILI9341,其引脚连接关系为: CS   --PE13 MOSI --PE12 CLK  --PE11   DC   --PE14 RST  --PE15   在加挂文件系统的情况下,实现多屏显示函数为: void PHOTO(void) { FATFS FatFs; FIL File; UINT br = 0, bw = 0; FRESULT Result; uint8_t c; uint16_t i,j,k; uint8_t Buffer[200]; memset(Buffer, 0, sizeof(Buffer)); Result = f_mount(&FatFs, "0:", 1); for(k =0; k< 11; k++) { if((k%3)==0) Result = f_open(&File, "0:/a.bin", FA_READ); if((k%3)==1) Result = f_open(&File, "0:/b.bin", FA_READ); if((k%3)==2) Result = f_open(&File, "0:/c.bin", FA_READ); if((k%4)==0) { set_cursor(0x00, 0x0000); gram_prepare(); for(j =0; j< 768; j++) { Result = f_read(&File, Buffer, 200, &br); for(i= 0; i < 100; i++) { c=Buffer[2*i]; write_data(c); c=Buffer[2*i+1]; write_data(c); } } } if((k%4)==1) { set_cursor1(0,0); gram_prepare1(); for(j =0; j< 768; j++) { Result = f_read(&File, Buffer, 200, &br); for(i= 0; i < 100; i++) { c=Buffer[2*i]; write_data1(c); c=Buffer[2*i+1]; write_data1(c); } } } if((k%4)==2) { Address_set(0,0,239,319); for(j =0; j< 768; j++) { Result = f_read(&File, Buffer, 200, &br); for(i= 0; i < 100; i++) { c=Buffer[2*i]; LCD_WR_DATA8(c); c=Buffer[2*i+1]; LCD_WR_DATA8(c); } } } f_close(&File); for(i= 0; i < 100; i++) { delay1(); } } } 实现显示效果的主程序为: int main(void) {   uint32_t testResult = 0;   LCD_config();   MI0283QT_init();   MDM2802_init();   ILI9341_Init();   SD_Init(0, 3, 4);   PHOTO();   while (1); } 经程序的编译和下载,其测试效果如图3所示,说明符合预期要求。 如果在TF卡中存放更多的图片文件,则会显示出更丰富的内容,也会更加地体现出TF卡存储的优越性!   图3测试效果   其实,是开发板上的电源引脚已消耗的差不多了,外加怕开发板上的电源负担过重,原计划是再配上3个I2C接口的OLED屏,以文字动画的方式来发送祝福的话语,进一步烘托节日的氛围,大家就脑补一下算是有了吧,哈哈再一次祝大家春节快乐,吃的好、玩的好,回头赚得收入也更好!

  • 回复了主题帖: 【新年花灯】多屏贺新年

    wangerxian 发表于 2025-2-5 09:29 是山西阳台上的花灯吗~ 可能撞衫了,但确保没上寨,哈哈!

  • 回复了主题帖: 【新年花灯】多屏贺新年

    okhxyyo 发表于 2025-2-5 08:52 看着真不错。有没有原理图和代码分享上来呀 回头分享一下

  • 2025-02-04
  • 发表了主题帖: 【新年花灯】多屏贺新年

    原打算在前面的新年花灯视频基础上再添加些修改,不曾想已经不能再编辑了,只好重发以供新的,希望大家喜欢,并位大家向上新年的祝福! 它式采用一块开发板同时驱动3款不同型号的显示屏,并借助TF卡来存储多幅图片以实现切换的效果,如何将它们嵌到花灯中,就有些类似转动的效果了。 [localvideo]83bf4ad7be3e44c50c6bb0ce0b430d07[/localvideo]  

  • 2025-02-03
  • 回复了主题帖: 【新年花灯】时间催人奋进

    lugl4313820 发表于 2025-2-2 09:25 这个花灯,有点创意!是不是再搞个呼吸灯到页面里。这才有“灯”的创意! 好的,回头再补充一下。

  • 回复了主题帖: 【新年花灯】时间催人奋进

    majip 发表于 2025-2-3 09:11 这个花灯,确实有点创意!是不是再搞个呼吸灯到页面里。这才有“灯”的创意! 好的,后面再整一下作补充。

  • 2025-02-02
  • 回复了主题帖: 【新年花灯】时间催人奋进

    jobszheng5 发表于 2025-2-1 23:51 蛇年快乐 蛇年吉祥

  • 2025-02-01
  • 发表了主题帖: 【新年花灯】时间催人奋进

    新年新气象,新年新起点,时间分秒向前,催人又将踏上新的前行道路。 [localvideo]5267db52a0f28bb931ab8dba6a120983[/localvideo]  

最近访客

< 1/3 >

统计信息

已有73人来访过

  • 芯积分:425
  • 好友:--
  • 主题:53
  • 回复:101

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言