本帖最后由 eltonchang2001 于 2022-11-9 14:06 编辑
ESK32-30519开发板上配有数码管显示块,见图1所示,利用中间的D1和D2笔段可以标识时间的内容。
图1 数码管
通常的情况下,其内部是图2的形式进行连接,
图2 内部连接
但由于缺少具体的介绍,但凭图3的原理图没能得到电路中间分割符的目的。
图3 原理图
为此,就使用MDM2802屏完成了一个图4所示的电子时钟显示效果。
图4 显示效果
在该显示效果中,用到了一个时钟的显示图标,该显示图标的尺寸为80*80像素点,其显示函数为: void showimage(void)
{
int i,j;
set_cursor(10,120);
gram_prepare();
for(j=0;j<80;j++)
{
set_cursor(10,120+j);
gram_prepare();
for(i=0;i<80;i++)
{
write_data(gImage_rtc[(j*80+i)*2]);
write_data(gImage_rtc[(j*80+i)*2+1]);
}
}
}
此外为了时钟的显示,对时钟显示函数进行了修改,修改后的内容为: void Time_Display(u32 wTimeVar)
{
u32 THH = 0, TMM = 0, TSS = 0;
u8 c;
wTimeVar %= 86400;
THH = wTimeVar/3600;
TMM = (wTimeVar % 3600)/60;
TSS = (wTimeVar % 3600)% 60;
c='0'+THH/10;
GUI_DispChar(c, 120,150);
c='0'+THH%10;
GUI_DispChar(c, 130,150);
c='0'+TMM/10;
GUI_DispChar(c, 150,150);
c='0'+TMM%10;
GUI_DispChar(c, 160,150);
c='0'+TSS/10;
GUI_DispChar(c, 180,150);c='0'+TSS%10;
GUI_DispChar(c, 190,150);
}
为得到图5所示的计时效果,其主程序为: int main(void)
{
CKCU_PeripClockConfig_TypeDef CKCUClock = {{0}};
CKCUClock.Bit.BKP = 1;
CKCU_PeripClockConfig(CKCUClock, ENABLE);
#if (!LIBCFG_NO_PWRCU_TEST_REG)
if (PWRCU_CheckReadyAccessed() != PWRCU_OK)
{
while (1);
}
#endif
HT32F_DVB_LEDInit(HT_LED1);
RETARGET_Configuration();
NVIC_EnableIRQ(RTC_IRQn);
RTC_Configuration();
TimeReg = Time_Regulate();
RTC_Cmd(ENABLE);
app_tft_init();
ili9341_init();
ili9341_clear(RED);
LCD_DrawLine(WHITE ,0, 50, 239, 50);
LCD_DrawLine(WHITE,0, 290, 239, 290);
BACK_COLOR=RED;
POINT_COLOR=YELLOW;
showimage();
GUI_DispChar('R', 80,20);
GUI_DispChar('T', 90,20);
GUI_DispChar('C', 100,20);
showhanzi16(115,16,0,RED,WHITE);
showhanzi16(135,16,1,RED,WHITE);
showhanzi16(155,16,2,RED,WHITE);
showhanzi16(175,16,3,RED,WHITE);
GUI_DispChar(':', 140,150);
GUI_DispChar(':', 170,150);
LCD_ShowString(60,294,"BY: jinglixixi");
while (1)
{
if (gwTimeDisplay == 1)
{
Time_Display(RTC_GetCounter() + TimeReg);
gwTimeDisplay = 0;
}
}
}
图5 计时效果
|