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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3875|回復: 13
收起左側

3片595級聯可以驅動16位數碼管嗎?怎么讓高低位互不影響

[復制鏈接]
ID:441232 發表于 2019-1-17 21:04 | 顯示全部樓層 |閱讀模式
如題,如果可以驅動,數碼管的段選是并聯的,怎么讓高低位互不影響
回復

使用道具 舉報

ID:164602 發表于 2019-1-18 08:17 | 顯示全部樓層
3片595是可以驅動16位數碼管的。
第一:兩片595進行位選,一片595進行段選。
第二:我所看到的多位數碼管顯示,都是段并聯,如下圖 1.jpg

第三:針對這樣的電路,顯示都是用“視覺暫留”原理的掃描法——一次只亮一個數碼管(位選),間隔時間短,眼就認為都亮了。
程序例如:(原理程序,不是你的電路的配套程序!!!!!)
void DigDisplay()          //數碼管動態顯示子函數
{
GPIO4=0;//位選
GPIO=DisplayData[0];//段選
Delay(30);//時間要自己試,一般在100ms以內
GPIO4=1;//關閉

GPIO3=0;
GPIO=DisplayData[1];
Delay(30);
GPIO3=1;

GPIO2=0;
GPIO=DisplayData[2];
Delay(30);
GPIO2=1;

GPIO1=0;
GPIO=DisplayData[3];
Delay(30);
GPIO1=1;
......
}

所以,你說的“高低位互不影響”的意思我懂啊,高位給高位的數據,低位給低位的數據,怎么會影響呢?
回復

使用道具 舉報

ID:123289 發表于 2019-1-18 08:22 | 顯示全部樓層
你先舉一個受到影響的例子
回復

使用道具 舉報

ID:466578 發表于 2019-1-18 08:46 | 顯示全部樓層
3個 595,1個驅動數碼管段選(a-g,p),2個驅動數碼管位選(com1-16)
用掃描方式驅動,高低位互不影響.
回復

使用道具 舉報

ID:149389 發表于 2019-1-18 10:00 | 顯示全部樓層
靜態又有稱為1/1掃的 其他的1/2,1/4,1/8,1/16都屬于動態掃描。 靜態和動態是LED顯示屏的兩種不同的驅動方式。
回復

使用道具 舉報

ID:149389 發表于 2019-1-18 10:02 | 顯示全部樓層
如果用1/16掃,3片596可以驅動 16x8x3個像素,相當于48個數碼管,其他掃描方式類推
回復

使用道具 舉報

ID:441232 發表于 2019-1-18 12:19 來自手機 | 顯示全部樓層
yzwzfyz 發表于 2019-1-18 08:22
你先舉一個受到影響的例子

感謝,點我的發帖里邊,有我發布的問題。
回復

使用道具 舉報

ID:441232 發表于 2019-1-18 19:55 | 顯示全部樓層
佛云 發表于 2019-1-18 08:46
3個 595,1個驅動數碼管段選(a-g,p),2個驅動數碼管位選(com1-16)
用掃描方式驅動,高低位互不影響.

請問一下,可以詳細解說下那種掃描方式?
回復

使用道具 舉報

ID:441232 發表于 2019-1-18 20:25 | 顯示全部樓層
yzwzfyz 發表于 2019-1-18 08:22
你先舉一個受到影響的例子

