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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機控制兩個級聯(lián)74HC595驅(qū)動數(shù)碼管的消影問題

  [復(fù)制鏈接]
ID:417194 發(fā)表于 2019-1-30 17:18 | 顯示全部樓層 |閱讀模式
新手用單片機開發(fā)板上的2個74HC595級聯(lián)的芯片驅(qū)動數(shù)碼管。目的是顯示0~7.代碼寫好后結(jié)果成了這樣:
P90130-165959.jpg


P90130-165950.jpg

數(shù)碼管不斷地閃爍,但依稀可見數(shù)字。

自己也放慢觀察過亂碼的現(xiàn)象,覺得是當(dāng)?shù)谝淮味芜x位選都輸出后,第一次位選被下一次的段選“擠到”了第一次段選的位置,導(dǎo)致位選出錯,于是看見了好幾個數(shù)碼管同時亮。而且將亮的那幾個數(shù)碼管的位置用十六進制表示,剛好是第一次段選的值!

但是我又想:既然位選是被擠過去的,那我的代碼中第一次循環(huán)完成后,第一次的位選應(yīng)該也會被第二次的段選擠出第一次段選的位置啊?

想過消影,也看了網(wǎng)上不少人的方法,但嘗試后一直沒有改變。我不知道是不是我的消影有問題,或者是代碼方面。希望大佬們能夠幫幫忙

