板载LCD可以显示8个位加数点。本示例展示如何在某个位显示出数字。
新建lcd.h与lcd.h,并把文件导入到工程:
LCD中编写了数据0-F以及字符L、H、-三字符的编码,并分为高低两个数组,代码如下:
/* 段码低8(左) */
static const uint8_t num_L[19] = {
0x0d, //0
0x00, //1
0x0e, //2
0x0a, //3
0x03, //4
0x0b, //5
0x0f, //6
0x00, //7
0x0f, //8
0x0b, //9
0x07, //A
0x0f, //b
0x0d, //C
0x0e, //d
0x0f, //E
0x07, //F
0x07, //H
0x0d, //L
0x02, //-
};
/* 段码高8(右) */
static const uint8_t num_H[19] = {
0x07,
0x06,
0x03,
0x07,//3
0x06,//4
0x05, //5
0x05, //
0x07, //7
0x07, //8
0x07, //9
0x07, //A
0x04, //B
0x01, //C
0x06, //d
0x01, //e
0x01, //f
0x06, //H
0x00, //L
0x00, //-
};
编写显示函数,主要传入参数为需要显示的位置,以及显示的字符的序号:
/*
*函数功能:在指定的段码屏位置上显示指定序号的字符
*参数wei:指定需要显示的位
*参数num:需要显示的序号。
*/
void show_string(uint8_t wei, uint8_t num)
{
if(wei>7 || num > sizeof(num_H))
{
return;
}
switch(wei)
{
case 7:
{
//显示第7个数码管
CW_LCD->RAM[0] |= num_H[num]<<8 | num_L[num];
break;
}
case 6:
{
//显示第6个数码管
CW_LCD->RAM[0] |= (num_H[num]<<8 | num_L[num]) <<16;
break;
}
case 5:
{
//显示第5个数码管
CW_LCD->RAM[1] |= num_H[num]<<8 | num_L[num];
break;
}
case 4:
{
//显示第4个数码管
CW_LCD->RAM[1] |= (num_H[num]<<8 | num_L[num]) <<16;
break;
}
case 3:
{
//显示第3个数码管
CW_LCD->RAM[2] |= num_H[num]<<8 | num_L[num];
break;
}
case 2:
{
//显示第2个数码管
CW_LCD->RAM[3] |= (num_H[num]<<8);
CW_LCD->RAM[2] |= (num_L[num]<<16);
break;
}
case 1:
{
//显示第1个数码管
CW_LCD->RAM[3] |= num_H[num]<<24 | num_L[num]<<16;
break;
}
case 0:
{
//显示第0个数码管
CW_LCD->RAM[4] |= (num_H[num]<<8 | num_L[num]);
break;
}
}
}
编写主函数测试如下:
int32_t main(void)
{
int i;
//配置RCC
RCC_Configuration();
InitTick( 24000000 ); //24000000
//配置GPIO
GPIO_Configuration();
/* NVIC Configuration */
NVIC_Configuration();
RCC_LSI_Enable(); // 启动LSI为LCD提供时钟
LCD_Configuration();
gKey1Status = 0;
gKey2Status = 0;
while(1)
{
lcd_clear_all();
for(i=0; i<8; i++)
{
show_string(i,i);
SysTickDelay(1000);
//200ms.
}
}
}
显示效果详见视频。
文章评论(0条评论)
登录后参与讨论