找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 798|回復: 14
收起左側(cè)

單片機+數(shù)碼管為什么不亮?

[復制鏈接]
ID:1144680 發(fā)表于 2025-4-17 11:52 | 顯示全部樓層 |閱讀模式
用STC15W408AS搭建的電路,P2接數(shù)碼管+,P3接—,一共8個數(shù)碼管,全部都是a段亮。請大神幫忙看看哪里出了問題。

  1. #include <STC15F2K60S2.H>

  2. void main()
  3. {
  4.                         P2=1;                        
  5.                   P3=0;        
  6.         
  7.                 while(1)
  8.                 {
  9.                         
  10.                 }
  11. }        
復制代碼



回復

使用道具 舉報

ID:1109793 發(fā)表于 2025-4-17 12:16 | 顯示全部樓層
電路圖呢?
回復

使用道具 舉報

ID:1144680 發(fā)表于 2025-4-17 13:29 | 顯示全部樓層

如下圖,把無關(guān)的電路刪了

408.png

回復

使用道具 舉報

ID:1121801 發(fā)表于 2025-4-17 13:38 | 顯示全部樓層
P2=1??所以P2=01H,P2=0000,0001,那不是一個段亮嗎??
回復

使用道具 舉報

ID:1133081 發(fā)表于 2025-4-17 14:13 | 顯示全部樓層
dcc60 發(fā)表于 2025-4-17 13:29
如下圖,把無關(guān)的電路刪了

P2=1當然只亮1個a點,電路圖也有毛病,給你改了。下面是測試程序。
132943bojaax2rq7qjjoa9.png

  1. #include <STC15F2K60S2.H>

  2. unsigned char code table[]={
  3.         0x3f,0x06,0x5b,0x4f,
  4.         0x66,0x6d,0x7d,0x07,
  5.         0x7f,0x6f,0x77,0x7c,
  6.         0x39,0x5e,0x79,0x71};

  7. void Delay(unsigned int t)//1T@11.0592MHz
  8. {
  9.     unsigned int x;
  10.     while (t--)
  11.     {
  12.         x = 5000;
  13.         while (x--);
  14.     }
  15. }


  16. void main()
  17. {               
  18.         unsigned char i;
  19.         while(1)
  20.         {
  21.                 P2=0x00;
  22.                 P3=~(0x01<<i);
  23.                 P2=table[i];
  24.                 Delay(1);       
  25.                 i=++i%8;
  26.         }
  27. }
復制代碼



回復

使用道具 舉報

ID:1144680 發(fā)表于 2025-4-17 14:22 | 顯示全部樓層
cyi8 發(fā)表于 2025-4-17 13:38
P2=1??所以P2=01H,P2=0000,0001,那不是一個段亮嗎??

是這個意思啊?本意是讓所有數(shù)碼管點亮,P2輸出高電平,P3低電平,后來試了一下,給每個數(shù)碼管單獨賦值0、1就可以。

現(xiàn)在把代碼優(yōu)化了一下,可以了。謝謝!
  1. #include <STC15F2K60S2.H>

  2. unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
  3.        
  4. void Nixie(unsigned char Location,Number)
  5. {
  6.         switch(Location)
  7.         {
  8.                 case 1:P30=0; break;
  9.                 case 2:P31=0; break;               
  10.                 case 3:P32=0; break;
  11.                 case 4:P33=0; break;               
  12.                 case 5:P34=0; break;
  13.                 case 6:P35=0; break;               
  14.                 case 7:P36=0; break;
  15.                 case 8:P37=0; break;                       
  16.         }
  17.                 P2=NixieTable[Number];               
  18. }

  19. void main()
  20. {
  21.        
  22. Nixie(2,6);
  23.        
  24.                 while(1)
  25.                 {
  26.                        
  27.                 }
  28. }       
復制代碼



回復

使用道具 舉報

ID:1144680 發(fā)表于 2025-4-17 14:28 | 顯示全部樓層
WL0123 發(fā)表于 2025-4-17 14:13
P2=1當然只亮1個a點,電路圖也有毛病,給你改了。下面是測試程序。

多謝!運行正常。已經(jīng)超出了我的學習進度,下一節(jié)正好要學習這個。

回復

使用道具 舉報

ID:996773 發(fā)表于 2025-4-17 15:08 | 顯示全部樓層
過來人告訴樓主,新手學習單片機盡可能從標準的51開始,io口輸出只是標準的弱上拉和強拉低
比較容易理解,15w408雖然先進些,io口有多種配置,有強拉高,懸空等多種狀態(tài)需要定義相關(guān)
的寄存器,對新手不友好,循序漸進才是最好最省力的
回復

使用道具 舉報

ID:60178 發(fā)表于 2025-4-18 08:01 | 顯示全部樓層
我也剛學,要配置輸出模式,端口要寫明白,P2是指對一字節(jié)8位給1嗎,不是寫0XFF嗎
回復

使用道具 舉報

ID:402677 發(fā)表于 2025-4-18 10:20 | 顯示全部樓層
WL0123 發(fā)表于 2025-4-17 14:13
P2=1當然只亮1個a點,電路圖也有毛病,給你改了。下面是測試程序。

好好學習,謝謝熱心的朋友
回復

使用道具 舉報

ID:1144680 發(fā)表于 2025-4-18 10:25 | 顯示全部樓層
hi等你 發(fā)表于 2025-4-17 15:08
過來人告訴樓主,新手學習單片機盡可能從標準的51開始,io口輸出只是標準的弱上拉和強拉低
比較容易理解, ...

說的極是。
想著一邊學習一邊實踐,增加自己的學習興趣,這咱芯片也便宜,先做個小東東出來。
回復

使用道具 舉報

ID:1144680 發(fā)表于 2025-4-18 10:31 | 顯示全部樓層
xayh000 發(fā)表于 2025-4-18 08:01
我也剛學,要配置輸出模式,端口要寫明白,P2是指對一字節(jié)8位給1嗎,不是寫0XFF嗎

沒錯。應(yīng)該寫為0xFF,想當然地認為P2=1就是對所有端口操作。慚愧慚愧。
回復

使用道具 舉報

ID:1137639 發(fā)表于 2025-4-18 20:54 | 顯示全部樓層
是這個意思啊?本意是讓所有數(shù)碼管點亮,P2輸出高電平,P3低電平,后來試了一下,給每個數(shù)碼管單獨賦值0、1就可以。

現(xiàn)在把代碼優(yōu)化了一下,可以了。謝謝!
  1. #include <STC15F2K60S2.H>

  2. unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
  3.       
  4. void Nixie(unsigned char Location,Number)
  5. {
  6.         switch(Location)
  7.         {
  8.                 case 1:P30=0; break;
  9.                 case 2:P31=0; break;               
  10.                 case 3:P32=0; break;
  11.                 case 4:P33=0; break;               
  12.                 case 5:P34=0; break;
  13.                 case 6:P35=0; break;               
  14.                 case 7:P36=0; break;
  15.                 case 8:P37=0; break;                       
  16.         }
  17.                 P2=NixieTable[Number];               
  18. }

  19. void main()
  20. {
  21.       
  22. Nixie(2,6);
  23.       
  24.                 while(1)
  25.                 {
  26.                        
  27.                 }
  28. }      
復制代碼
回復

使用道具 舉報

ID:1152021 發(fā)表于 2025-5-28 19:06 來自觸屏版 | 顯示全部樓層
路過。
回復

使用道具 舉報

ID:1152098 發(fā)表于 2025-5-29 11:05 | 顯示全部樓層
沒有段碼嗎和位碼嗎
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表