74HC595控制8位數碼管 51單片機

2021-01-08 電子工程世界

74HC595是8位串行移位寄存器,亦能串行輸出控制下一級級聯晶片。關於級聯、595晶片具體我就不多介紹,大家自己查吧!下面直接貼代碼

此程序已成功移植到STM32平臺,敬請關注!

// 注意 此代碼沒有什麼技術含量,也沒有按規範些,旨在說明595怎麼控制,大家不要模仿。

// 此代碼刷新速度有點慢,注意想辦法優化,time變量用定時器中斷處理,主函數不斷地刷新顯示函數,這樣就不會有閃屏,當然在STM32平臺毫無壓力

 

#include


sbit SCK = P3^2;    // 數據輸入時鐘線,脈衝
sbit SI  = P3^3;    // 數據線
sbit RCK = P3^4;    // 鎖存

unsigned char code SMG[10] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90};
unsigned char Wei[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};//位選
unsigned char Val[8]  = {0};

 


void Output(void)
{
    RCK = 0;
    RCK = 1;
}


void Write_Byte(unsigned char dat)
{
    unsigned char i = 0;
    //每次發送一位數據,8次發送完畢,先發送高位(切記)
    for(i=0; i<8; i++)
    {
        SCK = 0;
        SI  = dat & 0x80;
        SCK = 1;
       
        dat <<= 1;      
    }
}


void Display(unsigned char * p)
{
    unsigned char * pt = Wei;
    //注意,先發送位選,因為控制位選的595晶片在控制段選的595晶片下一級
    Write_Byte(*(pt+0));// 位選,
    Write_Byte(SMG[*(p+0)]);// 段選
    Output();//發送到595 輸出
   
    Write_Byte(*(pt+1));
    Write_Byte(SMG[*(p+1)]);
    Output();
   
    Write_Byte(*(pt+2));
    Write_Byte(SMG[*(p+2)]);
    Output();
   
    Write_Byte(*(pt+3));
    Write_Byte(SMG[*(p+3)]);
    Output();
    
    Write_Byte(*(pt+4));
    Write_Byte(SMG[*(p+4)]);
    Output();
   
    Write_Byte(*(pt+5));
    Write_Byte(SMG[*(p+5)]);
    Output();
   
    Write_Byte(*(pt+6));
    Write_Byte(SMG[*(p+6)]);
    Output();
   
    Write_Byte(*(pt+7));
    Write_Byte(SMG[*(p+7)]);
    Output();
   
}

 

int main(void)
{
    unsigned long int time = 0;
    unsigned int t = 0;
   
    while(1)
    {
        t++;
       
        if(100==t)
        {
            t= 0;
            time++;
           
            Val[0] = time / 10000000 % 10;
            Val[1] = time / 1000000 % 10;
            Val[2] = time / 100000 % 10;
            Val[3] = time / 10000 % 10;
            Val[4] = time / 1000 % 10;  
            Val[5] = time / 100 % 10;   
            Val[6] = time / 10 % 10;
            Val[7] = time % 10;
         }
       
        Display(Val);
    }
   
    return 0;
}

 

 

關鍵字:74HC595控制  8位數碼管  51單片機 編輯:什麼魚 引用地址:http://news.eeworld.com.cn/mcu/2015/1029/article_23379.html

推薦閱讀

AT89C51通過74HC595鎖存器控制流水燈

先上圖如圖,通過單片機P2^0,P2^1,P2^3將控制信號通過鎖存器傳輸到LED,從而實現流水燈小程序。主程序如下:#include<reg51.h>#include<intrins.h>#include<74HC595.H>void Delay1ms() //@11.0592MHz  { unsigned char i, j;  _nop_(); i = 2; j = 199; do { while (--j); } while (--i);} void delays(unsigned t) //delay 500ms{ t=500*t

發表於 2020-05-04

8位共陽數碼管74HC595晶片AVR單片機控制 proteus仿真及源碼

埠#define SHCP PA6//為移位寄存器的時鐘脈衝輸入口#define STCP PA7//為存儲寄存器的時鐘脈衝輸入口//OE為輸出使能埠,低電平有效,已直接接地void smgPortInit(void);//數碼管埠初始化void smg74HC595_WriteByte(uchar ucData);        //向74HC595發送一個數據void smgDisplay(uchar bitCode,uchar segCode,uchar dp);        //在數碼管的某一位上顯示某一個字符//共陽數碼管的編碼,並將數據

發表於 2019-11-12

STM32三線控制八個發光二極體(74HC595)

STM32三線控制八個發光二極體是典型的IO擴展應用,思路和學習51單片機時一致,下面直接上圖和代碼!簡述:1.74HC595D這裡使用的5V供電,和STM32間通過MOS管做電平轉換處理;2.74HC595D使用11、12、14腳PIN11-> SHCP shift register clock input 移位時鐘PIN12-> STCP storage register clock input 鎖存時鐘PIN14-> SI serial data input 串行數據代碼:#include "74HC595D.h"#include "delay.h"u8 CHx

發表於 2019-08-10