嗯,我一步一步說明。三個級聯的595分別從低位定義到高位的 變量如下
u8 wei_duan[3]; //三個595
u8 wei[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
u8 shuzu[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6f};
u16 xierushuju[16];       

void main()
{
  while(1)
  {
       for(i=0;i<3;i++)
          {
           if(i==1)//選擇為低位數碼管時
           {
             for(x=0;x<8;x++)
                 {
                    wei_duan[0]=shuzu[xierushuju[x]];
                 wei_duan[1]=wei[x];
                 HC595_QUDONG();
                 }
                 
           }
           if(i==2)  選擇高位數碼管
           {
             for(x=8;x<16;x++)
                 {
                    wei_duan[0]=shuzu[xierushuju[x]];
                 wei_duan[2]=wei[x];
                 HC595_QUDONG();
                 }
  }

}








void HC595_qudong()     //595驅動函數
{

static unsigned char i=0;


        for(i=0;i<8;i++)                        // 位選2
        {
          shizhong=0;                                 
          shuju=wei_duan[2]&0x80;         
          wei_duan[2]<<=1;                          
          shizhong=1;                                 
        }
        for(i=0;i<8;i++)        //位選1
        {
          shizhong=0;
          shuju=wei_duan[1]&0x80;
          wei_duan[1]<<=1;
          shizhong=1;                               
        }                                                       
                for(i=0;i<8;i++)         //段選
        {
          shizhong=0;
          shuju=wei_duan[0]&0x80;
          wei_duan[0]<<=1;
          shizhong=1;                       
        }
        suocun=1;                //釋放輸出                  
        shuju=0;
        suocun=0;

}

QQ圖片20190115212414.png

我關閉一個其中一個段口 QQ圖片20190118202432.png 就能正常顯示,但是一起就不行。

回復

使用道具 舉報

ID:149389 發表于 2019-1-19 09:40 | 顯示全部樓層
本帖最后由 weidoit 于 2019-1-21 10:33 編輯

Proteus仿真通過,沒問題的
3.14159.png
  1. /****************************************************************
  2. * 文件名:code.c
  3. * 說  明:Chip=AT89C52; Crystal=12MHz;12T
  4. * 功  能:3*74xx595 顯示16數碼管
  5. * 修  訂:FreeFish 2019
  6. * 版  本:V0.1
  7. ****************************************************************/
  8. #include<reg52.h>
  9. sbit   Dat=P2^0;
  10. sbit   RCK=P2^2;
  11. sbit   SCK=P2^3;
  12. unsigned char index,k;
  13. unsigned int  position;
  14. unsigned char code table[]={
  15.   0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
  16. unsigned char Dat_Buf[3];        //要送出的3個字節數據  (段數據-位數據-位數據)
  17. unsigned char Dat_Disp[16];        //要顯示的16個字符。
  18. /****************************************************************
  19. * 函數功能:595寫入數據
  20. ****************************************************************/
  21. void write595(unsigned char Data)
  22. {
  23.   unsigned char i;
  24.   for (i=0;i<8;i++)
  25.   {
  26.     Dat = ((Data & 0x80)==0x80)?1:0;
  27.     Data = Data << 1;               
  28.     SCK = 1;
  29.     SCK = 0;
  30.   }
  31. }
  32. void InitTimer0(void)        //1ms
  33. {
  34.   TMOD = 0x01;
  35.   TH0 = 0x0FC;
  36.   TL0 = 0x18;
  37.   EA = 1;
  38.   ET0 = 1;
  39.   TR0 = 1;
  40. }
  41. /****************************************************************
  42. * 函數功能:主函數
  43. ****************************************************************/
  44. void main()
  45. {       
  46.   InitTimer0();
  47.   Dat_Disp[0]=3;
  48.   Dat_Disp[1]=1;
  49.   Dat_Disp[2]=4;
  50.   Dat_Disp[3]=1;
  51.   Dat_Disp[4]=5;
  52.   Dat_Disp[5]=9;
  53.   Dat_Disp[6]=2;
  54.   Dat_Disp[7]=6;
  55.   Dat_Disp[8]=5;
  56.   Dat_Disp[9]=3;
  57.   Dat_Disp[10]=5;
  58.   Dat_Disp[11]=8;
  59.   Dat_Disp[12]=9;
  60.   Dat_Disp[13]=7;
  61.   Dat_Disp[14]=9;
  62.   Dat_Disp[15]=3;
  63.   while(1)
  64.   {
  65.     if(index==0)
  66.       Dat_Buf[0]=table[Dat_Disp[index]]-0x80;//裝載段數據
  67.     else         
  68.       Dat_Buf[0]=table[Dat_Disp[index]];//裝載段數據
  69.     position=1<<index;
  70.     Dat_Buf[1]=position/256;        //位選16-9
  71.     Dat_Buf[2]=position%256;        //位選8-1
  72.     for (k=0;k<3;k++)
  73.     {
  74.       write595(Dat_Buf[k]);  //
  75.     }
  76.     RCK=1;          //更新數據
  77.     RCK=0;                //準備下一次
  78.     //Delay(10); //點亮一段時間
  79.   }
  80. }
  81. void Timer0Interrupt(void) interrupt 1        //1ms
  82. {
  83.   TH0 = 0x0FC;
  84.   TL0 = 0x18;
  85.   //add your code here!
  86.   index++;
  87.   index=index%16;
  88. }
復制代碼



回復

使用道具 舉報

ID:149389 發表于 2019-1-19 10:00 | 顯示全部樓層
本帖最后由 weidoit 于 2019-1-21 10:37 編輯

Proteus仿真動態掃描,動態顯示的效果,Proteus環境正常。
12345.gif
  1. /****************************************************************
  2. * 文件名:code.c
  3. * 說  明:Chip=AT89C52; Crystal=12MHz;12T
  4. * 功  能:3*74xx595 顯示16數碼管
  5. * 修  訂:FreeFish 2019
  6. * 版  本:V0.1
  7. ****************************************************************/
  8. #include<reg52.h>
  9. sbit   Dat=P2^0;
  10. sbit   RCK=P2^2;
  11. sbit   SCK=P2^3;
  12. unsigned char index,k,t;
  13. unsigned char flag;
  14. unsigned int  position;
  15. unsigned int number;
  16. unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};
  17. unsigned char Dat_Buf[3];        //要送出的3個字節數據  (段數據-位數據-位數據)
  18. unsigned char Dat_Disp[16];        //要顯示的16個字符。
  19. /****************************************************************
  20. * 函數功能:595寫入數據
  21. ****************************************************************/
  22. void write595(unsigned char Data)
  23. {
  24.   unsigned char i;
  25.   for (i=0;i<8;i++)
  26.   {
  27.     Dat = ((Data & 0x80)==0x80)?1:0;
  28.     Data = Data << 1;               
  29.     SCK = 1;
  30.     SCK = 0;
  31.   }
  32. }
  33. void InitTimer0(void)        //1ms
  34. {
  35.   TMOD = 0x01;
  36.   TH0 = 0x0FC;
  37.   TL0 = 0x18;
  38.   EA = 1;
  39.   ET0 = 1;
  40.   TR0 = 1;
  41. }
  42. /****************************************************************
  43. * 函數功能:主函數
  44. ****************************************************************/
  45. void main()
  46. {       
  47.   InitTimer0();
  48.   Dat_Disp[0]=0;
  49.   Dat_Disp[1]=1;
  50.   Dat_Disp[2]=2;
  51.   Dat_Disp[3]=3;
  52.   Dat_Disp[4]=4;
  53.   Dat_Disp[5]=5;
  54.   Dat_Disp[6]=6;
  55.   Dat_Disp[7]=7;
  56.   Dat_Disp[8]=1;
  57.   Dat_Disp[9]=1;
  58.   Dat_Disp[10]=2;
  59.   Dat_Disp[11]=2;
  60.   Dat_Disp[12]=3;
  61.   Dat_Disp[13]=3;
  62.   Dat_Disp[14]=4;
  63.   Dat_Disp[15]=4;
  64.   while(1)
  65.   {
  66.     if (flag==1)
  67.     {
  68.       flag=0;
  69.       for(t=0;t<16;t++)
  70.       {
  71.         Dat_Disp[t]++;
  72.         Dat_Disp[t]=Dat_Disp[t]%10;
  73.       }
  74.     }
  75.     Dat_Buf[0]=table[Dat_Disp[index]];//裝載段數據
  76.     position=1<<index;
  77.     //
  78.     Dat_Buf[1]=position/256;        //位選16-9
  79.     Dat_Buf[2]=position%256;        //位選8-1

  80.     for (k=0;k<3;k++)
  81.     {
  82.       write595(Dat_Buf[k]);  //寫595里面的內容屏蔽的話屏全亮
  83.     }
  84.     RCK=1;          //更新數據
  85.     RCK=0;                //準備下一次
  86.     //Delay(10); //點亮一段時間
  87.   }
  88. }
  89. void Timer0Interrupt(void) interrupt 1        //1ms
  90. {
  91.   TH0 = 0x0FC;
  92.   TL0 = 0x18;
  93.   //add your code here!
  94.   index++;
  95.   index=index%16;
  96.   number++;
  97.   if (number>=500)
  98.   {
  99.     number=0;
  100.     flag=1;
  101.   }
  102. }


復制代碼



回復

使用道具 舉報

ID:441232 發表于 2019-1-19 18:50 來自手機 | 顯示全部樓層
weidoit 發表于 2019-1-19 09:40
Proteus仿真通過,沒問題的

嗯,你用的是我的程序嘛?
回復

使用道具 舉報

ID:466578 發表于 2019-1-20 14:28 | 顯示全部樓層
  1. #include<reg52.h>

  2. #define u16 unsigned int
  3. #define u8 unsigned char


  4. sbit shizhong = P2^0;
  5. sbit shuju   = P2^1;
  6. sbit suocun = P2^2;

  7. u16 code wei[]={0x0001,0x0002,0x0004,0x0008,0x0010,0x0020,0x0040,0x0080,0x0100,0x0200,0x0400,0x0800,0x1000,0x2000,0x4000,0x8000};
  8. u8 code duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};

  9. void HC595_qudong(u8 duan595,u16 wei595)     //595驅動函數
  10. {
  11.         u8 i=0;


  12.         for(i=0;i<8;i++)           //段選
  13.         {
  14.           shizhong=0;                                 
  15.           shuju=duan595&0x80;         
  16.           duan595<<=1;                          
  17.           shizhong=1;                                 
  18.         }
  19.         for(i=0;i<16;i++)        //位選
  20.         {
  21.           shizhong=0;
  22.           shuju=wei595&0x8000;
  23.           wei595<<=1;
  24.           shizhong=1;                                
  25.         }                                                        

  26.         suocun=1;                //輸出                  
  27.         shuju=0;
  28.         suocun=0;

  29. }

  30. void main()
  31. {
  32.         u8 i;
  33.         u8 display_num[16]={1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6};

  34.        
  35.         while(1)
  36.         {
  37.                 for(i=0;i<16;i++)
  38.         {
  39.                         HC595_qudong(duan[display_num[i]],wei[i]);

  40.                 }

  41.         }
  42. }
復制代碼

無標題.png

回復

使用道具 舉報

ID:79874 發表于 2019-1-21 09:16 來自手機 | 顯示全部樓層
hnmenglei 發表于 2019-1-18 12:19
感謝,點我的發帖里邊,有我發布的問題。

分享一下程序加仿真
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产亚洲一区二区三区在线观看 | 亚洲日韩中文字幕一区 | 日韩精品一区二区三区视频播放 | 欧美成年网站 | 日韩视频a | 免费久久99精品国产婷婷六月 | 欧美激情99 | 亚洲精品乱码久久久久久久久 | 91九色麻豆| 国产av毛片| 中文字幕在线免费视频 | 亚洲风情在线观看 | 久色视频在线观看 | 久久噜噜噜精品国产亚洲综合 | 欧美国产精品一区二区三区 | 涩涩鲁亚洲精品一区二区 | 成人久久18免费 | 日韩成人在线电影 | 欧美11一13sex性hd| 国产精品免费一区二区三区 | 久久99这里只有精品 | 伊人久久在线观看 | 国产目拍亚洲精品99久久精品 | 欧美视频一区二区三区 | 成人在线中文字幕 | 亚洲精品日韩在线观看 | 国产欧美一区二区三区另类精品 | 成人免费视频久久 | 亚洲欧美一区二区三区情侣bbw | 干干干操操操 | 中文字幕日韩一区二区 | 91亚洲精品在线观看 | 亚洲另类自拍 | 亚洲欧美日韩精品久久亚洲区 | 欧美激情一区二区三区 | 日韩精品久久久久久 | 亚洲视频在线观看 | 精品久久久久一区二区国产 | 四虎最新视频 | 亚洲综合色站 | 国产99久久精品一区二区永久免费 |