日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

74HC595驱动程序

發(fā)布時(shí)間:2025/4/16 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 74HC595驱动程序 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.





文章原始地址:http://feotech.com/?p=44




一. 74HC595芯片介紹
74HC595是串口轉(zhuǎn)并口芯片,可輸出三種狀態(tài):高電平、低電平和高組態(tài)。
一片74HC595芯片可實(shí)現(xiàn)3根口線擴(kuò)展為8根口線.也可采用多片74HC595進(jìn)行級(jí)聯(lián)的方式擴(kuò)展輸出口線。


Q0~Q7: 并行數(shù)據(jù)數(shù)據(jù)輸出端;
GND: 接地引腳;
Q7S: 串行數(shù)據(jù)輸出(多芯片級(jí)聯(lián)時(shí)使用);
MR: 復(fù)位引腳,當(dāng)引腳接低電平時(shí)芯片內(nèi)部數(shù)據(jù)存儲(chǔ)寄存器數(shù)據(jù)清零復(fù)位.如不使用一般接高電平;
SHCP: 移位寄存器的時(shí)鐘輸入,當(dāng)接收到上升沿時(shí)移位寄存器內(nèi)部數(shù)據(jù)整體后移;
STCP: 數(shù)據(jù)存儲(chǔ)寄存器時(shí)鐘輸入,當(dāng)檢測(cè)到上升沿時(shí)使能數(shù)據(jù)存儲(chǔ)寄存器,將芯片接收到的數(shù)據(jù)輸出到Q0~Q7 ,Q7S引腳.可以將其理解為鎖存信號(hào),當(dāng)數(shù)據(jù)發(fā)送給芯片完成后對(duì)該引腳發(fā)送上升沿;
OE: 輸出使能引腳,為高電平時(shí)芯片輸出引腳為高組態(tài),當(dāng)為低電平時(shí)芯片輸出引腳為高(低)電平.該引腳可用于同時(shí)控制并行輸出引腳的電平,如控制LED閃爍等.當(dāng)不使用該功能時(shí)通常接低電平;
DS: 串行數(shù)據(jù)輸入端
VCC: 電源引腳

從功能框圖中可以看出74HC595含有一個(gè)移位寄存器,一個(gè)存儲(chǔ)寄存器和一個(gè)三態(tài)輸出控制器。

在使用74HC595設(shè)計(jì)電路時(shí)應(yīng)注意不同廠家生產(chǎn)的芯片對(duì)時(shí)鐘最高頻率和高電平保持時(shí)間范圍都有不同要求.應(yīng)查看對(duì)應(yīng)廠家的芯片Data Sheet.本例程中使用的是Nexperia (NXP)所生產(chǎn)的74HCT595。

二. 74HC595硬件設(shè)計(jì)與74HC595驅(qū)動(dòng)程序

1.單芯片工作模式

