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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機想要兩位LED都顯示數字,該怎么辦?附程序

[復制鏈接]
跳轉到指定樓層
樓主
我開頭是這么設定的         
        #include<math.h>
        #include <reg51.h>
        #define  uchar unsigned char
        #define  uint unsigned int
          char led[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
          char led1[]={0x3f,0x06,0x5b,0x4f,0xe66,0x6d,0x7d,0x07,0x7f,0x6f};
          sbit P3_7=P3^7;                        //加鍵
          sbit P3_6=P3^6;                   //減鍵
          sbit P3_1=P3^1;
          sbit P3_0=P3^0;
          sbit P3_4=P3^4;                 //模式選擇(設置輸出電壓值模式or電壓輸出模式)         
          uchar set=50,tj=0;
          顯示程序是這樣的
        //顯示兩位數碼管
                                                         
                                                                P3_0=0;         P3_1=1;
                                                        P0=led[set/10];        
                                                        delay(50)        ;                                       
                                                        P3_0=1;         P3_1=0;
                                                        P0=led1[set%10];               
                                                                        delay(50)        ;
        然后當我進行仿真的時候,按下確定鍵,顯示是這樣的

        現在我想要它兩個都顯示,應該怎么辦,


捕獲.PNG (32.15 KB, 下載次數: 31)

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

使用道具 舉報

沙發
ID:332444 發表于 2022-4-19 21:04 | 只看該作者
P0=~led1[set%10];  試看
回復

使用道具 舉報

板凳
ID:752974 發表于 2022-4-20 08:48 | 只看該作者
這個代碼運行到個位顯示就結束了,當然只有個位在顯示了。要想兩位都顯示,需要不停的循環運行顯示代碼部分,這是動態顯示電路工作的基本原理。
回復

使用道具 舉報

地板
ID:1015298 發表于 2022-4-20 14:00 | 只看該作者
munuc_w 發表于 2022-4-20 08:48
這個代碼運行到個位顯示就結束了,當然只有個位在顯示了。要想兩位都顯示,需要不停的循環運行顯示代碼部分 ...

該怎么寫,求指導,
回復

使用道具 舉報

5#
ID:1015298 發表于 2022-4-20 14:01 | 只看該作者
xianfajushi 發表于 2022-4-19 21:04
P0=~led1[set%10];  試看

不行啊,還是只亮各位
回復

使用道具 舉報

6#
ID:161164 發表于 2022-4-20 14:33 | 只看該作者
代碼只給一部份如瞎子摸象
問題現象加上現有代碼
可退敲出幾個問題可能
1. 沒有消影
2. 延時不足
3. 其他代碼耗時太長
回復

使用道具 舉報

7#
ID:121859 發表于 2022-4-20 15:13 | 只看該作者
你的延時時間可能有問題,一般這個延時時間幾個毫秒。
回復

使用道具 舉報

8#
ID:1015298 發表于 2022-4-20 23:32 | 只看該作者
lkc8210 發表于 2022-4-20 14:33
代碼只給一部份如瞎子摸象
問題現象加上現有代碼
可退敲出幾個問題可能

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uint aa,b,bb;
sbit p1=P2^7;
sbit p2=P2^6;
sbit p3=P2^5;
sbit p4=P2^4;
sbit dp=P0^7;
sbit an1=P1^4;
sbit an2=P1^5;
sbit an3=P1^6;
sbit CLK=P1^2;/*定義DAC控制端口*/
sbit CS=P1^1;
sbit DIN=P1^3;
uchar code SegCode[12] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xc1};
int moshi=0;
void DelayMs(uchar n)
{
        uchar j;
        while (n--)            
        {
                for (j = 0; j < 113; j++);
        }
}

void keyscan1()        /*復位*/
{
    if(an1==0)
     {  aa=0;
                bb=0;
       
         }
    while(an1==0);
}

void keyscan2()        /*按鍵1進行加1*/
{
    if(an2==0)
     {
                         if(aa<99)
                         {
                                 aa=aa+1;
                     bb++;
                         }
         }
    while(an2==0);
}

void keyscan3() /*按鍵2進行減1*/
{
   if(an3==0)
    {
           if(aa>0)
                 {
                         aa=aa-1;
             bb--;
                 }
        }
  while(an3==0);
}

/*顯示函數*/
void display(void)
{  p1=0;p2=0;
          if(bb/10%10==0)
    P0=SegCode[1];
    else
        P0=SegCode[bb/10%10];
        p1=1;p2=0;
        DelayMs(1);
       
          p1=0;p2=0;
        P0=SegCode[bb/1%10];
        dp=0;
        p1=0;p2=1;
        DelayMs(1);
        p1=0;p2=0;
}
       
void DA_Conver(unsigned int DAValue)
{
      unsigned char i;
      DAValue <<= 6;       
      CS =   0;                             
      CLK = 0;                          
                                       
      for(i = 0; i < 12; i++)                 
      {                                    
          DIN = (bit)(DAValue & 0x8000);  
          CLK = 1;                        
          DAValue <<= 1;                  
         CLK = 0;
      }
      CS = 1;                              
      CLK = 0;           
}
                       
float zh (float k)
{
  float DA;
  DA=k*1024/500;        /*2.5v參考電壓!*/
  return DA;  }
void init_timer()
{  
    TMOD=0x01;
        TH0=(65536-3500)/256;         
        TL0=(65536-3500)%256;
        EA=1;
        ET0=1;
        TR0=1;
              }

