在使用0.96 oled顯示屏的時候,我發現顯示數字是乙個大問題,特別是關於顯示浮點型資料,自己折騰了一番,目前雖然浮點型顯示上還有不小的問題,但可以滿足最低級別的需求。
首先宣告,本文中使用的程式是在正點原子 alientek戰艦stm32開發板v3**為基礎進行的修改,感謝原子哥!
遺留的問題會在後面羅列,希望路過的大佬多多指教。
先把原子哥的**貼出來
//顯示2個數字
//x,y :起點座標
//len :數字的位數
//size:字型大小
//mode:模式 0,填充模式;1,疊加模式
//num:數值(0~4294967295);
void
oled_shownumber
(u8 x,u8 y,u16 num,u8 len,u8 size2)
else enshow=1;
}oled_showchar
(x+(size2/2)
*t,y,temp+
'0',size2);}
}
原子哥的**是用來顯示正的整型資料的,同時還需要輸入整型資料的位數,個人比較懶,所以在原子哥**的基礎上做了一些更改,使得它可以顯示正負整數,同時不需要手動輸入整型資料的位數,需要手動輸入的資料更少,操作更方便。
話不多說,直接上**
/*
描述:顯示整數(可顯示正負數)(-65535~65535)
輸入: x:顯示的x起始位置
y:顯示的y起始位置
num:要顯示的數字
char_size:要顯示數字的大小
*/void
oled_showintegernumber
(u8 x,u8 y,
int num,u8 char_size)
if(num>0)
oled_shownumber
(x,y,num,len,char_size)
;else
}
上面我個人的**和原子哥的**合併(使用上面**時,仍需要原子個哥的**),由於我上面重複呼叫了三次原子哥的**,如果合併到一起,雖然子函式少了乙個,但**占用空間會變大
關於浮點型資料是真的很頭疼,直接上自己的**
/*
描述:顯示浮點數(可顯示正負數)(-65535~65535)
輸入: x:顯示的x起始位置
y:顯示的y起始位置
num:要顯示的數字
char_size:要顯示數字的大小
侷限:目前只能顯示確定範圍的小數,且小數部分顯示不準確
*/void
oled_showfloatnumber
(u8 x,u8 y,
float num,u8 char_size)
zheng=
(int
)num;
xiao=
((num-zheng)
*100)/
1;//顯示小數點後兩位
while
(zheng)
//計算整數部分位數
xiao_len=2;
zheng=
(int
)num;
//在計算整數部分數值時,原賦值被篡改,這裡重新賦值
if(polarity_flag)
else
}else
else
}}
浮點型資料的顯示思路是把浮點型資料分離成整數部分和小數部分的整數形式,但是在實際操作過程中,好像是因為 float型別 自身的數值顯示問題,很多時候會對小數點後的資料帶來誤差
1.浮點型資料顯示時只能顯示小數點後的固定幾位,雖然可以在程式裡更改選定顯示的具體位數,但很不舒服
2.浮點型資料在輸入時,小數部分總會出現一些偏差,如:
在使用 stm32c8t6 進行硬體**的時候,實際**為float a;a=63.2;
但**時,在對資料進行賦值時,a的資料值被賦值為63.2000008,這就給上面**的輸入帶來問題,影響最終顯示。
Winform多顯示屏顯示
一台主機連線了2臺顯示器 2個顯示卡 要求乙個程式的兩個窗體在不同的顯示器上顯示 顯示器1 顯示from1,顯示器2 顯示from2。及說明如下 form1不需要變更 from2新增如下 方法一 from2 frm2 new from2 if screen.allscreens.count 1 方法...
筆記 顯示屏LCD
之前有個屏廠家講過背光液晶屏的原理,液晶是特殊狀態。可能不太記得講了什麼,也沒留下ppt,遺憾。後來有一樣機,裝過,觸控螢幕是薄薄一層,下面是顯示屏,從物理上是分離的。這次從網上收集資料,先學習一下顯示屏是什麼。現在,pc顯示屏已經有led 發光方式 屏了。但是貌似手機都是lcd 背光方式 lcd ...
顯示屏相關知識
fhd full high definition,全高畫質,解析度 1920 x 1080,俗稱1080p uhd ultra high definition,超高清,解析度達到3840 x 2160及以上的顯示 qfhd quad full high definition,四角全高畫質 2k 20...