![]() |
發布時間: 2020-7-29 20:44
正文摘要:程序目的:本來數碼管要動態顯示數字 " 7 6 5 4 3 2 1 0 ",但是寫入程序后,第一次顯示正常,第二次重啟開發板后,顯示亂碼! 這個是第一次顯示的,完全正常! #include "reg52.h" &n ... |
遇到廠家售后了![]() |
wulin 發表于 2020-7-30 17:25 真厲害,確實是跳帽接錯了!十分感謝!!! |
myshadow 發表于 2020-7-30 16:39 給你把程序修改了一下,用極低速掃描數碼管,借此有可能發現硬件故障點。懷疑是J21跳線帽接觸不良或虛焊,導致U2 74HC573工作不穩定。
|
robinsonlin 發表于 2020-7-30 16:36 我用的是普中開發板,程序下載到板子后運行正確,但是關機復位重啟后有時會出現亂碼的現象。 我已經在main函數中,初始化了IO口, P0=0x00;P2=0x00;還是不管用! |
wulin 發表于 2020-7-30 04:57 復位以后會出現數碼管會發生變化,亂碼,非常怪,都找不到原因 |
每次都在那個位置上出錯么? 看看這個板子上 P0^5腳有沒有被別的功能復用了。 |
1692483014 發表于 2020-7-29 22:25 大佬,這個P0M0這個是什么意思? 是指P0口嗎? 后面跟的 M0 M1 是什么? |
帶電重啟不正常時, 斷電再上電試試,還不正常時, 斷電放電再上電試試,還不正常時, 摔兩下敲兩下吹兩下擦兩下,還不正常時, 燒香拜佛。 言歸正傳,頂6樓 另外有可能是 P0總線上連接的其它設備影響 注意,傳統51,P0口做總線(地址/數據)時,是推挽輸出,但做普通IO時,是漏極開路輸出的,就是本例的情況,這時,輸出高電平需要靠外接上拉電阻。 |
看看板子后面的焊點有沒有粘連在一起的,這種板子焊接經常有這毛病處理一下就好了 |
程序沒有任何問題,有可能硬件有問題。按下復位按鍵或斷電時間長一些試試。 |
嘗試在main函數最開始的地方添加io初始化: P0M0 = 0x00; P0M1 = 0xFF; P2M0 = 0x00; P2M1 = 0x1C; |
man1234567 發表于 2020-7-29 21:25 就這一個板子啊,沒有其他的了。我用的代碼完全復制普中官方的代碼,什么也沒有改。 網上說是要 初始化數碼管,不知道要怎么初始化? |
同樣的程序換個板試試,就是把單片機拔下來放在其他板上試試就知道。 |
/************************************************************************************** * 動態數碼管顯示實驗 * 實現現象:下載程序后數碼管從右至左顯示0-7。 注意事項:如果不想讓點陣模塊顯示,可以將74HC595模塊上的JP595短接片拔掉。 ***************************************************************************************/ #include "reg52.h" //此文件中定義了單片機的一些特殊功能寄存器 typedef unsigned int u16; //對數據類型進行聲明定義 typedef unsigned char u8; sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//顯示0~F的值 /******************************************************************************* * 函 數 名 : delay * 函數功能 : 延時函數,i=1時,大約延時10us *******************************************************************************/ void delay(u16 i) { while(i--); } /******************************************************************************* * 函 數 名 : DigDisplay * 函數功能 : 數碼管動態掃描函數,循環掃描8個數碼管顯示 *******************************************************************************/ void DigDisplay() { u8 i=0; for(i=0;i<8;i++) { switch(i) //位選,選擇點亮的數碼管, { case(0): LSA=0;LSB=0;LSC=0; break;//顯示第0位 case(1): LSA=1;LSB=0;LSC=0; break;//顯示第1位 case(2): LSA=0;LSB=1;LSC=0; break;//顯示第2位 case(3): LSA=1;LSB=1;LSC=0; break;//顯示第3位 case(4): LSA=0;LSB=0;LSC=1; break;//顯示第4位 case(5): LSA=1;LSB=0;LSC=1; break;//顯示第5位 case(6): LSA=0;LSB=1;LSC=1; break;//顯示第6位 case(7): LSA=1;LSB=1;LSC=1; break;//顯示第7位 } P0=smgduan[i];//發送段碼 delay(100); //間隔一段時間掃描 P0=0x00;//消隱 } } /******************************************************************************* * 函 數 名 : main * 函數功能 : 主函數 * 輸 入 : 無 * 輸 出 : 無 *******************************************************************************/ void main() { while(1) { DigDisplay(); //數碼管顯示函數 } } |