本篇文章為大家展示了STM8L段碼屏驅(qū)動原理及例程是怎樣的,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
創(chuàng)新互聯(lián)公司是一家朝氣蓬勃的網(wǎng)站建設公司。公司專注于為企業(yè)提供信息化建設解決方案。從事網(wǎng)站開發(fā),網(wǎng)站制作,網(wǎng)站設計,網(wǎng)站模板,微信公眾號開發(fā),軟件開發(fā),微信小程序,10多年建站對人造霧等多個方面,擁有豐富的網(wǎng)站制作經(jīng)驗。
STM8L段碼屏驅(qū)動過程如下:
一,根據(jù)硬件連接查看DATASHEET設定相關(guān)寄存器,即確定了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 };
數(shù)組元素奇數(shù)為地址,偶數(shù)為值,即要顯示的那一位。
上述內(nèi)容就是STM8L段碼屏驅(qū)動原理及例程是怎樣的,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。