十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
本篇文章为大家展示了STM8L段码屏驱动原理及例程是怎样的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
创新互联公司是一家朝气蓬勃的网站建设公司。公司专注于为企业提供信息化建设解决方案。从事网站开发,网站制作,网站设计,网站模板,微信公众号开发,软件开发,微信小程序,10多年建站对人造雾等多个方面,拥有丰富的网站制作经验。
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%10);
}
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段码屏驱动原理及例程是怎样的,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注创新互联行业资讯频道。