找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

proteus+單片機(jī)數(shù)碼管顯示問題,顯示太快的話,軟件會(huì)亂碼

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:418425 發(fā)表于 2019-1-7 00:08 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
剛剛上手proteus這個(gè)軟件,在做ad轉(zhuǎn)換實(shí)驗(yàn)時(shí),遇到一個(gè)問題,數(shù)碼管顯示太快的話,軟件會(huì)亂碼,不知道什么原因,求助一下。
  1. /* adc0804 實(shí)驗(yàn) display*/

  2. #include<reg52.h>
  3. #include<intrins.h>
  4. #define uint unsigned int
  5. #define uchar unsigned char
  6. #define MS 5  //數(shù)碼管顯示時(shí)間

  7. sbit dula=P2^6;
  8. sbit wela=P2^7;
  9. sbit cs=P3^5;        //adc0804 端口
  10. sbit rd=P3^6;
  11. sbit wr=P3^7;

  12. uchar code table[]={
  13.         0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
  14.                                         0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71
  15. };

  16. void delayms(uint xms)
  17. {
  18.         uint i,j;
  19.         for(i=xms;i>0;i--)
  20.                 for(j=110;j>0;j--);
  21. }

  22. void display(uchar bai,uchar shi,uchar ge)
  23. {
  24.         dula=1;
  25.         P0=table[bai];
  26.         dula=0;
  27.         P0=0xff;
  28.         wela=1;
  29.         P0=0x37;
  30.         wela=0;
  31.         delayms(MS);

  32.         dula=1;
  33.         P0=table[shi];
  34.         dula=0;
  35.         P0=0xff;
  36.         wela=1;
  37.         P0=0x2f;
  38.         wela=0;
  39.         delayms(MS);

  40.         dula=1;
  41.         P0=table[ge];
  42.         dula=0;
  43.         P0=0xff;
  44.         wela=1;
  45.         P0=0x1f;
  46.         wela=0;
  47.         delayms(MS);
  48. }

  49. void main()
  50. {
  51.         uchar a,A1,A2,A3,adval;
  52.         cs=0;                                           //cs一直為0即可
  53.         while(1)
  54.         {
  55.                 wr=1;                                           //wr 先拉高后置低 等待_nop_ ();
  56.                 _nop_();
  57.                 wr=0;
  58.                 _nop_();
  59.                 wr=1;
  60.                 for(a=10;a>0;a--)
  61.                 {                                                   //等待數(shù)據(jù)
  62.                         display(A1,A2,A3);
  63.                 }
  64.                 P1=0xff;
  65.                 rd=1;
  66.                 _nop_();
  67.                 rd=0;
  68.                 _nop_();
  69.                 adval=P1;
  70.                 rd=1;
  71.                 A1=adval/100;
  72.                 A2=adval/100%10;
  73.                 A3=adval%10;

  74.         }
  75. }
復(fù)制代碼


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

使用道具 舉報(bào)

沙發(fā)
ID:213173 發(fā)表于 2019-1-7 06:49 | 只看該作者
這個(gè)顯示程序是針對(duì)用鎖存器解決共用P0傳輸段碼和位碼編寫的,但有缺陷!仿真時(shí)會(huì)出亂碼,實(shí)際電路也不可能有效消除鬼影。樓主改成如下步驟:先消隱、送位碼、送段碼,這樣就可以了。
void display(uchar bai,uchar shi,uchar ge)
{
        dula=1;
        P0=0x00;
        dula=0;
       
        wela=1;
        P0=0x37;
        wela=0;
       
        dula=1;
        P0=table[bai];
        dula=0;
        delayms(MS);
       
        dula=1;
        P0=0x00;
        dula=0;
       
        wela=1;
        P0=0x2f;
        wela=0;
       
        dula=1;
        P0=table[shi];
        dula=0;
        delayms(MS);
       
        dula=1;
        P0=0x00;
        dula=0;
       
        wela=1;
        P0=0x1f;
        wela=0;
       
        dula=1;
        P0=table[ge];
        dula=0;
        delayms(MS);
}
回復(fù)

使用道具 舉報(bào)

板凳
ID:7485 發(fā)表于 2019-1-7 07:51 | 只看該作者
怎么是“軟件會(huì)亂碼”?

在刷新之前,先關(guān)閉顯示,你試一試。
回復(fù)

使用道具 舉報(bào)

地板
ID:123289 發(fā)表于 2019-1-7 07:53 | 只看該作者
只有“人”會(huì)亂。看你程序規(guī)劃的是否合理。
回復(fù)

使用道具 舉報(bào)

5#
ID:463496 發(fā)表于 2019-1-7 10:05 | 只看該作者
更新顯示的時(shí)間太短無法正常更新顯示數(shù)據(jù)
回復(fù)

使用道具 舉報(bào)

6#
ID:149389 發(fā)表于 2019-1-7 19:04 | 只看該作者
消隱一下“鬼影”應(yīng)該就好了,位選切換的時(shí)候,斷碼對(duì)應(yīng)的數(shù)碼管顯示全滅就好了。
回復(fù)

使用道具 舉報(bào)

7#
ID:418425 發(fā)表于 2019-1-7 22:45 | 只看該作者
wulin 發(fā)表于 2019-1-7 06:49
這個(gè)顯示程序是針對(duì)用鎖存器解決共用P0傳輸段碼和位碼編寫的,但有缺陷!仿真時(shí)會(huì)出亂碼,實(shí)際電路也不可能 ...

我改了,果然是這個(gè)原因,謝謝了
回復(fù)

使用道具 舉報(bào)

8#
ID:892140 發(fā)表于 2022-6-8 09:49 | 只看該作者
yf15966844335 發(fā)表于 2019-1-7 22:45
我改了,果然是這個(gè)原因,謝謝了

怎么改的啊,我也亂碼了
回復(fù)

使用道具 舉報(bào)

9#
ID:1032822 發(fā)表于 2022-6-8 16:24 | 只看該作者
不會(huì)吧,硬件怎么會(huì)使軟件亂碼,你先消抖,再進(jìn)行段位碼的傳送,還有你要處理好,數(shù)碼管給最大的不好就是處理不好,會(huì)產(chǎn)生閃爍
回復(fù)

使用道具 舉報(bào)

10#
ID:329625 發(fā)表于 2022-6-8 18:52 | 只看該作者
有兩種情況會(huì)出現(xiàn)亂碼,第一延時(shí)太短,加大延時(shí)即可,第二是位碼和短碼的順序也會(huì)影響,第二種情況實(shí)物里面不會(huì)影響
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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