單片機代碼如下:
  1. #include "reg52.h"
  2. #include"intrins.h"

  3. typedef unsigned char u8;
  4. typedef unsigned int u16;

  5. sbit SCL1 = P3^6;
  6. sbit SCL2 = P3^5;
  7. sbit SDA1 = P3^4;

  8. u8 code smgduan[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};                          //數(shù)碼管段選
  9.                             //      0    1       2      3      4       5      6      7      8     9
  10. u8 code weixuan[]={0xFE, 0xFD, 0xFB, 0xF7, 0xEF, 0xDF, 0xBF, 0x7F};

  11. void delay(u16 i)
  12. {
  13.     while(i--);
  14. }

  15. void hc595_in(u8 dat1,u8 dat2)
  16. {
  17.    u16 i;
  18.    for(i=0;i<8;i++)
  19.    {
  20.          SCL1 = 0;
  21.         _nop_();
  22.        if((dat1 & 0x80)==0x80)
  23.           SDA1=1;
  24.        else
  25.          SDA1=0;
  26.       _nop_();
  27.        SCL1 = 1;
  28.           dat1 =_crol_(dat1,1);
  29.    }
  30. for(i=0;i<8;i++)
  31. {
  32.        SCL1 = 0;
  33.        _nop_();
  34.       if((dat2 & 0x80)==0x80)
  35.            SDA1=1;
  36.        else
  37.            SDA1=0;
  38.       _nop_();
  39.      SCL1 = 1;
  40.     dat2 =_crol_(dat2,1);
  41.    }

  42. void hc595_out()
  43. {
  44.    SCL2 = 0;
  45.    SCL2 = 1;
  46.    SCL2 = 0;
  47. }
  48. void main()
  49. {
  50.    u8 i;
  51.   while(1)
  52.   {
  53.       for(i=0;i<8;i++)
  54.      {
  55.         hc595_in(0x00,0xff);
  56.         hc595_in(smgduan[i],weixuan[i]);
  57.         hc595_out();
  58.         delay(300);         
  59.      }
  60.   }
  61. }
復(fù)制代碼



回復(fù)

使用道具 舉報

ID:454000 發(fā)表于 2019-1-30 19:52 | 顯示全部樓層
來學(xué)習(xí)下,大家踴躍發(fā)言咯!

評分

參與人數(shù) 3黑幣 +60 收起 理由
站著說話不腰疼 + 15
shuisheng60 + 10
jinsheng7533967 + 35 贊一個!

查看全部評分

回復(fù)

使用道具 舉報

ID:123289 發(fā)表于 2019-1-31 08:04 | 顯示全部樓層
在切換掃描數(shù)據(jù)數(shù)據(jù)時,做到先關(guān),再改數(shù)據(jù),再開,就可以了。
回復(fù)

使用道具 舉報

ID:164602 發(fā)表于 2019-1-31 08:58 | 顯示全部樓層
下面的程序,是你這個板子的資料,你看看吧!
程序一:不用譯碼器的
/*******************************************************************************
*                 
*                                        普中科技
--------------------------------------------------------------------------------
* 實 驗 名                 : 動態(tài)數(shù)碼管顯示試驗
* 實驗說明       : 8位數(shù)碼管顯示0~7
* 連接方式       : 見連接圖
* 注    意                 :
*******************************************************************************/

#include<reg51.h>

//--定義使用的IO口--//
#define GPIO_DIG   P0        //段選
#define GPIO_PLACE P1        //位選

//--定義全局變量--//
unsigned char code DIG_PLACE[8] = {
0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位選控制   查表的方法控制
unsigned char code DIG_CODE[17] = {
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的顯示碼
unsigned char DisplayData[8];
//用來存放要顯示的8位數(shù)的值

//--聲明全局函數(shù)--//
void DigDisplay(); //動態(tài)顯示函數(shù)

/*******************************************************************************
* 函 數(shù) 名         : main
* 函數(shù)功能                   : 主函數(shù)
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/

void main(void)
{
        unsigned char i;

        for(i=0; i<8; i++)
        {
                DisplayData[i] = DIG_CODE[i];       
        }
        while(1)
        {
                DigDisplay();
        }                               
}

/*******************************************************************************
* 函 數(shù) 名         : DigDisplay
* 函數(shù)功能                   : 使用數(shù)碼管顯示
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/

void DigDisplay()
{
        unsigned char i;
        unsigned int j;

        for(i=0; i<8; i++)
        {
                GPIO_PLACE = DIG_PLACE[i];         //發(fā)送位選
                GPIO_DIG = DisplayData[i];     //發(fā)送段碼
                j = 10;                                                 //掃描間隔時間設(shè)定
                while(j--);       
                GPIO_DIG = 0x00;//消隱
        }
}
程序二:用譯碼器的
/*******************************************************************************
*                 
*                                        普中科技
--------------------------------------------------------------------------------
* 實 驗 名                 : 動態(tài)數(shù)碼管顯示試驗
* 實驗說明       : 8位數(shù)碼管顯示0~7
* 連接方式       : 見連接圖
* 注    意                 :
*******************************************************************************/

#include<reg51.h>

//--定義使用的IO--//
#define GPIO_DIG P0

sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;

//--定義全局變量--//
unsigned char code DIG_CODE[17]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F的顯示碼
unsigned char DisplayData[8];
//用來存放要顯示的8位數(shù)的值

//--聲明全局函數(shù)--//
void DigDisplay(); //動態(tài)顯示函數(shù)
/*******************************************************************************
* 函 數(shù) 名         : main
* 函數(shù)功能                   : 主函數(shù)
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/
void main(void)
{
        unsigned char i;
        for(i=0;i<8;i++)
        {
                DisplayData[i]=DIG_CODE[i];       
        }
        while(1)
        {
                DigDisplay();
        }                               
}
/*******************************************************************************
* 函 數(shù) 名         : DigDisplay
* 函數(shù)功能                   : 使用數(shù)碼管顯示
* 輸    入         : 無
* 輸    出         : 無
*******************************************************************************/
void DigDisplay()
{
        unsigned char i;
        unsigned int j;
        for(i=0;i<8;i++)
        {
                switch(i)         //位選,選擇點亮的數(shù)碼管,
                {
                        case(0):
                                LSA=0;LSB=0;LSC=0; break;//顯示第0位
                        case(1):
                                LSA=1;LSB=0;LSC=0; break;//顯示第1位
                        case(2):
                                LSA=0;LSB=1;LSC=0; break;//顯示第2位
                        case(3):
                                LSA=1;LSB=1;LSC=0; break;//顯示第3位
                        case(4):
                                LSA=0;LSB=0;LSC=1; break;//顯示第4位
                        case(5):
                                LSA=1;LSB=0;LSC=1; break;//顯示第5位
                        case(6):
                                LSA=0;LSB=1;LSC=1; break;//顯示第6位
                        case(7):
                                LSA=1;LSB=1;LSC=1; break;//顯示第7位       
                }
                GPIO_DIG=DisplayData[i];//發(fā)送段碼
                j=10;                                                 //掃描間隔時間設(shè)定
                while(j--);       
                GPIO_DIG=0x00;//消隱
        }
}
回復(fù)

使用道具 舉報

ID:417194 發(fā)表于 2019-1-31 10:14 | 顯示全部樓層
HC6800-ES-V2.0 發(fā)表于 2019-1-31 08:58
下面的程序,是你這個板子的資料,你看看吧!
程序一:不用譯碼器的
/********************************* ...

謝謝,這種我是曉得的。但是我的目的是要用的是板子上2個級聯(lián)的595來驅(qū)動數(shù)碼管。你第一個程序的消影方法我把他在我的程序里試過,沒有效果,所以發(fā)論壇來了。
回復(fù)

使用道具 舉報

ID:424598 發(fā)表于 2019-1-31 10:37 來自手機 | 顯示全部樓層
調(diào)整延時時間試試
回復(fù)

使用道具 舉報

ID:417194 發(fā)表于 2019-1-31 10:58 | 顯示全部樓層
ssk7793 發(fā)表于 2019-1-31 10:37
調(diào)整延時時間試試

試過了,沒用
回復(fù)

使用道具 舉報

ID:186249 發(fā)表于 2019-1-31 11:52 | 顯示全部樓層
和硬件電路有關(guān),做一個產(chǎn)品,595做列驅(qū)動鬼影嚴重,換成138好了
回復(fù)

使用道具 舉報

ID:417194 發(fā)表于 2019-1-31 16:40 | 顯示全部樓層
wsxujn 發(fā)表于 2019-1-31 11:52
和硬件電路有關(guān),做一個產(chǎn)品,595做列驅(qū)動鬼影嚴重,換成138好了

我也覺得是我硬件的問題。
回復(fù)

使用道具 舉報

ID:475798 發(fā)表于 2019-2-12 01:04 來自手機 | 顯示全部樓層
Nimaby 發(fā)表于 2019-1-31 16:40
我也覺得是我硬件的問題。

595的問題!八個輸出之間純在擊穿!595特別容易靜電擊穿!做了一個全彩光立方!開始采用的595!換的頭痛!就放棄595了!
回復(fù)

使用道具 舉報

ID:417194 發(fā)表于 2019-2-25 14:47 | 顯示全部樓層
tusanyou 發(fā)表于 2019-2-12 01:04
595的問題!八個輸出之間純在擊穿!595特別容易靜電擊穿!做了一個全彩光立方!開始采用的595!換的頭痛 ...

哈哈,595是不好用。不過我終于找到問題了,問題出在我的板子上。我的板子P3.4,P3.5管腳被短接了,把短接片拔掉就ok了。自己太粗心了哈哈
回復(fù)

使用道具 舉報

ID:417194 發(fā)表于 2019-2-25 14:48 | 顯示全部樓層
找到問題了,是板子的問題。板子上的控制寄存器的P34P35被短接了,拔掉短接片就OK了
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一区二区精品视频 | 久久av网站 | 亚洲不卡在线观看 | 国产精品一区二区三区四区 | 久久国产精品99久久久久久丝袜 | 1区2区视频| av在线播放网站 | 国产视频中文字幕 | 日韩精品一区二区三区高清免费 | 欧美精品一区二区三区在线播放 | 日韩中文字幕网 | 久久久久国产精品一区二区 | 免费黄色av网站 | 蜜臀91视频| 91精品国产色综合久久不卡蜜臀 | 亚洲成人免费在线观看 | 少妇诱惑av | 狠狠躁18三区二区一区 | 精品久久久一区 | 成人毛片视频在线播放 | 天天狠狠| 久久久久国产一区二区三区 | 久草色播 | 日本精品一区二区三区在线观看视频 | 中文字幕日本一区二区 | 99精品在线观看 | 色网在线看| 国产免费xxx | 九九热在线视频免费观看 | 国产精品久久久久久福利一牛影视 | 二区视频 | 又黑又粗又长的欧美一区 | 久久伊人操 | 国产一级片一区二区三区 | 成人小视频在线观看 | 国产亚洲精品精品国产亚洲综合 | 99国产精品久久久久久久 | 精品国产精品国产偷麻豆 | 亚洲精品二区 | 91天堂网 | 国产日韩欧美另类 |