千家信息网

STM8L段码屏驱动原理及例程是怎样的

发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,本篇文章为大家展示了STM8L段码屏驱动原理及例程是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。STM8L段码屏驱动过程如下:一,根据硬件连接查看DA
千家信息网最后更新 2024年11月23日STM8L段码屏驱动原理及例程是怎样的

本篇文章为大家展示了STM8L段码屏驱动原理及例程是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

STM8L段码屏驱动过程如下:

一,根据硬件连接查看DATASHEET设定相关寄存器,即确定了COMx。

二,DATASHEET里COMx对应的RAM地址制作出下表:

LCD段码屏厂家提供的资料填到表格中,操作LCD RAM即可。

三,以下两个例子供参考:

1.

void LCD_showLevel(u8 Chan, u8 Level)
{
u8 i, adr, mask;

barCH1 = Level2Bar[(Level-1)/8+LcdFlashCh2];
barCH2 = Level2Bar[(Level-1)/8+LcdFlashCh3];
if (Chan == 0)
{

for (i=0;i{

LCD->RAM[LCD_Level1[i*2]] |= LCD_Level1[i*2+1];

}

for (;i<10;i++)
{

LCD->RAM[LCD_Level1[i*2]] &= ~(LCD_Level1[i*2+1]);
}

} else
{



for (i=0;i{

LCD->RAM[LCD_Level2[i*2]] |= (LCD_Level2[i*2+1]);
}

for (;i<10;i++)

LCD->RAM[LCD_Level2[i*2]] &= ~(LCD_Level2[i*2+1]);

}
}

2.

void LCD_showNum(u8 Minute)
{
if (Minute == 0)
{
DrawDigit(1,10); //Draw white space in digit 4
DrawDigit(2,11); //Draw "C" in digit 5)
}
else if (Minute < 10)
{ //for minute smaller than 10
DrawDigit(1,10); //Draw white space in digit 4
DrawDigit(2,Minute); //Draw Minute in digit 5
}
else
{ //for minute larger than 10
DrawDigit(1,Minute/10); //Draw minute in digit 4,5
DrawDigit(2,Minute);
}
OFF_TIME;
OFF_MIN;
}

void DrawDigit(u8 loc, u8 value)
{
u8 v, i;

v = DigitSeg[value];

for (i=0;i<7;i++)
{
if (v & 1)
LCD->RAM[Digits[loc][i*2]] |= Digits[loc][i*2+1];
else
LCD->RAM[Digits[loc][i*2]] &= ~Digits[loc][i*2+1];

v = (v >> 1);
}
}

const u8 Digits[][] =
{
{11,64, 8,4, 4,64, 1,4, 1,8, 8,8, 4,128 },
{10,32, 7,2, 3,32, 0,2, 0,1, 7,1, 3,16 },
{10,128, 7,8, 3,128, 0,8, 0,4, 7,4, 3,64 },
};

// 0 1 2 3 4 5 6 7 8 9 " " "C"
u8 DigitSeg[] = { 0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x00, 0x39 };
数组元素奇数为地址,偶数为值,即要显示的那一位。

上述内容就是STM8L段码屏驱动原理及例程是怎样的,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

0