當(dāng)前位置:首頁 > 技術(shù)學(xué)院 > 熱搜器件
[導(dǎo)讀]8位數(shù)碼管顯示函數(shù)(使用74hc573鎖存器)。

仿真效果截圖:

部分源代碼:

/************************************************\

* 8位共陽數(shù)碼管顯示函數(shù)(使用74hc573鎖存器) *

* 力求程序高效,簡潔 *

\************************************************/

/************************************************\

* 分多個函數(shù)的原因: *

* 顯示要求不同,函數(shù)的執(zhí)行效率不同 *

* 為了實(shí)現(xiàn)程序的高效性,顯示要求不同調(diào)用不同的函數(shù)*

\************************************************/

#include

#define DISPLAY_IO P2

#define uchar unsigned char

#define uint unsigned int

#define ulong unsigned long

sbit duan=P3^0; //定義段

sbit wei=P3^1; //定義位

unsigned char code w[]={ //共陰

//0-F無小數(shù)點(diǎn)

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71,

//0-F帶小數(shù)點(diǎn)

0xbf,0x86,0xdb,0xcf,

0xe6,0xed,0xfd,0x87,

0xff,0xef,0xf7,0xfc,

0xb9,0xde,0xf9,0xf1,

//小數(shù)點(diǎn) 負(fù)號

0x80, 0x40};

/************************************************\

* 顯示任意內(nèi)容 *

* n[0-7]數(shù)組的值表示數(shù)碼管位置從左至右的內(nèi)容 *

\************************************************/

void display_any(uchar n[8])

{

uchar i,delay=0;

for(i=0;i<8;i++)

{

//清除段鎖存器內(nèi)容

DISPLAY_IO=0xff;

duan=1;

duan=0;

//位值送入位鎖存器

DISPLAY_IO=0x01<

wei=1;

wei=0;

//段值送入段鎖存器

DISPLAY_IO=0xff-n[i];

duan=1;

duan=0;

//延時0-255(越長越亮,但太長會閃)

delay=100;

while(delay--);

}

//清除段鎖存器內(nèi)容 不讓第一個數(shù)最亮

DISPLAY_IO=0xff;

duan=1;

duan=0;

}

/************************************************\

* 10進(jìn)制無符號整數(shù)顯示 *

* 傳入n為0到9999 9999 *

* 傳入浮點(diǎn)型小數(shù)點(diǎn)后忽略,范圍不正確顯示不正確 *

* 右對齊,左邊無多余0 *

\************************************************/

void display_ulong(ulong n)

{

uchar i=8,delay=0;

do

{

//清除段鎖存器內(nèi)容

DISPLAY_IO=0xff;

duan=1;

duan=0;

//位值送入位鎖存器

DISPLAY_IO=0x01<<(--i);

wei=1;

wei=0;

//段值送入段鎖存器

DISPLAY_IO=0xff-w[n%10];

duan=1;

duan=0;

n/=10;

//延時0-255(越長越亮,但太長會閃)

delay=100;

while(delay--);

}while(n>0);

//清除段鎖存器內(nèi)容 不讓第一個數(shù)最亮

DISPLAY_IO=0xff;

duan=1;

duan=0;

}

/************************************************\

* 10進(jìn)制有符號整數(shù)顯示 *

* 傳入n為-999 9999到9999 9999 *

* 傳入浮點(diǎn)型小數(shù)點(diǎn)后忽略,范圍不正確顯示不正確 *

* 右對齊,左邊無多余0 *

\************************************************/

void display_long(long n)

{

uchar i=8,delay=0;

bit flag=0;

if(n<0)

{

flag=1;

n=-n;

}

do

{

//清除段鎖存器內(nèi)容

DISPLAY_IO=0xff;

duan=1;

duan=0;

//位值送入位鎖存器

DISPLAY_IO=0x01<<(--i);

wei=1;

wei=0;

//段值送入段鎖存器

DISPLAY_IO=0xff-w[(n==100000000?33:n%10)];

duan=1;

duan=0;

n/=10;

if(n==10000000)

n=-1;

if(n==0&&flag==1)

n=100000000;

//延時0-255(越長越亮,但太長會閃)

delay=100;

while(delay--);

}while(n>0);

//清除段鎖存器內(nèi)容 不讓第一個數(shù)最亮

DISPLAY_IO=0xff;

duan=1;

duan=0;

}

