數碼管消隱

2022-03-31 08:44:32 字數 1278 閱讀 2571

按照我的開發板,共陰極數碼管共8個,也就是說,只能顯示8位數字,0-99999999,當顯示的數字不足8位時,需要將不顯示的數碼管熄滅即消隱,**原理就是將儲存顯示值的陣列變數中,不顯示的位在p1口輸出0(熄滅),以下顯示0-9999四位有效數字為例,從第2位數碼管開始,顯示最多4位有效數字:

#include

sbit latch1=p2^2;//段鎖存

sbit latch2=p2^3;//位鎖存

unsigned char code duanma[10]=;// 顯示段碼值0~9

unsigned char code weima=;//分別對應相應的數碼管點亮,即位碼

unsigned char tempdata[8]; //儲存顯示值的全域性變數

void delay(unsigned int t); //函式宣告

void display(unsigned char firstbit,unsigned char num);

main()

if(num<1000) //如果小於1000則千位不顯示

tempdata[0]=0;

else

tempdata[0]=duanma[num/1000]; //顯示千位

if(num<100) //如果小於100則百位也不顯示

tempdata[1]=0;

else

tempdata[1]=duanma[(num%1000)/100];// 顯示百位

if(num<10) //如果小於10則十位都不顯示

tempdata[2]=0;

else

tempdata[2]=duanma[((num%1000)%100)/10];// 顯示十位

tempdata[3]=duanma[((num%1000)%100)%10]; // 顯示個位

display(2,4);}}

void delay(unsigned int t)

void display(unsigned char firstbit,unsigned char num)

{unsigned char i;

for(i=0;ip1=weima[i+firstbit]; //取位碼

latch2=1; //位鎖存

latch2=0;

p1=tempdata[i]; //取顯示資料,段碼

latch1=1; //段鎖存

latch1=0;

delay(200); // 掃瞄間隙延時,時間太長會閃爍,太短會造成重影

數碼管遞加遞減帶消隱

include reg52.h 包含標頭檔案,一般情況不需要改動,標頭檔案包含特殊功能暫存器的定義 define dataport p0 定義資料埠 程式中遇到dataport 則用p0 替換 sbit latch1 p2 2 定義鎖存使能埠 段鎖存 sbit latch2 p2 3 位鎖存 uns...

微控制器數碼管消隱及中斷

在數碼管動態顯示過程中,主要是在數碼管位選和段選產生的瞬態造成的。數碼管的不應該亮的地方有點微微發亮,這種現象就是 鬼隱 利用延時函式,使得數碼管該亮的地方亮的時間久一點,那麼不該亮的地方就不會再亮了。關閉段 在改變值之前,使數碼管全部熄滅。關閉位 關閉數碼管的位,等到賦值過程都做好了後,再重新開啟...

數碼管高位消0

部分程式 while 1 將剩餘的有效數字位如實轉換 for j 0 j for 起始未對j操作,j即保持上個迴圈結束時的值 舉例 當sec 001025 時,buff 5 0,for裡面的if判斷為真,ledbuff 5 0xff 高位第乙個0不顯示,buff 4 0,if再次判斷為真,ledbu...