![]() |
發(fā)布時間: 2017-9-10 21:30
正文摘要:我是想讓8個數(shù)碼管同時顯示1到F的連續(xù)變化,即顯示123456789abcdef,可是總是顯示不出來,要不就全亮不顯示,要不就亮第一個或者最后一個。難受,就是寫不出來;勞請大神幫忙;我寫的代碼如圖,共陰數(shù)碼管,鎖存器控 ... |
共陰共陽沒有搞混吧 |
路過看回復(fù) |
GOD丿小男孩 發(fā)表于 2017-9-11 08:40 我是說你的switch語句錯了,需要你自己查一下語法,自己改正,這樣才能真正掌握知識。 |
延時時間控制好試試 |
mengzhixinheng 發(fā)表于 2017-9-11 15:28 !弄懂了之后才看到你這句話的意思,謝謝了 |
ahshmj 發(fā)表于 2017-9-11 21:33 是的,不過是同時依次顯示,問題已經(jīng)解決了,感謝 |
“想讓8個數(shù)碼管同時顯示1到F的連續(xù)變化,即顯示123456789abcdef”, 你敘述的文字看不明白。8個數(shù)碼管,“同時顯示”16個字符? |
mengzhixinheng 發(fā)表于 2017-9-11 20:50 后面那個又加了一個for語句的確實(shí)可以了,謝謝大神,我想想是為什么,萬分感謝 |
mengzhixinheng 發(fā)表于 2017-9-11 20:41 確實(shí)不行,出來的結(jié)果是最后一個燈正常,其他的燈一閃而過,然而我把最后的延時函數(shù)去掉之后,就正常了,每個燈顯示的數(shù)字一樣,同步變化,但是速度太快,不美觀,于是我把加在table后面的延時函數(shù)變成30,于是又不正常了,燈不同時亮 |
端口你自己改就行 |
這個還有問題的話就見鬼了 |
#include<reg51.h> #define uint unsigned int #define uchar unsigned char sbit A1=P1^2; sbit B1=P1^3; sbit C1=P1^4; unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void delayms(uchar x) { uint i,j; for(i=x;i>0;i--) for(j=120;j>0;j--); } void display() { uchar X,Y; for(X=0;X<16;X++) for(Y=0;Y<100;Y++) { A1=0;B1=0;C1=0;P2=table[X];delayms(3); A1=0;B1=0;C1=1;P2=table[X];delayms(3); A1=0;B1=1;C1=0;P2=table[X];delayms(3); A1=0;B1=1;C1=1;P2=table[X];delayms(3); A1=1;B1=0;C1=0;P2=table[X];delayms(3); A1=1;B1=0;C1=1;P2=table[X];delayms(3); A1=1;B1=1;C1=0;P2=table[X];delayms(3); A1=1;B1=1;C1=1;P2=table[X];delayms(3); } } void main() { while(1) { display(); } } |
參與人數(shù) 2 | 黑幣 +60 | 收起 理由 |
---|---|---|
![]() | + 10 | 很給力! |
![]() | + 50 | 回帖助人的獎勵! |
#include<reg51.h> #define uint unsigned int #define uchar unsigned char sbit A1=P1^2; sbit B1=P1^3; sbit C1=P1^4; unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; void delayms(uchar x) { uint i,j; for(i=x;i>0;i--) for(j=120;j>0;j--); } void display() { uchar X; for(X=0;X<16;X++) { A1=0;B1=0;C1=0;P2=table[X];delayms(3); A1=0;B1=0;C1=1;P2=table[X];delayms(3); A1=0;B1=1;C1=0;P2=table[X];delayms(3); A1=0;B1=1;C1=1;P2=table[X];delayms(3); A1=1;B1=0;C1=0;P2=table[X];delayms(3); A1=1;B1=0;C1=1;P2=table[X];delayms(3); A1=1;B1=1;C1=0;P2=table[X];delayms(3); A1=1;B1=1;C1=1;P2=table[X];delayms(3); delayms(2000); } } void main() { while(1) { display(); } } |
GOD丿小男孩 發(fā)表于 2017-9-11 17:17 不可能 |
看一下這個芯片的詳細(xì)介紹 |
mengzhixinheng 發(fā)表于 2017-9-11 15:28 但那樣還是沒用啊 |
gaozhaohong 發(fā)表于 2017-9-11 15:19 謝謝,大家互相幫助,互相進(jìn)步。沒有誰是一步登天的,都是慢慢來的 |
漫步經(jīng)心 發(fā)表于 2017-9-11 14:00 發(fā)下面了,謝謝 |
SWITCH語句沒必要,在每個數(shù)碼管顯示后都必須加延時(自己調(diào)試一個合適的時間很簡單)如果你用for語句,那么你X的變化的延時最好也用FOR。如:for(){for(決定X的變化速度){}} |
參與人數(shù) 1 | 黑幣 +20 | 收起 理由 |
---|---|---|
![]() | + 20 | 回帖助人的獎勵! |
硬件電路發(fā)出來看看唄 |
不倒翁.WZT 發(fā)表于 2017-9-11 06:59 額,最大的問題是我這個是由138譯碼器控制數(shù)碼管亮的,也就是說不能控制全亮。必須通過循環(huán)控制每一個亮,然而這樣的話時間必須足夠小人眼才能分辨不出來。 |
學(xué)習(xí)了,謝謝 |
gaochang000000 發(fā)表于 2017-9-11 02:05 是控制哪個數(shù)碼管亮,我這個數(shù)碼管是由138譯碼器控制的,就是由p22,p23,p24三個管腳控制 |
闊愛的釗釗 發(fā)表于 2017-9-10 23:49 嗯,完整的,switch中是控制哪個數(shù)碼管亮,table是控制顯示什么 |
yzwzfyz 發(fā)表于 2017-9-10 23:12 ?什么意思呢 |
本帖最后由 zl2168 于 2017-9-11 21:47 編輯 關(guān)鍵是要弄清動態(tài)顯示的基本原理,弄清后,你要怎么顯示就怎么顯示。盲目實(shí)踐,事倍功半。 給你介紹2本書,張志良編著的:《80C51單片機(jī)實(shí)用教程——基于Keil C和Proteus》高等教育出版社ISBN 978-7-04-044532-9, 用于學(xué)習(xí)51單片機(jī)原理,程序(雙解c和匯編)語句條條有注解,便于閱讀理解,便于自學(xué)!80C51單片機(jī)仿真設(shè)計(jì)實(shí)例教程——基于Keil C和Proteus》清華大學(xué)出版社ISBN 978-7-302-41682-1,內(nèi)有常用的單片機(jī)應(yīng)用100案例,用于仿真實(shí)驗(yàn)操作,電路與程序真實(shí)可靠可信可行,可演示,可觀測,程序語句條條有注解。 與其他書比較一下,有比較才能有鑒別!絕不忽悠你! 其中,有7個案例是動態(tài)顯示: 實(shí)例56 PNP晶體管選通3位共陽LED數(shù)碼管動態(tài)顯示; 實(shí)例57 74LS139選通4位LED數(shù)碼管動態(tài)顯示; ![]() ![]() 實(shí)例58 74LS138選通8位LED數(shù)碼管動態(tài)顯示; ![]() ![]() 實(shí)例59 74LS595串行選通8位LED數(shù)碼管動態(tài)顯示; 實(shí)例60 8255A擴(kuò)展8位LED數(shù)碼管動態(tài)顯示; 實(shí)例63 8155擴(kuò)展8位LED數(shù)碼管動態(tài)顯示; 實(shí)例64 MAX7221控制8位LED數(shù)碼管動態(tài)顯示。 ![]() ![]() ![]() ![]() ![]() ![]() |
學(xué)習(xí)不能閉門造車,應(yīng)借鑒他人成功的例子。找來一個類似的程序,將其看懂,再試探著進(jìn)行修改,當(dāng)你修改成功了,類似的程序你也都懂了。下面給你一個你需要的成功的程序,請參考。 /*--頭文件--*/ #include<reg51.h> //包含特殊功能寄存器頭文件 /*--宏定義--*/ #define uint unsigned int //定義uint=unsigned int #define uchar unsigned char //定義uchar=unsigned char /*--定義全局變量--*/ uint code Table_P0[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07}; //段碼表0-7 uint code Table_P0AF[]={0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //段碼表8-F /*--延時子程序*/ void delay(uint xms) //延時子程序 { uint i,j; //設(shè)定i、j為無符號16位整型數(shù)據(jù) for(i=xms; i>0; i--) //第一級延時循環(huán) for(j=110; j>0; j--); //第二級延時循環(huán) } /*--主程序*/ void main(void) //主函數(shù),一個程序中必須有一個且只能有一個主程序。這是一個無返回值無參數(shù)函數(shù) { while(1) //大循環(huán),沒有這個大循環(huán)程序只運(yùn)行一次就停止了 { uchar i,j; //設(shè)定i為無符號8位字符型數(shù)據(jù) for(i=0; i<8; i++) //選擇段碼值 { P1=0x00; //將8位數(shù)碼管全顯示數(shù)據(jù)送位選-P1 P0=Table_P0[i]; //根據(jù)for選擇段碼i值,送段選-P0 delay(800); //調(diào)用延時子程序 } for(j=0; j<8; j++) //選擇段碼值 { P0=Table_P0AF[j]; //根據(jù)for選擇段碼i值,送段選-P0 delay(800); //調(diào)用延時子程序 } } } |
參與人數(shù) 1 | 黑幣 +20 | 收起 理由 |
---|---|---|
![]() | + 20 | 回帖助人的獎勵! |
額。。。。代碼是完整的嗎? |
換個專業(yè)試試 |
Powered by 單片機(jī)教程網(wǎng)