找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3741|回復(fù): 7
打印 上一主題 下一主題
收起左側(cè)

用Proteus動態(tài)顯示管輸出數(shù)字為什么有些顯示不出來?附單片機程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:906945 發(fā)表于 2021-4-16 17:04 | 只看該作者 |只看大圖 回帖獎勵 |正序瀏覽 |閱讀模式
我寫的單片機代碼是這樣的

  1. #include<reg51.h>
  2. #define uchar unsigned char
  3. #define uint unsigned int
  4. sbit LE1=P2^7;
  5. sbit LE2=P2^6;
  6. void delay_ms(uint j)
  7. {uchar m,n;
  8. for(m=j;m>0;m--)
  9. for(n=30;n>0;n--);}
  10. void main()
  11. {uchar code xuanma[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
  12. uchar code duanma[6]={0x3f,0x06,0x5b,0x4f,0x66,0x6d};//顯示012345
  13. uchar i;
  14. while(1)
  15. {for(i=0;i<6;i++)
  16. {LE1=1;
  17. P1=xuanma[i];
  18. LE1=0;
  19. LE2=1;
  20. P1=duanma[i];
  21. LE2=0;
  22. delay_ms(3);
  23. }}}
復(fù)制代碼

但是2和4顯示不出來,就像下面圖這樣,
希望前輩們不吝賜教


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

8#
ID:906945 發(fā)表于 2021-4-17 11:37 | 只看該作者
mengzhixinheng 發(fā)表于 2021-4-16 22:05
其實是邏輯不嚴(yán)謹(jǐn)造成的,消影的本質(zhì)是重新初始化端口。位選數(shù)據(jù)沒有改變的時候,就打開段選自然會出錯。兩 ...

好噠好噠,我再體會體會,謝謝前輩
回復(fù)

使用道具 舉報

7#
ID:906945 發(fā)表于 2021-4-17 11:36 | 只看該作者
wulin 發(fā)表于 2021-4-16 21:29
仿真與實物還是有區(qū)別的。在實物中不會殘缺,只是有鬼影。實踐中加消隱為佳。

好噠好噠,謝謝前輩
回復(fù)

使用道具 舉報

6#
ID:89515 發(fā)表于 2021-4-16 22:05 來自手機 | 只看該作者
其實是邏輯不嚴(yán)謹(jǐn)造成的,消影的本質(zhì)是重新初始化端口。位選數(shù)據(jù)沒有改變的時候,就打開段選自然會出錯。兩個數(shù)據(jù)有瞬間的覆蓋現(xiàn)象就會出現(xiàn)所謂的鬼影。不知道你能否明白。!
回復(fù)

使用道具 舉報

5#
ID:213173 發(fā)表于 2021-4-16 21:29 | 只看該作者
笨學(xué)單片機 發(fā)表于 2021-4-16 20:02
不過大佬我發(fā)現(xiàn)就是不用前面的消隱,就把LE1=1放在P1=xuanma后面就可以呀,
void main()
{uchar code x ...

仿真與實物還是有區(qū)別的。在實物中不會殘缺,只是有鬼影。實踐中加消隱為佳。
回復(fù)

使用道具 舉報

地板
ID:906945 發(fā)表于 2021-4-16 20:02 | 只看該作者
笨學(xué)單片機 發(fā)表于 2021-4-16 19:52
啊啊啊,可以了可以了,謝謝大佬謝謝大佬

不過大佬我發(fā)現(xiàn)就是不用前面的消隱,就把LE1=1放在P1=xuanma[ i]后面就可以呀,
  1. void main()
  2. {uchar code xuanma[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
  3. uchar code duanma[6]={0x3f,0x06,0x5b,0x4f,0x66,0x6d};
  4. uchar i;
  5. while(1)
  6. {for(i=0;i<6;i++)
  7. {P1=xuanma[i];LE1=1;
  8. LE1=0;
  9. P1=duanma[i];LE2=1;
  10. LE2=0;
  11. delay_ms(1);
  12. }}}
復(fù)制代碼

這是為什么呢?是不是如果我先寫P1=xuanma[ i],就先把P1的輸出給了鎖存器,這樣再用鎖存器就沒問題了嗎?
回復(fù)

使用道具 舉報

板凳
ID:906945 發(fā)表于 2021-4-16 19:52 | 只看該作者
wulin 發(fā)表于 2021-4-16 19:41
只要添加消隱語句就行了

啊啊啊,可以了可以了,謝謝大佬謝謝大佬
回復(fù)

使用道具 舉報

沙發(fā)
ID:213173 發(fā)表于 2021-4-16 19:41 | 只看該作者
只要添加消隱語句就行了
  1. void main()
  2. {
  3.         uchar code xuanma[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
  4.         uchar code duanma[6]={0x3f,0x06,0x5b,0x4f,0x66,0x6d};//顯示012345
  5.         uchar i;
  6.         while(1)
  7.         {
  8.                 P1=0x00;LE2=1;LE2=0;//段消隱
  9.                 P1=xuanma[i];LE1=1;LE1=0; //送位碼
  10.                 P1=duanma[i];LE2=1;LE2=0;//送段碼
  11.                 delay_ms(1);
  12.                 i=++i%6;
  13.         }
  14. }
復(fù)制代碼
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表