![]() |
發布時間: 2021-8-26 13:57
正文摘要:新手請教下各位大神,原理圖如圖所示,我的程序數碼管亮度很暗,同樣的程序開發板亮度可以,為什么在自己做的板子上亮度會很暗呢,有什么解決辦法啊 單片機源程序如下: char smgduan[]={0x3f,0x06,0x5b,0x ... |
我的也是,整了個之后,結果固定值的很亮,需要變化的就不行了, 相對較暗 |
lkc8210 發表于 2021-8-26 17:42 抱歉哈,我在練習源文件及分頁子函數的編寫,所以程序粘貼不全,下次一定改正 |
多謝各位大佬的指點,結合大家的意見,我缺少了P0口工作模式的設置,即P0M1=0x00;P0M0=0xff;然后再把原掃描時間的值改為500,就實現了穩定高亮的顯示效果,![]() ![]() |
rayin 發表于 2021-8-27 08:52 軟件上也可以修改。單獨顯示一個段的數碼化。 你看看亮度就可以判斷是不是應該驅動電路小了。如果不是 說明你的刷新率太快。 |
Q6,Q7,Q8,Q9輸入PWM控制信號,就能無極調整亮度,呼吸燈效果都能做出來 |
開發板的P0口,都會有上拉電阻,所以夠亮,你自己的電路一般不會加上拉電阻所以比較暗,建議,P0口設置成推挽模式,就是P0M1這個, 另外,P2.4~P2.7,其實沒必要用三極管,直接接的IO口,低電平驅動即可,用了三極管還是NPN管,直接少了0.7V壓差,如果你單片機電源是3.3V的話,數碼管亮度就不夠了。 |
這應該不是軟件的問題,需要修改硬件。數碼管用三極管驅動的電流更大一些,可以用三極管試試 |
調電流亮度變化不大,關鍵要買高亮數碼管。 |
數碼管得到的驅動電流不夠大,需要加驅動IC。 |
源程序?main()函數都沒有 不要用delay()來延時,如:
|
ucmic 發表于 2021-8-26 16:44 往小了調,會更暗,往大了調,就閃爍了,這個值是相對理想的一個值了 |
2.軟件的掃描時間適當修改。 |
1.硬件可以調整R16-R23 1K的幾個電阻,阻值調小。 |
如果程序沒有什么別的事要做,直接用延時就行,如果是初學者,沒有必要把程序搞得太麻煩,等到你學會了,這種Delay()基本就可以不用在主函數中了輸出端口要設定成強推挽輸出,幾個三極管是沒有必要的,實際電路用20mA的驅動電流是完全足夠的 這個是我的,參考一下,實際驗證通過的 #include<REG52.h> sbit com0=P2^0; sbit com1=P2^1; sbit com2=P2^2; sbit com3=P2^3; //定義4個com端口 #define out P0 //p0 為顯示 sfr P0M0=0x94; sfr P0M1=0x93; void delay(unsigned char i) { unsigned int k; for(i;i>0;i--) { for(k=0;k<600;k++); } } unsigned char ledtab[]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6};// void main() { P0M0=0xff; P0M1=0x00; //設定P0端口為強推挽輸出模式 while(1) { unsigned char k; while(1) { k=0; out=ledtab[k]; com0=0; delay(10); com0=1; k++; out=ledtab[k]; com1=0; delay(10); com1=1; k++; out=ledtab[k]; com2=0; delay(10); com2=1; k++; out=ledtab[k]; com3=0; delay(10); com3=1; } } } |