AVRWARE++開發筆記7:74HC595串行控制LED燈實驗

         本文只針對於初學者,高手請繞過!    1、實驗目的利用單片機的IO口模擬SPI總線時序邏輯,通過74HC595控制24個LED,學會74HC595串行控制的使用方法。      2、實驗內容    編寫一段程序,使24個LED先全亮,然後以一秒為間隔從左至右的一列接一列的熄滅。    3、硬體原理74HC595串行控制LED燈硬體原理圖如下圖所示,使用排線與端子P3相連,則單片機相應埠的0-2引腳與端子P3的CS_595_1、CLK_595_1、Data_595

發表於 2019-07-13

AVR單片機控制74HC595 74HC165的示例程序

硬體說明:ATmega48/88/168的PB5是SPI時鐘輸出,接74HC595/74HC165的移位時鐘輸入端;PB4是SPI的MISO數據輸人,接74HC165的數據輸出;PB3是SPI的MOSI數據輸出,接74HC595的串行數據輸入端SER;PB2接74HC595/74HC165的鎖存時鐘輸入端。      程序1:本例子是用硬體SPI接口循環發送一個變量到74HC595,並且在數據發送完畢後通過 單片機 的另外一個IO接口PB2輸出一個「鎖存」脈衝 ,使74HC595把移位寄存器的數據輸出到鎖存寄存器,並驅動8個LED輸出,實現來回流水的效果。&nbsp

發表於 2017-12-18

SPI 調試-74HC595 數碼管控制實驗

