|
發(fā)布時間: 2019-1-30 17:18
正文摘要:新手用單片機開發(fā)板上的2個74HC595級聯(lián)的芯片驅(qū)動數(shù)碼管。目的是顯示0~7.代碼寫好后結(jié)果成了這樣: 數(shù)碼管不斷地閃爍,但依稀可見數(shù)字。 自己也放慢觀察過亂碼的現(xiàn)象,覺得是當(dāng)?shù)谝淮味芜x位選都輸出后, ... |
| 找到問題了,是板子的問題。板子上的控制寄存器的P34P35被短接了,拔掉短接片就OK了 |
tusanyou 發(fā)表于 2019-2-12 01:04 哈哈,595是不好用。不過我終于找到問題了,問題出在我的板子上。我的板子P3.4,P3.5管腳被短接了,把短接片拔掉就ok了。自己太粗心了哈哈 |
Nimaby 發(fā)表于 2019-1-31 16:40 595的問題!八個輸出之間純在擊穿!595特別容易靜電擊穿!做了一個全彩光立方!開始采用的595!換的頭痛!就放棄595了! |
wsxujn 發(fā)表于 2019-1-31 11:52 我也覺得是我硬件的問題。 |
| 和硬件電路有關(guān),做一個產(chǎn)品,595做列驅(qū)動鬼影嚴(yán)重,換成138好了 |
ssk7793 發(fā)表于 2019-1-31 10:37 試過了,沒用 |
| 調(diào)整延時時間試試 |
HC6800-ES-V2.0 發(fā)表于 2019-1-31 08:58 謝謝,這種我是曉得的。但是我的目的是要用的是板子上2個級聯(lián)的595來驅(qū)動數(shù)碼管。你第一個程序的消影方法我把他在我的程序里試過,沒有效果,所以發(fā)論壇來了。 |
|
下面的程序,是你這個板子的資料,你看看吧! 程序一:不用譯碼器的 /******************************************************************************* * * 普中科技 -------------------------------------------------------------------------------- * 實 驗 名 : 動態(tài)數(shù)碼管顯示試驗 * 實驗說明 : 8位數(shù)碼管顯示0~7 * 連接方式 : 見連接圖 * 注 意 : *******************************************************************************/ #include<reg51.h> //--定義使用的IO口--// #define GPIO_DIG P0 //段選 #define GPIO_PLACE P1 //位選 //--定義全局變量--// unsigned char code DIG_PLACE[8] = { 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位選控制 查表的方法控制 unsigned char code DIG_CODE[17] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的顯示碼 unsigned char DisplayData[8]; //用來存放要顯示的8位數(shù)的值 //--聲明全局函數(shù)--// void DigDisplay(); //動態(tài)顯示函數(shù) /******************************************************************************* * 函 數(shù) 名 : main * 函數(shù)功能 : 主函數(shù) * 輸 入 : 無 * 輸 出 : 無 *******************************************************************************/ void main(void) { unsigned char i; for(i=0; i<8; i++) { DisplayData[i] = DIG_CODE[i]; } while(1) { DigDisplay(); } } /******************************************************************************* * 函 數(shù) 名 : DigDisplay * 函數(shù)功能 : 使用數(shù)碼管顯示 * 輸 入 : 無 * 輸 出 : 無 *******************************************************************************/ void DigDisplay() { unsigned char i; unsigned int j; for(i=0; i<8; i++) { GPIO_PLACE = DIG_PLACE[i]; //發(fā)送位選 GPIO_DIG = DisplayData[i]; //發(fā)送段碼 j = 10; //掃描間隔時間設(shè)定 while(j--); GPIO_DIG = 0x00;//消隱 } } 程序二:用譯碼器的 /******************************************************************************* * * 普中科技 -------------------------------------------------------------------------------- * 實 驗 名 : 動態(tài)數(shù)碼管顯示試驗 * 實驗說明 : 8位數(shù)碼管顯示0~7 * 連接方式 : 見連接圖 * 注 意 : *******************************************************************************/ #include<reg51.h> //--定義使用的IO--// #define GPIO_DIG P0 sbit LSA=P2^2; sbit LSB=P2^3; sbit LSC=P2^4; //--定義全局變量--// unsigned char code DIG_CODE[17]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的顯示碼 unsigned char DisplayData[8]; //用來存放要顯示的8位數(shù)的值 //--聲明全局函數(shù)--// void DigDisplay(); //動態(tài)顯示函數(shù) /******************************************************************************* * 函 數(shù) 名 : main * 函數(shù)功能 : 主函數(shù) * 輸 入 : 無 * 輸 出 : 無 *******************************************************************************/ void main(void) { unsigned char i; for(i=0;i<8;i++) { DisplayData[i]=DIG_CODE[i]; } while(1) { DigDisplay(); } } /******************************************************************************* * 函 數(shù) 名 : DigDisplay * 函數(shù)功能 : 使用數(shù)碼管顯示 * 輸 入 : 無 * 輸 出 : 無 *******************************************************************************/ void DigDisplay() { unsigned char i; unsigned int j; for(i=0;i<8;i++) { switch(i) //位選,選擇點亮的數(shù)碼管, { 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位 } GPIO_DIG=DisplayData[i];//發(fā)送段碼 j=10; //掃描間隔時間設(shè)定 while(j--); GPIO_DIG=0x00;//消隱 } } |
| 在切換掃描數(shù)據(jù)數(shù)據(jù)時,做到先關(guān),再改數(shù)據(jù),再開,就可以了。 |
| 來學(xué)習(xí)下,大家踴躍發(fā)言咯! |
| 參與人數(shù) 3 | 黑幣 +60 | 收起 理由 |
|---|---|---|
|
| + 15 | |
|
| + 10 | |
|
| + 35 | 贊一個! |
Powered by 單片機教程網(wǎng)