![]() |
發(fā)布時間: 2024-1-17 16:41
正文摘要:單片機源程序如下: #include "STC8H.h" #include "intrins.h" unsigned char NixieTable[]={ 0x03,/*0*/ 0x9F,/*1*/ &nbs ... |
電容加的少了吧 |
第50行挪到第68行后面試試 |
第57行 P11=0;//P12=1;P13=1; P10=1; "//"為何要注釋掉這樣會導致P11和P10都是0,顯示會亂的 |
原因估計是三個數碼管模塊是一起顯示的,做掃描顯示時是三個數碼管模塊單獨控制的,應該把三個數碼管模塊當作一個整體來考慮 |
hjx5548 發(fā)表于 2024-1-21 21:47 不說一下原因是啥? |
加電源,獨立供電。 |
wulin 發(fā)表于 2024-1-18 15:38 找到原因了。非常感謝 |
hjx5548 發(fā)表于 2024-1-17 21:31 STC實驗箱有好幾款,你參照的是哪款。最好把你制作PCB的原理圖貼出來,圖片中有兩處筆段只隱約顯示一半,確實匪夷所思。 ![]() |
hjx5548 發(fā)表于 2024-1-18 09:47 延時肯定是要去掉的了,可以把三個顯示函數放在同一個中斷,反正定時時間一樣,沒必要搞三個定時器。然后定義個全局變量來替代延時,每進一次中斷就+1,在中斷里判斷這個全局變量,判斷到比之前大1說明就延時1毫秒,用這個邏輯來替代之前用的延時函數,其他也沒什么了 |
qq475878026 發(fā)表于 2024-1-18 09:23 顯示邏輯應該怎么修改? |
可以看出都是數碼管最后一位比較亮,因為最后一位亮的時間最長,前一二位是亮2毫秒,最后一位是等所有程序執(zhí)行一輪后才開始繼續(xù)亮,估計得亮十幾個毫秒。軟件需要改動,把延時去掉,顯示邏輯改一下 |
hjx5548 發(fā)表于 2024-1-18 05:02 消影順序問題 第1,2,3位數碼管的亮光時間都是2ms 但第4位數碼管的亮光時間都是2+6+6=14ms 另外兩組數碼管同上 你把關燈代碼放到延時后試試 如 ![]() 另外 中斷里不要用延時! 中斷里不要用延時!中斷里不要用延時! |
lkc8210 發(fā)表于 2024-1-17 22:13 我不用定時器,把三個顯示放在主函數的大循環(huán)里面,也是這個情況。 |
hjx5548 發(fā)表于 2024-1-17 20:54 你定時1ms 但Led_adc耗時8ms Led_On和Led_Off各耗時6ms ???????? |
wulin 發(fā)表于 2024-1-17 20:38 STC實驗箱的原理圖就是這樣 |
lkc8210 發(fā)表于 2024-1-17 17:17 void Timer0_init() //1ms { AUXR &= 0x7F; //定時器時鐘12T模式 TMOD &= 0xF0; //設置定時器模式 TL0 = 0xCD; //設置定時初始值 TH0 = 0xD4; //設置定時初始值 TF0 = 0; //清除TF0標志 TR0 = 1; //定時器0開始計時 ET0 = 1; //開T0中斷 EA=1; } void Timer2_init() //1ms { AUXR &= 0xFB; //定時器時鐘12T模式 T2L = 0x66; //設置定時初始值 T2H = 0xFC; //設置定時初始值 AUXR |= 0x10; //定時器2開始計時 IE2 = 0x04; //使能定時器中斷 EA = 1; } void Timer3_init() //1ms { T4T3M &= 0xFD; //定時器時鐘12T模式 T3L = 0x66; //設置定時初始值 T3H = 0xFC; //設置定時初始值 T4T3M |= 0x08; //定時器3開始計時 IE2 = 0x20; //使能定時器中斷 EA = 1; } 忘記貼上了 |
如果硬件沒問題數碼管亮度不一致通常是顯示函數中各數碼管點亮時間不均衡所致。從貼圖和代碼看,硬件和軟件設計都不合理。STC8H的IO可以直接驅動數碼管,根本用不著加三極管放大。 |
可能同消隱有些關聯(lián) |
Timer0_init(); Timer2_init(); Timer3_init(); 這三個函數呢? |