/********************************************************************************* @file LED.c* @author Ryan Zhao* @version V1.0.0* @date 2017-05-03* @brief 用于通過(guò)驅(qū)動(dòng)芯片74HC595來(lái)控制LED.******************************************************************************* @attention* 注意CPU引腳的頻率應(yīng)在74HC595正常工作所允許的范圍.****************************************************************************** **/ /** * @brief 74HC595 的引腳初始化. * @param None. * @retval None. */ void LED595Init(void) { GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB |RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE);//如果74HC595的驅(qū)動(dòng)引腳為JTAG,則將JTAG引腳禁用并配置為通用GPIO引腳.//如果驅(qū)動(dòng)引腳為通用GPIO則需要注釋掉以下內(nèi)容GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//禁止JTAG功能,保留SWDGPIO_InitStructure.GPIO_Pin = LED595_DATA_PIN | LED595_LATCH_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, &GPIO_InitStructure); GPIO_ResetBits(GPIOB,LED595_DATA_PIN | LED595_LATCH_PIN);//Data PinGPIO_InitStructure.GPIO_Pin = LED595_DATA_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(LED595_DATA_PORT, &GPIO_InitStructure); //Clk PinGPIO_InitStructure.GPIO_Pin = LED595_CLK_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(LED595_CLK_PORT, &GPIO_InitStructure); //Latch PinGPIO_InitStructure.GPIO_Pin = LED595_LATCH_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(LED595_LATCH_PORT, &GPIO_InitStructure); } /*** @brief 將輸入的數(shù)據(jù)輸出到74HC595的引腳.* @param Input 1 byte data.* @retval None. **/ void LED595SendData(unsigned char OutData) {unsigned char i; //發(fā)送數(shù)據(jù)時(shí)做循環(huán)使用臨時(shí)變量for(i=0; i<8; i++) //將8位數(shù)據(jù)按位發(fā)送,先發(fā)送高字節(jié)后發(fā)送低字節(jié){LED595_CLK_RESET;//時(shí)鐘線低電平if( (OutData & 0x8000) == 0x8000)//判斷數(shù)據(jù)高低位{LED595_DATA_SET; //數(shù)據(jù)線高電平}else{LED595_DATA_RESET; //數(shù)據(jù)線低電平}OutData = OutData << 1; //數(shù)據(jù)左移1位LED595_CLK_SET; //時(shí)鐘線高電平}//上升沿輸出數(shù)據(jù)LED595_LATCH_RESET; LED595_LATCH_SET; } /********************************************************************************* @file LED595.h* @author Ryan Zhao* @version V1.0.0* @date 2017-05-03* @brief 用于通過(guò)驅(qū)動(dòng)芯片74HC595來(lái)控制LED.******************************************************************************* @attention* 注意CPU引腳的切換速度應(yīng)在74HC595正常工作所允許的范圍.****************************************************************************** **/ //74HC595口線定義宏定義.當(dāng)驅(qū)動(dòng)74HC595引腳改變時(shí),只需更改底層引腳宏定義即可 #define LED595_DATA_PORT GPIOB #define LED595_DATA_PIN GPIO_Pin_3 #define LED595_CLK_PORT GPIOB #define LED595_CLK_PIN GPIO_Pin_5 #define LED595_LATCH_PORT GPIOB #define LED595_LATCH_PIN GPIO_Pin_4 //74HC595口線高低電平宏定義 #define LED595_DATA_SET GPIO_SetBits(LED595A_DATA_PORT,LED595A_DATA_PIN) #define LED595_DATA_RESET GPIO_ResetBits(LED595A_DATA_PORT,LED595A_DATA_PIN) #define LED595_CLK_SET GPIO_SetBits(LED595A_CLK_PORT,LED595A_CLK_PIN) #define LED595_CLK_RESET GPIO_ResetBits(LED595A_CLK_PORT,LED595A_CLK_PIN) #define LED595_LATCH_SET GPIO_SetBits(LED595A_LATCH_PORT,LED595A_LATCH_PIN) #define LED595_LATCH_RESET GPIO_ResetBits(LED595A_LATCH_PORT,LED595A_LATCH_PIN)

函數(shù)使用

LED595SendData(0xFF); //74HC595輸出端全部為高電平,LED全部熄滅 LED595SendData(0x00); //74HC595輸出端全部為低電平,LED全部點(diǎn)亮

2.級(jí)聯(lián)工作模式