/************************************************\

* 10進(jìn)制無符號實(shí)型顯示 *

* 傳入n為0到9999 9800 *

* 傳入范圍不正確顯示不正確 *

* 右對齊,左邊無多余0,右邊小數(shù)點(diǎn)后無多余0 *

\************************************************/

void display_udouble(double n)

{

uchar i=8,delay=0,point_position=0;

ulong n_long=n; //將n賦值給整形變量

while(n_long!=n) //此循環(huán)的功能:使n變?yōu)?位整數(shù),并記下小數(shù)點(diǎn)位置

{

n*=10;

n_long=n;

point_position++;//每乘一次,小數(shù)點(diǎn)左移一位

}

do

{

//清除段鎖存器內(nèi)容

DISPLAY_IO=0xff;

duan=1;

duan=0;

//位值送入位鎖存器

DISPLAY_IO=0x01<<(--i);

wei=1;

wei=0;

//段值送入段鎖存器

DISPLAY_IO=0xff-w[n_long%10+((7-i)==point_position?16:0)];

duan=1;

duan=0;

n_long/=10;

//延時0-255(越長越亮,但太長會閃)

delay=100;

while(delay--);

}while(n_long>0);

//清除段鎖存器內(nèi)容 不讓第一個數(shù)最亮

DISPLAY_IO=0xff;

duan=1;

duan=0;

}

/************************************************\

* 10進(jìn)制有符號實(shí)型顯示 *

* 傳入n為-999 999到9999 9800 *

* 傳入范圍不正確顯示不正確 *

* 右對齊,左邊無多余0,右邊小數(shù)點(diǎn)后無多余0 *

\************************************************/

void display_double(double n)

{

uchar i=8,delay=0,point_position=0;

bit flag=0;

long n_long=n; //將n賦值給整形變量

while(n_long!=n) //此循環(huán)的功能:使n變?yōu)?位整數(shù),并記下小數(shù)點(diǎn)位置

{

n*=10;

n_long=n;

point_position++;//每乘一次,小數(shù)點(diǎn)左移一位

}

if(n_long<0)

{

flag=1;

n_long=-n_long;

}

do

{

//清除段鎖存器內(nèi)容

DISPLAY_IO=0xff;

duan=1;

duan=0;

//位值送入位鎖存器

DISPLAY_IO=0x01<<(--i);

wei=1;

wei=0;

//段值送入段鎖存器

DISPLAY_IO=0xff-w[(n_long==100000000?33:(n_long%10+((7-i)==point_position?16:0)))];

duan=1;

duan=0;

n_long/=10;

if(n_long==10000000)

n_long=-1;

if(n_long==0&&flag==1)

n_long=100000000;

//延時0-255(越長越亮,但太長會閃)

delay=100;

while(delay--);

}while(n_long>0);

//清除段鎖存器內(nèi)容 不讓第一個數(shù)最亮

DISPLAY_IO=0xff;

duan=1;

duan=0;

}

/************************************************\

* 2-16任意進(jìn)制無符號不去零整數(shù)顯示 *

* 傳入n為0到X,X=((進(jìn)制)^8)-1 *

* 傳入范圍不正確顯示不正確 *

* 不自動去0 *

\************************************************/

void display_number(ulong n,uchar jin_zhi)

{

uchar i,delay=0;

for(i=0;i<8;i++)

{

//清除段鎖存器內(nèi)容

DISPLAY_IO=0xff;

duan=1;

duan=0;

//位值送入位鎖存器

DISPLAY_IO=0x01<<(7-i);

wei=1;

wei=0;

//段值送入段鎖存器

DISPLAY_IO=0xff-w[n%jin_zhi];

duan=1;

duan=0;

n/=jin_zhi;

//延時0-255(越長越亮,但太長會閃)

delay=100;

while(delay--);

}

//清除段鎖存器內(nèi)容 不讓第一個數(shù)最亮

DISPLAY_IO=0xff;

duan=1;

duan=0;

}

/************************\

* 8位數(shù)碼管測試程序 *

\************************/

void main(void)

{

uint i,t=200;

char n[8]={1,2,4,8,16,32,64,128};

while(1)

{

i=t;

while(i--)

{

display_any(n);

}

i=t;

while(i--)

{

display_ulong(123);

}

i=t;

while(i--)

{

display_long(-123);

}

i=t;

while(i--)

{

display_udouble(123.45);

}

i=t;

while(i--)

{

display_double(-123.45);

}

i=t;

while(i--)

{

display_number(0x123abc,16);

}

}

}

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