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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1718|回復: 7
打印 上一主題 下一主題
收起左側

單片機數碼管仿真中遇到的數碼管顯示亂碼問題

[復制鏈接]
跳轉到指定樓層
樓主
如下圖:網上下載的一個數碼管計數器,原程序及其仿真是共陽極數碼管,因我手上只有共陰極的數碼管,所以我就將原程序里共陽極編碼表換成了共陰極編碼表。問題來了,計數器加減復位功能都正常,也能顯示數字,但單位位數的顯示位置發生了移動——共陰極顯示的個位變到了共陽極的十位處;共陰極顯示的十位變到了共陽極顯示的百位處;共陰極顯示的百位變到了共陽極顯示的千位處;共陰極顯示的千位變到了共陽極顯示的個位處。糊涂了,單位位置怎嘛會變呢?(試過了,與另一個數碼管有無無關)
    請明白的壇友指點一二。謝謝



單片機代碼如下:
/**********
20220318 摘自網上 若僅修改所用數碼管,將共陽極換成共陰極,顯示的位置將變化,這是為什么?
************/
//----------------------------------------------------------------------
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int

sbit k1 = P3^4;                   //加
sbit k2 = P3^3;                   //減
sbit k3 = P3^2;                   //復位
void key(void);
void display(void);

/**********************************/
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,
                    0x92,0x82,0xf8,0x80,0x90};           //共陽極數組
/***************
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,
                    0x6d,0x7d,0x07,0x7f,0x6f};           //共陰極數組
*******************/                        


char m=99,n=98;                                //顯示初值,m,n的值決定開機顯示數值
//****************************************
//延時程序
//****************************************
void delayms(uint xms)
{
   uint i,j;
   for(i=xms;i>0;i--)
   for(j=110;j>0;j--);
}
//***********************************************
//顯示程序
//***********************************************
void display(void)
{
        P2=0X08;
                P1=table[m%10];   //顯示個位
                delayms(5);  
                P2=0X04;
            P1=table[m/10];          //顯示十位
                delayms(5);                                                              
            P2=0X02;
                P1=table[n%10];          //顯示百位
                delayms(5);
                P2=0X01;
                P1=table[n/10];          //顯示千位
                delayms(5);
}

//***************************************************
//按鍵處理
//***************************************************
void key()
{
  if(k1==0)                                         //檢測按鍵是否被按下
   {                                                 //延時消抖
           delayms(10);                        
        if(k1==0)                                 //再次檢測是否真正按下按鍵
        {
          m++;                                         //m自加一
          if(m>=100)                         //如果m加到100則n加一 (限制m的取值范圍) 個位、十位最大顯示99
          {
                  n++;                                 //n自加一
                m=0;                                 //使m又從0開始計數
                if(n>=100)                         //如果n加到100則m=n=99 (限制n的取值范圍) 百位、千位最大顯示99
                {
                  m=99;                                 //最大顯示9999
                  n=99;
                }
          }
        }
        while(!k1);                                 //按鍵松開
   }

  if(k2==0)                                         //檢測按鍵是否被按下
   {                                                 //延時消抖
           delayms(10);                         //再次檢測是否真正按下按鍵
        if(k2==0)
        {                                                 //m自減一
          m--;
          if(m<=0)                                 //如果m減到0則n減一 (限制n的取值范圍) 個位、十位最小顯示00
          {                                                
            m=99;                                 //重新給m裝初值
                  n--;                                 //n自減一
                if(n==-1)                         //如果n減到-1,則m=n=0 (限制n的取值范圍) 百位、千位最小顯示00
                {
                 n=0;                                 //最小顯示0000
                 m=0;
                }
          }
        }
        while(!k2);                                 //按鍵松開
   }

if(k3==0)                                         //檢測按鍵是否被按下
{
   delayms(10);                                 //延時消抖
   if(k3==0)                                 //再次檢測是否真正按下按鍵
   {
            m=0;                                         //復位,顯示0000
         n=0;
   }
   while(!k3);                                 //按鍵松開
}
}

void main()
{
  while(1)
  {                                                         //調用按鍵檢測
   key();                                         //數碼管顯示
   display();
  }

}        



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

使用道具 舉報

沙發
ID:195446 發表于 2022-4-5 10:39 | 只看該作者
改共陰數碼管后段碼要變,位碼也要變啊。P2=0X0E; //顯示個位,P2=0X0D; //顯示十位,,P2=0X0B; //顯示百位,P2=0X07; //顯示千位。
回復

使用道具 舉報

板凳
ID:979299 發表于 2022-4-5 10:51 | 只看該作者
P2口位顯也得改啊。
//***********************************************
//顯示程序
//***********************************************
void display(void)
{
        P2=0X07;
        P1=table[m%10];   //顯示個位
        delayms(5);  
        P2=0X0B;
        P1=table[m/10];   //顯示十位
        delayms(5);                                                              
        P2=0X0D;
        P1=table[n%10];   //顯示百位
        delayms(5);
        P2=0X0E;
        P1=table[n/10];   //顯示千位
        delayms(5);
}
回復

使用道具 舉報

地板
ID:149451 發表于 2022-4-5 11:24 | 只看該作者
mffhxa 發表于 2022-4-5 10:39
改共陰數碼管后段碼要變,位碼也要變啊。P2=0X0E; //顯示個位,P2=0X0D; //顯示十位,,P2=0X0B; //顯示百 ...

多謝多謝......明白了,改好了。
回復

使用道具 舉報

5#
ID:149451 發表于 2022-4-5 11:25 | 只看該作者
興安xa 發表于 2022-4-5 10:51
P2口位顯也得改啊。
//***********************************************
//顯示程序

多謝多謝......菜鳥基礎不夠,現在明白了,改好了。
回復

使用道具 舉報

6#
ID:332444 發表于 2022-4-5 12:27 | 只看該作者
代碼不需要修改換取反即可。
回復

使用道具 舉報

7#
ID:121859 發表于 2022-4-5 15:50 | 只看該作者
段碼修改后,位碼也需要同時修改,其實不用那么麻煩,控制程序中,將段碼和位碼送IO扣前取反就可以了。
回復

使用道具 舉報

8#
ID:979299 發表于 2022-4-5 17:37 | 只看該作者
  1. 代碼不需要修改換取反即可。
復制代碼

就是,段碼也不用換的,只需要把所有賦值段碼和位碼前寫上~這個取反符號即可
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: www.久| 99re在线播放 | 久久国产欧美日韩精品 | 九九在线视频 | 亚洲国产成人av好男人在线观看 | 久久久久久久久久久久久久久久久久久久 | 久久久999成人 | 久久久精品 | 日韩免费一区二区 | 看片国产 | 欧美色性| 亚洲视频免费一区 | 午夜私人影院在线观看 | 久久av网站 | 久久精品亚洲精品国产欧美 | 99精品视频网 | 亚洲精品在线免费播放 | 久久久精品网站 | 精品无码久久久久国产 | 免费视频一区 | 国产一区二区三区在线看 | 成人免费福利 | 国产一区在线看 | 久久中文字幕一区 | 久久精品高清视频 | 亚洲精品www久久久久久广东 | 影视先锋av资源噜噜 | 91精品国产乱码久久久久久久 | 国产色在线 | 午夜小电影 | 国产精品不卡视频 | 成人午夜免费视频 | 欧美国产亚洲一区二区 | 国产yw851.c免费观看网站 | 欧美日韩一区二区三区四区 | 欧美在线一二三 | 一区二区三区欧美在线 | 亚洲天堂成人在线视频 | 国产亚洲人成a在线v网站 | 爱操av| 亚洲精品成人av久久 |