void main()
{long DAValue=0;
  aa=0;


          init_timer();

  while(1)
  {  
    DAValue=zh(aa);  /*輸出電壓*/
          DA_Conver(DAValue);
             keyscan1();
          keyscan2();
          keyscan3();
         
        }
  }
       
void time0() interrupt 1
        {          TH0=(65536-3500)/256;
        TL0=(65536-3500)%256;
        b++         ;
        if(b==2)
        {b=0;
          display(); }
          }         
這是我的代碼,如果想顯示的話,該怎么改才行
回復

使用道具 舉報

9#
ID:1015298 發表于 2022-4-20 23:35 | 只看該作者
lkc8210 發表于 2022-4-20 14:33
代碼只給一部份如瞎子摸象
問題現象加上現有代碼
可退敲出幾個問題可能

搞錯了 ,這個才是

        #include<math.h>
        #include <reg51.h>
        #define  uchar unsigned char
        #define  uint unsigned int
          char led[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
          char led1[]={0x3f,0x06,0x5b,0x4f,0xe66,0x6d,0x7d,0x07,0x7f,0x6f};
          sbit P3_7=P3^7;                        //加鍵
          sbit P3_6=P3^6;                   //減鍵
          sbit P3_1=P3^1;
          sbit P3_0=P3^0;
          sbit P3_4=P3^4;                 //模式選擇(設置輸出電壓值模式or電壓輸出模式)          
          uchar set=50,tj=0;
         


        void delay (unsigned int time)
                {
                  unsigned j;
                  for (;time>0;time--)
                  for(j=0;j<125;j++) ;       
                }

         void main ()
         {

        while (1)
                {
        if(P3_4==0)
         { tj=!tj;         while(P3_4==0) ; }

        if(tj==0)                         //設置輸出電壓
                        {               
                                                   //掃描按鍵1
                                if(P3_7==0)
                                                        {       
                                                                delay(10);                                                                  // 摁鍵消抖
                                                                if(P3_7==0)
                                                                  {  
                                                                         set++;
                                                                         if(set>99) set=99;                                                  // 設置顯示最大值
                                                                         while(P3_7==0)                                                  // 等待按鍵松開
                                                                             ;
                                                                         }  
                                                                }
                                                          //掃描按鍵2
                                if(P3_6==0)
                                                   {
                                                                   delay(10);                                                                  // 摁鍵消抖          
                                                                  if(P3_6==0)
                                                                  {
                                                                           set--;       
                                                                            if(set<0) set=0        ;                                         // 設置顯示最小值
                                                                           while(P3_6==0)                                         // 等待按鍵松開
                                                                                ;
                                                                           }
                                                  
                                                                }               
                                                               
                                                                //顯示兩位數碼管
                                                         
                                                                P3_0=0;         P3_1=1;
                                                        P0=led[set/10];       
                                                        delay(50)        ;                                       
                                                        P3_0=1;         P3_1=0;
                                                        P0=led1[set%10];               
                                                                        delay(50)        ;
                                                               
                                                               
                                                                        }
                               
        else{               
                                        
                                  P2=(float)set*2.56 ;                                   //輸出算法
//                                        P2=25.6;                                                                 
                                 }
               
                }
         
         
         }

回復

使用道具 舉報

10#
ID:827243 發表于 2022-4-21 05:59 | 只看該作者
總的看來,問題比較多。
簡單改法:
掃描顯示的意義在于無論如何,顯示代碼在循環中都需要跑一次,這才是掃描。所以 //顯示兩位數碼管 這段代碼 需要放在 while(1)中長期運行,而不能放在 if(tj==0)                         //設置輸出電壓 里 這樣在輸出電壓時,就只能顯示一位了。 所以 按鍵判斷  while(P3_6==0)                                         // 等待按鍵松開 也是不合適的,這樣鍵盤按下不放時,只會顯示一位。
建議做法:
主循環while(1)不能存在卡循壞的代碼。
按鍵在while(1)里取值,連續5次一致,認可此次按鍵有效(用于消抖),去掉while(P3_6==0);這類代碼。然后比較此次按鍵與上次按鍵的不同,用于判斷按下或是松開按鍵。這樣寫法還可加入按鍵時長的計算,便于代碼的擴展。
//顯示兩位數碼管 代碼放于主循環中,保證一直運行。

評分

參與人數 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一区二区成人 | 精品国产一区二区三区日日嗨 | 九九久久久 | 91欧美精品成人综合在线观看 | 在线精品观看 | 男女免费视频网站 | 成人久久18免费网站麻豆 | 精品福利一区 | 国产精品久久国产精品 | 亚洲一二三视频 | 成人aaa视频 | h视频在线播放 | 久久国产精品视频 | 91精品一区 | 欧美日韩中文国产一区发布 | 色99视频 | 成人在线看片 | 日韩精品视频在线 | 国产美女永久免费无遮挡 | 7777久久| 亚洲国产一 | 91麻豆精品一区二区三区 | 91久久精品国产免费一区 | 91精品一区二区三区久久久久久 | 视频一区二区中文字幕日韩 | 国产成人a亚洲精品 | 亚洲先锋影音 | 在线欧美 | 97超碰人人| 可以免费观看的av | 精品无码久久久久久国产 | 一区二区三区日韩 | 蜜桃一区二区三区在线 | 午夜影院在线观看 | 久久精品免费 | 亚洲欧美一区二区三区视频 | 一区二区三区日韩精品 | 青春草在线| 国产二区视频 | 中文字幕av一区 | 欧州一区二区三区 |