/********************************************************************************* @file LED.c* @author Ryan Zhao* @version V1.1.0* @date 2017-06-05* @brief 用于通過(guò)驅(qū)動(dòng)芯片74HC595來(lái)控制LED.******************************************************************************* @attention** 注意CPU引腳的切換速度應(yīng)在74HC595正常工作所允許的范圍.******************************************************************************* **/ /** * @brief 74HC595 的引腳初始化. * @param None. * @retval None. */ void LED595Init(void) {GPIO_InitTypeDef GPIO_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE);//Data PinGPIO_InitStructure.GPIO_Pin = LED595_DATA_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(LED595_DATA_PORT, &GPIO_InitStructure);//Clk PinGPIO_InitStructure.GPIO_Pin = LED595_CLK_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(LED595_CLK_PORT, &GPIO_InitStructure);//Latch PinGPIO_InitStructure.GPIO_Pin = LED595_LATCH_PIN;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(LED595_LATCH_PORT, &GPIO_InitStructure); }/*** @brief LED顯示函數(shù).* @param 要顯示的數(shù)據(jù).* @retval None. **/ void LED595SendData(unsigned int OutData) {unsigned char i; //發(fā)送數(shù)據(jù)時(shí)做循環(huán)使用臨時(shí)變量for (i = 0; i < 16; i++) //將16位數(shù)據(jù)按位發(fā)送{LED595_CLK_RESET; //時(shí)鐘線低電平if ((OutData & 0x8000) == 0x8000) //判斷數(shù)據(jù)高低位{LED595_DATA_SET; //發(fā)送數(shù)據(jù)高位}else{LED595_DATA_RESET; //發(fā)送數(shù)據(jù)低位}OutData = OutData << 1; //數(shù)據(jù)左移1位LED595_CLK_SET; //時(shí)鐘線高電平}//上升沿輸出數(shù)據(jù)LED595_LATCH_RESET;LED595_LATCH_SET; } /********************************************************************************* @file LED595.h* @author Ryan Zhao* @version V1.1.0* @date 2017-05-03* @brief 用于通過(guò)驅(qū)動(dòng)芯片74HC595來(lái)控制LED.******************************************************************************* @attention** 注意CPU引腳的切換速度應(yīng)在74HC595正常工作所允許的范圍.******************************************************************************* **//**********************物理層定義******************************/ //74HC595口線定義宏定義.當(dāng)驅(qū)動(dòng)74HC595引腳改變時(shí),只需更改底層引腳宏定義即可 #define LED595_DATA_PORT GPIOC #define LED595_DATA_PIN GPIO_Pin_5 #define LED595_CLK_PORT GPIOB #define LED595_CLK_PIN GPIO_Pin_0 #define LED595_LATCH_PORT GPIOB #define LED595_LATCH_PIN GPIO_Pin_1//74HC595口線高低電平宏定義 #define LED595_DATA_SET GPIO_SetBits(LED595_DATA_PORT,LED595_DATA_PIN) #define LED595_DATA_RESET GPIO_ResetBits(LED595_DATA_PORT,LED595_DATA_PIN) #define LED595_CLK_SET GPIO_SetBits(LED595_CLK_PORT,LED595_CLK_PIN) #define LED595_CLK_RESET GPIO_ResetBits(LED595_CLK_PORT,LED595_CLK_PIN) #define LED595_LATCH_SET GPIO_SetBits(LED595_LATCH_PORT,LED595_LATCH_PIN) #define LED595_LATCH_RESET GPIO_ResetBits(LED595_LATCH_PORT,LED595_LATCH_PIN) #define LED595_DATA_PORT GPIOC #define LED595_DATA_PIN GPIO_Pin_5 #define LED595_CLK_PORT GPIOB #define LED595_CLK_PIN GPIO_Pin_0 #define LED595_LATCH_PORT GPIOB #define LED595_LATCH_PIN GPIO_Pin_1//74HC595口線高低電平宏定義 #define LED595_DATA_SET GPIO_SetBits(LED595_DATA_PORT,LED595_DATA_PIN) #define LED595_DATA_RESET GPIO_ResetBits(LED595_DATA_PORT,LED595_DATA_PIN) #define LED595_CLK_SET GPIO_SetBits(LED595_CLK_PORT,LED595_CLK_PIN) #define LED595_CLK_RESET GPIO_ResetBits(LED595_CLK_PORT,LED595_CLK_PIN) #define LED595_LATCH_SET GPIO_SetBits(LED595_LATCH_PORT,LED595_LATCH_PIN) #define LED595_LATCH_RESET GPIO_ResetBits(LED595_LATCH_PORT,LED595_LATCH_PIN)

函數(shù)使用

LED595SendData(0xFFFF); //74HC595輸出端全部為高電平,LED全部熄滅 LED595SendData(0x0000);//74HC595輸出端全部為低電平,LED全部點(diǎn)亮

總結(jié)

以上是生活随笔為你收集整理的74HC595驱动程序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。