久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

仿真軟件中使用鎖存器無法實現(xiàn)單片機數(shù)碼管動態(tài)顯示的問題

[復(fù)制鏈接]
回帖獎勵 1 黑幣 回復(fù)本帖可獲得 1 黑幣獎勵! 每人限 1 次(中獎概率 20%)
跳轉(zhuǎn)到指定樓層
樓主
ID:272176 發(fā)表于 2023-9-14 11:01 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
各位前輩,我最近重拾單片機,在實現(xiàn)數(shù)碼管動態(tài)顯示的時候遇到一個問題。我按照教程編寫了使用兩個鎖存器實現(xiàn)數(shù)碼管顯示的代碼,并使用定時器中斷來進行延時的作用。當(dāng)延時為1s時,可以實現(xiàn)前六個數(shù)碼管分別從1-6流動。但是,如果將時間降低,我在proteus上無法實現(xiàn)動態(tài)顯示的效果。仿真中的電路圖是我自己畫的,代碼是按照教程編寫的,請各位大佬幫我看一下問題在哪?(有一個蜂鳴器,測試的大佬要關(guān)一下,不然很吵
  1. //數(shù)碼管以1s間隔從0-6,在前六個數(shù)碼管流水顯示
  2. //問題:在proteus仿真無法實現(xiàn)實驗板上的動態(tài)數(shù)碼管顯示效果,無法用視覺暫留形成效果!!!!!!
  3. #include<reg52.h>
  4. #include<intrins.h>
  5. #define uint unsigned int
  6. #define uchar unsigned char        

  7. uchar temp,aa,numdu,numwe;
  8. sbit dula = P2^6;
  9. sbit wela = P2^7;
  10. uchar code table[] =  {
  11. 0x3f,0x06,0x5b,0x4f,
  12. 0x66,0x6d,0x7d,0x07,
  13. 0x7f,0x6f,0x77,0x7c,
  14. 0x39,0x5e,0x79,0x71};
  15. uchar code tablewe[] = {
  16. 0xfe,0xfd,0xfb,0xf7,0xef,0xdf};

  17. void main()
  18. {
  19.         numdu = 0;
  20.         numwe = 0;
  21.         aa = 0;
  22.         TMOD = 0x01;//六行代碼完成定時器0中斷的初始化!!!!!!
  23.         TH0 = (65536-5000)/256;
  24.         TL0 = (65536-5000)%256;
  25.         EA = 1;
  26.         ET0 = 1;
  27.         TR0 = 1;//啟動定時器0!!

  28.         while(1)
  29.         {
  30.                 if(aa==1)
  31.                 {
  32.                         aa = 0;
  33.                         numdu++;
  34.                         if(numdu==7)
  35.                         {
  36.                                 numdu = 1;
  37.                         }
  38.                         dula = 1;
  39.                         P0 = table[numdu];
  40.                         dula = 0;

  41.                         wela = 1;
  42.                         P0 = tablewe[numwe];
  43.                         wela = 0;
  44.                         numwe++;
  45.                         if(numwe==6)
  46.                                 numwe = 0;
  47.                         
  48.                 }
  49.         }
  50. }

  51. void timer0() interrupt 1
  52. {
  53.         TH0 = (65536-5000)/256;
  54.         TL0 = (65536-5000)%256;
  55.         aa++;
  56. }
復(fù)制代碼




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

使用道具 舉報

沙發(fā)
ID:161164 發(fā)表于 2023-9-14 14:08 | 只看該作者
要加消影
  1.                 if(aa==1)
  2.                 {
  3.                         aa = 0;
  4.                         numdu++;
  5.                         if(numdu==7)
  6.                         {
  7.                                 numdu = 1;
  8.                         }
  9.                         wela = 1;
  10.                         P0 = 0xFF;//消影
  11.                         wela = 0;
  12.                        
  13.                         dula = 1;
  14.                         P0 = table[numdu];
  15.                         dula = 0;

  16.                         wela = 1;
  17.                         P0 = tablewe[numwe];
  18.                         wela = 0;
  19.                         numwe++;
  20.                         if(numwe==6)
  21.                                 numwe = 0;

  22.                 }
復(fù)制代碼



回復(fù)

使用道具 舉報

板凳
ID:272176 發(fā)表于 2023-9-14 15:41 | 只看該作者

謝謝老哥,修改成功。請問這是段選P0口賦值和位選P0口賦值相互之間的干擾嗎?
我也剛意識到,上傳的代碼沒有注釋。感謝老哥!!
回復(fù)

使用道具 舉報

地板
ID:535881 發(fā)表于 2023-9-14 21:05 | 只看該作者
前兩天我也遇到了,proteus上使用數(shù)碼管必須消影。
當(dāng)數(shù)碼管切換到下一位時,這個數(shù)碼管就會顯示上一個數(shù)碼管的數(shù)字,由于切換時間很短,一閃而過,給人一種影的感覺,為了不顯示上一個數(shù),應(yīng)該在切換數(shù)碼管之前把所有的燈關(guān)掉,這就是所謂的消影。
回復(fù)

使用道具 舉報

5#
ID:123289 發(fā)表于 2023-9-15 15:19 | 只看該作者
要點:
1、切換時間要盡可能短,讓有效顯示時間長,這樣亮度才能達到最大。
2、切換前要準(zhǔn)備好切換的數(shù)據(jù),這樣才能減少切換執(zhí)行的指令。
3、切換動作的第一步是關(guān)顯示,這樣切換時的數(shù)據(jù)變化才不被顯示,顯示才不會混亂。
4、做切換動作。
5、最后一步,是打開新一顯示。
切換步驟如下(切換過程僅在條指令):
1、U3 = 全關(guān)
2、U1 = 新的顯示位數(shù)據(jù)(數(shù)據(jù)事先做好,如放在變量NEX_D中,在此取用)
3、U3 = 打開新顯示位(數(shù)據(jù)事先做好,如放在變量NEX_W中,在此取用)
P0 = 全關(guān) → U3.LE = 1使能 → U3.LE = 0鎖存 → 關(guān)顯示【消隱】
P0 = NEX_D → U1.LE = 1使能 → U1.LE = 0鎖存 → 【切換顯示數(shù)據(jù)】
P0 = NEX_W → U3.LE = 1使能 → U3.LE = 0鎖存 → 【切換顯示位】

你的錯誤是:
dula = 1;
錯誤:【這時Ux打開,但數(shù)據(jù)P0是混亂的,導(dǎo)致短暫顯示不受控】
改正:【放在正確的數(shù)據(jù)準(zhǔn)備好之后】   
P0 = table[numdu]
不佳:【C語言取數(shù)組中的數(shù)據(jù),不止一條指令,也即占用時間長了】
最佳:【事先做 NEX_x = table[numdu],在此:P0 = NEX_x】
dula = 0【OK】

改正后:
P0 = NEX_x;【切換前準(zhǔn)備好 NEX_x = table[numdu]】
dula = 1;
dula = 0;
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久久毛片 | 日韩欧美视频 | 青青久久 | 韩日一区二区三区 | 亚洲精品国产一区 | 日韩精品在线播放 | 亚洲精品视频免费观看 | 久久久久久成人 | 欧美日韩国产中文字幕 | 国产精品福利一区二区三区 | 波多野结衣精品 | 日韩免费看视频 | 青青草在线播放 | 欧美午夜视频 | 日韩国产精品一区二区三区 | 91欧美 | 国产欧美精品区一区二区三区 | 日韩精品在线一区二区 | 毛片免费观看视频 | 在线观看国产精品视频 | 天堂中文在线观看 | 国产精品成人在线 | 91免费福利在线 | 中文精品视频 | 久久精品亚洲国产 | 欧美激情欧美激情在线五月 | 狠狠天天 | 亚洲精品美女视频 | 伊人亚洲 | 成人激情视频在线 | 欧美一区二区成人 | 国产伦精品一区二区三区精品视频 | 久久久2o19精品 | 久久久久久蜜桃一区二区 | 亚洲综合在线网 | 中文字幕高清av | 国产高清自拍视频在线观看 | 欧美不卡一区 | aaaa日韩| 国产精品久久久久久久久久久久久 | 日韩精品成人免费观看视频 |