![]() |
發布時間: 2016-6-17 18:51
正文摘要:小白制作個數字溫度計,4位共陽數碼管,位選p0.1 2 3 4,段選p2,ds18b20測溫,接p3.7,用下面程序運行后第二三四位數碼管顯示正確,就是第一位數碼管顯示不對,求大神修改#include"reg51.h" #define uchar uns ... |
按下面試一試(省略號的內容自己加上): P2=table[temp/100]; //顯示百位 delay1(5); wx1=1; wx2=0; P2=table[temp%100/10]; //顯示十位 ...... ...... P2=table[temp%10]; //顯示個位 ...... ...... P2=table[temp/10]+0x80; /加上0x80就顯示小數點了。 |
461534727 發表于 2016-6-18 15:10 我的只有接電阻,芯片為STC12C5204,設置為推挽輸出 |
geminiguy_07 發表于 2016-6-18 14:06 我的電路沒用鎖存,就用了pnp驅動三極管而已 |
461534727 發表于 2016-6-18 13:24 那可能是我倆的硬件電路不一樣 我的是單片機直接接數碼管,不用連鎖存器 |
geminiguy_07 發表于 2016-6-18 10:47 void wenduxianshi(unsigned int temp) { unsigned char buf[4]; unsigned char i; for(i=0;i<4;i++) //i=0 個位 { buf = temp % 10; temp /= 10; } if(buf[3] == 0) { if(buf[2] == 0) { if(buf[1] == 0) { wx1=0; P2=table[buf[0]]; delay1(8); } else { wx2=0; P2=table[buf[1]]; delay1(4); wx1=0; P2=table[buf[0]]; delay1(4); } } else { wx3=0; P2=table[buf[2]]; delay1(2); wx2=0; P2=table[buf[1]]; delay1(4); wx1=0; P2=table[buf[0]]; delay1(4); } } else { wx4=0; P2=table[buf[3]]; delay1(2); wx3=0; P2=table[buf[2]]; delay1(2); wx2=0; P2=table[buf[1]]; delay1(4); wx1=0; P2=table[buf[0]]; delay1(4); } } 改成這樣后,顯示全都不正確了 |
ahshmj 發表于 2016-6-18 11:40 那顯示函數應該怎么更改呀 |
樓主給出的程序一共就三位,十位個位和小數。就沒有百位。 另外,你的小數的顯示為什么要取余?“P2=table[xs%10]; //顯示個位” 而不是除以10?(這樣,其實顯示的是小數的百分位,不是十分位,更不是個位) 其他的沒有仔細看。估計也有些小問題。 |
顯示程序試一試換成這樣 void wenduxianshi(unsigned int data) { unsigned char buf[4]; unsigned char i; for(i=0;i<4;i++) //i=0 個位 { buf[i] = data % 10; data /= 10; } if(buf[3] == 0) { if(buf[2] == 0) { if(buf[1] == 0) { wx1=1; P2=table[buf[0]]; delay1ms(8); } else { wx2=1; P2=table[buf[1]]; delay1ms(4); wx1=1; P2=table[buf[0]]; delay1ms(4); } } else { wx3=1; P2=table[buf[2]]; delay1ms(2); wx2=1; P2=table[buf[1]]; delay1ms(4); wx1=1; P2=table[buf[0]]; delay1ms(4); } } else { wx4=1 P2=table[buf[3]]; delay1ms(2); wx3=1; P2=table[buf[2]]; delay1ms(2); wx2=1; P2=table[buf[1]]; delay1ms(4); wx1=1; P2=table[buf[0]]; delay1ms(4); } } 注:根據需要適當修改一下 |
該案例程序包括2部分:測溫和顯示。顯示電路不一定采用上述電路。讀別人的程序用于參考,吸收自己有用的部分,然后改寫。這樣才會有幫助和提高。 |
zl2168 發表于 2016-6-17 19:41 可是我的原理圖沒用鎖存芯片,就用pnp驅動數碼管而已 |
本帖最后由 zl2168 于 2016-6-17 19:42 編輯 DS18B20 測溫 先Proteus仿真一下,確認有效。
![]() ![]() 以上摘自張志良編著《單片機實驗實訓100例》 ISBN 978-7-5124-1603-1,北航社出版 書中電路和程序設計有詳細說明,程序語句條條有注解。 |