注意:要讓S3C2440的一路SPI去控制外設,就必須把給nSSn外接一個上拉電阻!才能保證數據的正常傳輸。可以再找一個I/0口來控制74HC595的片選。74HC595是8位串行輸入轉並行輸出移位寄存器。74HC595引腳圖!控制原理圖:  RCK也就是STCP ,在採集數據前要給RCK低電平,採集完信號要給高電平。RCK(12腳):上升沿時移位寄存器的數據進入數據存儲寄存器,下降沿時存儲寄存器數據不變。通常我將RCK置為低電平,當移位結束後,在RCK端產生一個正脈衝(5V時,大於幾十納秒就行了。我通常都選微秒級),更新顯示數據。控制圖程序:void SPI_TEST(void){int i;U32 k

發表於 2017-04-04

相關焦點

  • 單片機驅動數碼管設計詳解(74HC595實現)
    數碼管顯示設計本設計使用了一個4位的數碼管,為共陽型,為了節省單片機的IO口,使用了兩片74HC595作為數碼管的驅動晶片,共佔用3個IO口。2. 74HC595簡介74HC595是8位的移位寄存器,串入並出,並具有鎖存功能,被廣泛的用於數碼管、點陣的驅動電路中。
  • 74HC595驅動LED的電路設計方案
    1  74HC595 的使用說明74HC595 內含8 位串入、串/ 並出移位寄存器和8位三態輸出鎖存器。寄存器和鎖存器分別有各自的時鐘輸入(SCLK和SLCK) , 都是上升沿有效。當SCLK從低到高電平跳變時, 串行輸入數據(SDA) 移入寄存器; 當SLCK從低到高電平跳變時, 寄存器的數據置入鎖存器。
  • 74HC595 的實際應用與編程
    推薦閱讀 bascom avr tiny45驅動74hc595 如題,代碼如下:$regfile = "attiny45.dat"                                   '指定單片機型號$crystal = 8000000
  • #51單片機#8位數碼管(74HC595晶片)的使用方法
    數碼管基本屬性:1.採用2片595驅動數碼管,需要單片機3路IO口,根據數碼管動態掃描原理進行顯示;2.寬工作電壓3.3V到5V;3.PCB板尺寸:71mm*22mm
  • STm32驅動74HC595引腳圖時序圖工作原理
    74HC595和74hc164一樣是在單片機系統中常用的晶片之一他的作用就是把串行的信號轉為並行的信號,常用在各種數碼管以及點陣屏的驅動晶片, 使用74HC595可以節約單片機mcu的io口資源,用3個io就可以控制8個數碼管的引腳,他還具有一定的驅動能力,可以免掉三極體等放大電路,所以這塊晶片是驅動數碼管的神器.應用非常廣泛,點這裡可以下載完整的74HC595
  • 51單片機基礎之靜態數碼管電路
    原理圖多數人也都知道,51單片機的入門第一篇就是Led燈的操作,當然了,那也是最基本的操作。上次玩完LED燈,就相當於是入門,今天我們來看看數碼管,對於數碼管,大家可以是再熟悉不過了,生活中處處都可以見到各種各樣的數碼管,但是你知道其內部的原理嗎,其實還是相當簡單的,老樣子,我們要玩什麼,當然是先看看這個部分的原理圖了:由原理圖可知,八個數碼管並不是直接接在單片機的IO口上的,而是用了74HC595晶片,那麼我們要想驅動數碼管,就必須了解595晶片到底是個什麼玩意兒
  • 74HC595在單片機上的應用及程序
    74HC595具有8位串入並出的三態門電路。高速率:最高55MHz(5V工作電壓)本文引用地址:http://www.eepw.com.cn/article/201612/324569.htm寬的工作電壓範圍:2V -6V每個口的最大電流值(QA-QH):±35mA當單片機的I/O資源比較緊張時,採用595並進行級聯是一個很好的選擇
  • 51單片機C編程(十五 74HC595控制四位數碼管)
    =P1^0;//串行數據輸入sbit SCLK_595=P1^1;//移位時鐘脈衝sbit RCK_595=P1^2;//輸出鎖存器控制脈衝sbit P20=P2^0;sbit P21=P2^1;sbit
  • 51單片機學習之4-數碼管
    數碼管顯示亮度高,響應速度快,可以在一些比較差的環境中使用。有1位、2位、4位、8位連體等。。。也有專用於顯示時間的數碼管。 由於數碼管需要佔用單片機的IO口很多,所以一般會搭配74HC573晶片來擴展IO口。《51單片機複習筆記1》有介紹該晶片的使用方法。驅動原理一樣。
  • 第36節:帶數碼管顯示的加法簡易計算器
    第二個:繼續加深理解按鍵與數碼管的關聯程序框架。具體內容,請看原始碼講解。(1)硬體平臺:基於朱兆祺51單片機學習板。數字1鍵對應S1鍵,數字2鍵對應S2鍵,數字3鍵對應S3鍵…. 數字9鍵對應S9鍵, 數字0鍵對應S10鍵。加號鍵對應S13,等於號鍵對應S14,清除復位按鍵對應S16。其它按鍵不用。
  • 數碼管的靜態與動態顯示技術分析
    即讓各位數碼管按照一定順序輪流顯示, 只要掃描頻率足夠高, 由於人眼的「 視覺暫留」現象,就能連續穩定的顯示。靜態顯示法的優點是顯示穩定、亮度大, 節約CPU時間, 但佔有I/O口線較多, 硬體成本高。動態掃描其特點在於能顯著降低顯示部分成本,大大減少顯示接口的連線結構。舉例, 靜態驅動4位數碼管, 需要4×8=32個I/O口, 而動態的驅動位數碼管只需要4+8=12個I/O口。
  • 怎麼用單片機同時控制最多81個繼電器按照實際要求接通或斷開?
    想使用單片機同時控制最多81個繼電器按照實際要求接通或斷開,能否做得到?單片機的類型很多,比較常見的單片機I/O口一般比較少,一般都是4組以內,每組8個,共32個I/O口,以及3組24個、2組16個、1組8個等,稍多一點的有64個I/O口。
  • PIC MSSP_SPI_74HC595
    我覺得74HC595相當於是一個你看得見的寄存器,數據的輸入只能是串行的8位輸入,輸出可以選擇串行輸出,也可以選擇並行輸出。如果把兩個74HC595連在一起,就會有解碼器和掃描的結合的作用,誇張一點,如果時間允許,可以3接口擴展為16接口,雖然輸入數據不同時,但是可以讓輸出數據同時。
  • 單片機控制八隻數碼管滾動顯示1~8 附PROTEUS軟體仿真圖
    數碼管顯示是每一個單片機初學者都必須學的,而單片機驅動數碼管的數字循環顯示實驗,又是單片機基礎中的基礎,同時也是學好C語言編程的關鍵,此實驗在硬體上可以弄清楚單片機驅動原理和數碼管的顯示原理,在軟體上可以幫助建立編程思維和良好的編程習慣,同時加深C語言中 函數,變量和循環結構語句的學習
  • stm32使用三片74HC595級聯程序代碼
    /************************************************************************ Function: Read_74HC595 Description
  • AT89C51串並轉換驅動數碼管實驗指導
    器件:74hc595.本文引用地址:http://www.eepw.com.cn/article/172394.htm引腳說明:SDA:數據輸入口。如果把第一個74HC595的QS和第二個74HC595 的 SDA 相接, 數據即移入第二個74HC595中,照此一個一個接下去, 可接任意多個。數據全部送完後, 給 ST_CP一個上升沿, 寄存器中的數據即置入鎖存器。此時如果 EN 為低電平, 數據即從並口Q0~Q7輸出, 把Q0~Q7 與LED的8 段相接, LED就可以實現顯示了。
  • 51單片機+PID算法水溫控制系統設計
    方案4:採用AT89S52單片機,其內部有8KB單元的程序存儲器,不需要外部擴展程序存儲器,而且其I/O口達32個,完全滿足本次設計需要。   比較這4種方案,綜合的考慮單片機各部分資源,本次設計選用方案4。
  • 74hc573使用方法(74hc573引腳圖及功能_工作原理_封裝尺寸及應用...
    打開APP 74hc573使用方法(74hc573引腳圖及功能_工作原理_封裝尺寸及應用電路) 發表於 2017-12-08 17:10:03
  • Proteus軟體仿真與Keil的51單片機系統設計
    1 概述  隨著半導體技術的飛速發展,以及移動通信、網絡技術、多媒體技術在嵌入式系統設計中的應用,單片機從4位、8位、16位到32位,其發展歷程一直受到廣大電子愛好者的極大關注。