这几年蓝桥杯比赛比较适合学生技能学习,考虑板子功能,提出完成的任务。
要求在液晶完成如下图效果:
主要是实现液晶显示时钟和数字时钟,具体样式可以依据实际情况微调。
实现过程:
1.需要画圆(外圆、内圆)
画圆比较简单,蓝桥杯中的例程有相应的函数。
LCD_DrawCircle(105, 160, 100); //外圆
LCD_DrawCircle(105,160,95); //内圆
可以发现两行代码即可以搞定。只是需要你算出圆的中心点坐标。
2.然后在对应的地方表数字
数字也不难,只需要算好指定位置输入数字即可。
LCD_DisplayChar(15, 175, (u8)49); //ASCII码-1(12)
LCD_DisplayChar(15, 165, (u8)50); //ASCII码-2(12)
LCD_DisplayChar(95, 250, (u8)57); //ASCII码-9
LCD_DisplayChar(175, 167, (u8)54); //ASCII码-6
LCD_DisplayChar(97, 82, (u8)51); //ASCII码-3
LCD_DisplayChar(25, 125, (u8)49); //ASCII码-1
LCD_DisplayChar(55, 95, (u8)50); //ASCII码-2
LCD_DisplayChar(140, 95, (u8)52); //ASCII码-4
LCD_DisplayChar(168, 125, (u8)53); //ASCII码-5
LCD_DisplayChar(168, 210, (u8)55); //ASCII码-7
LCD_DisplayChar(140, 240, (u8)56); //ASCII码-8
LCD_DisplayChar(55, 240, (u8)49); //ASCII码-1(10)
LCD_DisplayChar(55, 230, (u8)48); //ASCII码-0(10)
LCD_DisplayChar(25, 210, (u8)49); //ASCII码-1(11)
LCD_DisplayChar(25, 200, (u8)49); //ASCII码-1(11)
如何算出数字所在的位置,其实不难,因为数据在圆上是有规律的,只需要知道圆中心点坐标,和圆的半径,其他圆边缘的任何位置,都可以通过公式计算得出,比如,圆上的12数字坐标大概位置和2点的位置计算如下:
3.计算时分秒的针
这个相对是比较复杂的地方,因为时分秒的针是实时变化的,而且是一个线段,需要不停的变化,这是就需要思考如何实现。板子中的案例代码是有画线的样例的,但不能实现时分秒操作。
时分秒针子长度不一,不是难点,难点是要优化画线的代码。这里的画线代码如下:
void LCD_DrawLine_1(float Xstart, float Ystart, float Xend, float Yend,float x)
{
while(1)
{
LCD_SetCursor(Xstart, Ystart);
LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
LCD_WriteRAM(TextColor);
Xstart -=(float)0.1;
Ystart -=x;
if(Xstart <= Xend)
{
break;
}
}
}
void LCD_clearLine_1(float Xstart, float Ystart, float Xend, float Yend,float x)
{
while(1)
{
LCD_SetCursor(Xstart, Ystart);
LCD_WriteRAM_Prepare(); /* Prepare to write GRAM */
LCD_WriteRAM(White);
Xstart -=(float)0.1;
Ystart -=x;
if(Xstart <= Xend)
{
break;
}
}
}
代码中可以发现,输入参数由整型修改成的浮点型,目的是为在画线时像素点密一点,另外还增加了,线画到的终点坐标,还需要增加float x的值,这个怎么来的?和之前的计算方式一样,计算出终点坐标,让后将其分成若干等份,x相当于每等份的值。
时间通过RTC实现,也比较简单。
实现效果如下:
代码链接:
【蓝桥杯最新板】蓝桥杯嵌入式液晶上实现电子时钟资源-CSDN文库
吾芯电子