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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2808|回復(fù): 9
收起左側(cè)

單片機(jī)想要兩位LED都顯示數(shù)字,該怎么辦?附程序

[復(fù)制鏈接]
ID:1015298 發(fā)表于 2022-4-19 16:55 | 顯示全部樓層 |閱讀模式
我開頭是這么設(shè)定的         
        #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;                 //模式選擇(設(shè)置輸出電壓值模式or電壓輸出模式)         
          uchar set=50,tj=0;
          顯示程序是這樣的
        //顯示兩位數(shù)碼管
                                                         
                                                                P3_0=0;         P3_1=1;
                                                        P0=led[set/10];        
                                                        delay(50)        ;                                       
                                                        P3_0=1;         P3_1=0;
                                                        P0=led1[set%10];               
                                                                        delay(50)        ;
        然后當(dāng)我進(jìn)行仿真的時(shí)候,按下確定鍵,顯示是這樣的

        現(xiàn)在我想要它兩個(gè)都顯示,應(yīng)該怎么辦,


捕獲.PNG
回復(fù)

使用道具 舉報(bào)

ID:332444 發(fā)表于 2022-4-19 21:04 | 顯示全部樓層
P0=~led1[set%10];  試看
回復(fù)

使用道具 舉報(bào)

ID:752974 發(fā)表于 2022-4-20 08:48 | 顯示全部樓層
這個(gè)代碼運(yùn)行到個(gè)位顯示就結(jié)束了,當(dāng)然只有個(gè)位在顯示了。要想兩位都顯示,需要不停的循環(huán)運(yùn)行顯示代碼部分,這是動態(tài)顯示電路工作的基本原理。
回復(fù)

使用道具 舉報(bào)

ID:1015298 發(fā)表于 2022-4-20 14:00 | 顯示全部樓層
munuc_w 發(fā)表于 2022-4-20 08:48
這個(gè)代碼運(yùn)行到個(gè)位顯示就結(jié)束了,當(dāng)然只有個(gè)位在顯示了。要想兩位都顯示,需要不停的循環(huán)運(yùn)行顯示代碼部分 ...

該怎么寫,求指導(dǎo),
回復(fù)

使用道具 舉報(bào)

ID:1015298 發(fā)表于 2022-4-20 14:01 | 顯示全部樓層
xianfajushi 發(fā)表于 2022-4-19 21:04
P0=~led1[set%10];  試看

不行啊,還是只亮各位
回復(fù)

使用道具 舉報(bào)

ID:161164 發(fā)表于 2022-4-20 14:33 | 顯示全部樓層
代碼只給一部份如瞎子摸象
問題現(xiàn)象加上現(xiàn)有代碼
可退敲出幾個(gè)問題可能
1. 沒有消影
2. 延時(shí)不足
3. 其他代碼耗時(shí)太長
回復(fù)

使用道具 舉報(bào)

ID:121859 發(fā)表于 2022-4-20 15:13 | 顯示全部樓層
你的延時(shí)時(shí)間可能有問題,一般這個(gè)延時(shí)時(shí)間幾個(gè)毫秒。
回復(fù)

使用道具 舉報(bào)

ID:1015298 發(fā)表于 2022-4-20 23:32 | 顯示全部樓層
lkc8210 發(fā)表于 2022-4-20 14:33
代碼只給一部份如瞎子摸象
問題現(xiàn)象加上現(xiàn)有代碼
可退敲出幾個(gè)問題可能

#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()        /*復(fù)位*/
{
    if(an1==0)
     {  aa=0;
                bb=0;
       
         }
    while(an1==0);
}

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

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

/*顯示函數(shù)*/
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(); }
          }         
這是我的代碼,如果想顯示的話,該怎么改才行
回復(fù)

使用道具 舉報(bào)

ID:1015298 發(fā)表于 2022-4-20 23:35 | 顯示全部樓層
lkc8210 發(fā)表于 2022-4-20 14:33
代碼只給一部份如瞎子摸象
問題現(xiàn)象加上現(xiàn)有代碼
可退敲出幾個(gè)問題可能

搞錯(cuò)了 ,這個(gè)才是

        #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;                 //模式選擇(設(shè)置輸出電壓值模式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)                         //設(shè)置輸出電壓
                        {               
                                                   //掃描按鍵1
                                if(P3_7==0)
                                                        {       
                                                                delay(10);                                                                  // 摁鍵消抖
                                                                if(P3_7==0)
                                                                  {  
                                                                         set++;
                                                                         if(set>99) set=99;                                                  // 設(shè)置顯示最大值
                                                                         while(P3_7==0)                                                  // 等待按鍵松開
                                                                             ;
                                                                         }  
                                                                }
                                                          //掃描按鍵2
                                if(P3_6==0)
                                                   {
                                                                   delay(10);                                                                  // 摁鍵消抖          
                                                                  if(P3_6==0)
                                                                  {
                                                                           set--;       
                                                                            if(set<0) set=0        ;                                         // 設(shè)置顯示最小值
                                                                           while(P3_6==0)                                         // 等待按鍵松開
                                                                                ;
                                                                           }
                                                  
                                                                }               
                                                               
                                                                //顯示兩位數(shù)碼管
                                                         
                                                                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;                                                                 
                                 }
               
                }
         
         
         }

回復(fù)

使用道具 舉報(bào)

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

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎(jiǎng)勵(lì)!

查看全部評分

回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久99精品久久久97夜夜嗨 | 亚洲性免费 | 激情一区二区三区 | 狠狠爱视频 | 天堂影院av| 亚洲欧美日韩在线 | 麻豆久久 | 久久首页 | 欧美一二三 | 国产三区av| 日日操视频 | 欧美男人亚洲天堂 | 福利视频一区二区 | 久久精品国产99国产精品 | 91色在线| 国产精品久久av | 欧美黑人又粗大 | 国产一区二区精品在线观看 | 国产一区三区在线 | 91原创视频在线观看 | 欧美三级视频 | 欧美性一区二区三区 | 国产精品一区在线观看你懂的 | 一级a毛片 | 亚洲精品一区二区三区四区高清 | 黄色一级大片在线免费看产 | 亚洲免费人成在线视频观看 | 国产精品精品视频一区二区三区 | 老妇激情毛片免费 | 成人精品国产免费网站 | 欧美日韩中文字幕在线播放 | 国产在线一区观看 | 精品美女久久久久久免费 | 日韩免费视频一区二区 | 国精日本亚洲欧州国产中文久久 | aa级毛片毛片免费观看久 | 午夜午夜精品一区二区三区文 | 久久久久国产一区二区三区 | 无人区国产成人久久三区 | 成人在线中文字幕 | 天堂视频中文在线 |